P3复制0XF0 这样对的吗?
各位高手老师,P3=0xf0; temp=P3; //赋值给P3口temp=temp&0xf0;// 与的值
if(temp!=0xf0) 是否相等??我在程序里,注解了下·~~~我不是非常明白
请各位老师,点评一下~~~~~,这程序是 网上某写的。但程序 运行正常~~~,但是键盘释放检测 ,没有~~~
#include<reg52.h>
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit dula=P2^6; //段声明
sbit wela=P2^7;// 位声明
uchar disnum,temp,key,num;
uchar code table_du[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
delay(uchar);
uchar keyscan();//键盘程序
void main() //主函数
{
disnum=16;
wela=1;
P0=0XFE;
wela=0;
while(1)
{
num=keyscan();
P0=table_du[num];
dula=1;
dula=0;
}
}
uchar keyscan() //键盘扫描程序
{
P3=0xf0; //定义个变量
temp=P3; //赋值给P3口
temp=temp&0xf0;// 与的值
if(temp!=0xf0)// 确定不等于0xf0,但实际是相等的,
{ //实际他应该退出的呀? (因为是相等的,退出!各位高手老师,这样写对的吗?) 帮我分析下,
//谢谢!!!!!delay(10); //延时10秒,去抖
if(temp!=0xf0) //再次确定不相等,执行下一条指令
{
temp=P3;
temp=temp|0X0f;
P3=temp;
key=P3;
switch(key)
{
case 0xee:disnum=0;
break;
case 0xde:disnum=1;
break;
case 0xbe:disnum=2;
break;
case 0x7e:disnum=3;
break;
case 0xed:disnum=4;
break;
case 0xdd:disnum=5;
break;
case 0xbd:disnum=6;
break;
case 0x7d:disnum=7;
break;
case 0xeb:disnum=8;
break;
case 0xdb:disnum=9;
break;
case 0xbb:disnum=10;
break;
case 0x7b:disnum=11;
break;
case 0xe7:disnum=12;
break;
case 0xd7:disnum=13;
break;
case 0xb7:disnum=14;
break;
case 0x77:disnum=15;
break;
}
}
}
return disnum; //返回值
}
delay(uchar x)//延时函数
{
uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
}