rt,在跟着郭天祥老师的视频学习中,自己写了代码和老师的不一样,但可以成功运行。可是之后怎么都想不通是如何运行成功的,
我疑问的点在于当我按下一个按键时,P3口的值就发生了变化,但是如果我是在一次循环的末尾按下的按键,那么进入下一次循环的时候,P3的值不是就又被代码重新赋值了吗?那么是怎么检测到是哪一行的呢?越想越想不通了,但是下载到开发板上是可以完美运行的。好晕
单片机代码如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^7;
sbit dula=P2^6;
uchar code tabledu[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar i,num,temp,key;
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
num=0;
temp=0xfe;
wela=1;
P0=0xc0;
wela=0;
dula=1;
P0=0x00;
dula=0;
while(1)
{
for(i=0;i<4;i++)
{
P3=_crol_(temp,i);
key=P3;
key=key&0xf0;
while(key!=0xf0)
{
delay(10);
key=P3;
key=key&0xf0;
while(key!=0xf0)
{
switch(key)
{
case 0xe0:num=1+(i*4);
break;
case 0xd0:num=2+(i*4);
break;
case 0xb0:num=3+(i*4);
break;
case 0x70:num=4+(i*4);
break;
}
break;
}
dula=1;
P0=tabledu[num-1];
dula=0;
break;
}
}
}
}
|