电子工程师技术服务社区
- 社区首页
- 下载
- 矩阵按键显示数码管0-F程序.zip
资料描述
分析思路:
行列扫描法:
第一步:先把第一行值0,(p3=0xfe)
第二步:把p3赋值给temp,(temp= p3)
第三步:temp和0xf0与后再赋值给temp,(temp=temp&0xf0)
第四步:判断temp是否等于0xf0,(if(temp!=0xf0))
第五步:如果temp!=0xf0说明 p3口高4位有按键按下,具体是哪个用switch case语句来判断
第六步:延时10ms
第七步:重复第二步,第三步和第四步操作,确认有按键按下
第八步:把新的p3赋值给temp
第九步:switch语句,判断出是哪个按键按下
switch (temp)
{
case 0x7e: key1=0;break; 第1个按键按下 (最左上角为第一个按键)
case 0xbe: key2=0;break; 第2个按键按下
case 0xde: key3=0;break; 第3个按键按下
case 0xee: key4=0;break; 第4个按键按下
}
第十步:检测按键释放
while(temp!=0xf0)
{
temp=p3;
temp=temp&0xf0;
}
只要有按键按下 temp不等于0xf0为真,就不断读取p3口的值,然后与0xf0做与运算,再赋值给temp,只要有结果不等于0xf0,说明按键没有释放,只有按键释放后,p3高四位全部为1111,然后temp=temp&0xf0的结果为0xf0 , 然后while语句判断0xf0!=0xf0为假,程序才推出while语句
第十一步:执行相应的代码
第二行 第三行 第四行也是完全一样的操作,第一行写出来以后,后面三行都是复制,稍微改一些数值就可以。
原理图:
程序如下:
#include
#define uint unsigned int
#define uchar unsigned char
uchar code smg_dm;break;
default: break;
}
while(temp!=0xf0)
{
t