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;
}
}
}
}
|