c语言矩阵键盘控制四个led灯,51单片机矩阵键盘与左右流水灯控制C...

c语⾔矩阵键盘控制四个led灯,51单⽚机矩阵键盘与左右流⽔灯
控制C程序
/*
*功能:使⽤矩阵按键使得按键按下时数码管上显⽰各⾃对应的数字的平⽅数;
*    且使⽤定时器0中断使得彩⾊流⽔灯先以20毫秒的速度左移流动4秒后,
*    然后使得彩⾊流⽔灯以20毫秒的速度右移流动;
*⽇期:2013-05-02-16:46
*作者:徐冉沐浴粉
*特别说明:本程序代码已经通过调试,仅供学习使⽤;
*
H无穷控制*/
/
***********AT89C52-RC 单⽚机- 51hei-5 实验板***********/
/*****************51hei开发板*********************/
#include typedef unsigned int uint;
typedef unsigned char uchar;
sbit wela = P2^7;
sbit dula = P2^6;
sbit FM = P2^3;
uchar code table[] = {
0x3F,  //"0"
0x06,  //"1"
0x5B,  //"2"
0x4F,  //"3"
0x66,  //"4"
0x6D,  //"5"
0x7D,  //"6"
0x07,  //"7"
0x7F,  //"8"
0x6F  //"9"
};
uint key1 = 0;
void Marix_keyscan();
void init();
/
/主程序
void main()
{
init();//定时器0初始化
while(1)
{
if(counter == 200)//定时器定时左移流动4秒{
counter = 0;
flag = 1;
TR0 = 0;
TH0 = 0xB8;
TL0 = 0X00;
TR0 = 1;
x = 0;
}
Marix_keyscan();
display(key1);
}
}
//定时器0初始化⼦程序
void init()
{
TMOD = 0x01;
TH0 = 0xB8;
TL0 = 0X00;
EA = 1;
ET0 = 1;
TR0 = 1;
{
uchar bai, shi, ge;
bai = num / 100 % 10; shi = num / 10 % 10; ge  = num % 10;
if(num < 10)
{
dula = 1;
P0 = table[ge];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfe;
wela = 0;
P0 = 0x00;
delay(1);
}
else if(num < 100)
{
仿真软驱
dula = 1;
P0 = table[shi];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfe;
wela = 0;
P0 = 0x00;
delay(1);
dula = 1;
P0 = table[ge];
dula = 0;
P0 = 0xfd; wela = 0;
P0 = 0x00; delay(1);链条传动
}
else
{
dula = 1;
P0 = table[bai]; dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfe; wela = 0;
P0 = 0x00; delay(1);
dula = 1;
P0 = table[shi]; dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfd; wela = 0;
P0 = 0x00; delay(1);
dula = 1;
P0 = table[ge]; dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfb; wela = 0;
}
}
//延时⼦程序
void delay(uint xms)
{
uint i, j;
for(i = xms; i > 0; i--)
for(j = 125; j > 0; j--);
}
/
/矩阵按键检测⼦程序
void Marix_keyscan()
{
uchar temp;  //定义⼀个变量存放P3⼝的值温度自动控制系统
//第⼀次矩阵按键检测
P3 = 0xfe;  //给P3⼝赋⼀个值,使得矩阵按键的第⼀⾏置为低电平,其余⼝置为⾼电平;temp = P3;  //将P3⼝的值赋给temp
temp &= 0xf0;  //通过与0xf0&来检测矩阵按键的各列通过⾏列检测与检测矩阵按键
if(temp != 0xf0)
{
//检测有矩阵按键按下
delay(5);//消抖
temp = P3;//再次将P3⼝的值赋给temp,即再次赋初值检测矩阵按键;
temp &= 0xf0; //再次按位与检测矩阵按键⾏列
if(temp != 0xf0)
{ //确认有键按下
FM = 0;//蜂鸣器发声
银行联动门
temp = P3; //将此时的P3⼝的值赋给temp
switch(temp)
{
case 0xee: key1 = 1 * 1;
break; //检测到key1按下
case 0xde: key1 = 2 * 2;

本文发布于:2024-09-22 04:16:40,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/329604.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   按键   检测   置为   调试   使得   速度
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议