|
按鍵點(diǎn)亮LED燈條,鍵號(hào)越大點(diǎn)亮的越多。在主函數(shù)中 , P2=LED2;P3=LED3; 放在if(key!=-1)中才可以保持按鍵值,否則按鍵彈上去后就恢復(fù)到原始狀態(tài),為什么放直接在while(1)中就不行呢
捕獲.PNG (184.99 KB, 下載次數(shù): 36)
下載附件
2020-3-23 21:00 上傳
代碼如下:
- #include<reg51.h>
- #include<intrins.h>
- unsigned char table[]={0x11,0x12,0x14,0x18,0x21,
- 0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};
- void delay(int x)
- {
- int i,j;
- for(i=x;i>0;i--)
- for(j=110;j>0;j--);
- }
- unsigned char keys_scan() //鍵盤掃描
- {
- unsigned char i,j,hcode,zcode;
- P1=0xf0; //行拉低,列拉高
- if((P1&0xf0)!=0xf0) // 判斷是否有鍵按下
- {
- delay(20); //延時(shí)抖動(dòng)
- if((P1&0xf0)!=0xf0)
- {
- hcode=0xfe; //初始值
- for(j=0;j<4;j++)
- {
- P1=hcode;
- if((P1&0xf0)!=0xf0)
- {
- zcode=~P1; //取反判斷行坐標(biāo)
- for(i=0;i<16;i++)
- {
- if(zcode==table[i])
- return i;
- }
- }
- else
- hcode=_crol_(hcode,1);
- }
- }
- }
- return -1;
- }
- void main(void)
- {
- unsigned char key,i,LED2,LED3;
- key=-1;
- P2=0x00;
- P3=0X00;
- while(1)
- {
- key=keys_scan();
- if(key!=-1)
- {
- LED2=0x00;
- LED3=0X00;
- for(i=0;i<=key;i++)
- {
- if(i<8)
- {
- LED2<<=1;
- LED2++;
- }
- else
- {
- LED3<<=1;
- LED3++;
- }
- }
- P2=LED2;
- P3=LED3;
- }
-
- }
-
- }
復(fù)制代碼
全部資料51hei下載地址:
EXP16.rar
(57.18 KB, 下載次數(shù): 6)
2020-3-23 21:00 上傳
點(diǎn)擊文件名下載附件
|
|