按键点亮LED灯条,键号越大点亮的越多。在主函数中 , P2=LED2;P3=LED3; 放在if(key!=-1)中才可以保持按键值,否则按键弹上去后就恢复到原始状态,为什么放直接在while(1)中就不行呢
代码如下:
- #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); //延时抖动
- if((P1&0xf0)!=0xf0)
- {
- hcode=0xfe; //初始值
- for(j=0;j<4;j++)
- {
- P1=hcode;
- if((P1&0xf0)!=0xf0)
- {
- zcode=~P1; //取反判断行坐标
- 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;
- }
-
- }
-
- }
复制代码
全部资料51hei下载地址:
EXP16.rar
(57.18 KB, 下载次数: 6)
|