|
电路图下载:http://www.51hei.com/f/ks51.pdf
- #include<reg52.h>
- sbit ADDR0 = P1^0;
- sbit ADDR1 = P1^1;
- sbit ADDR2 = P1^2;
- sbit ADDR3 = P1^3;
- sbit ENLED = P1^4;
- sbit KEY_IN1 = P2^4;
- sbit KEY_IN2 = P2^5;
- sbit KEY_IN3 = P2^6;
- sbit KEY_IN4 = P2^7;
- sbit KEY_OUT1 = P2^3;
- sbit KEY_OUT2 = P2^2;
- sbit KEY_OUT3 = P2^1;
- sbit KEY_OUT4 = P2^0;
- unsigned char code LedChar[]={
- 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
- 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
- };
- unsigned char Key_Buff[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
- void T0_Init()
- {
- EA = 1;
- TMOD = 0x01;
- TH0 = 0xFC;
- TL0 = 0x67;
- ET0 = 1;
- TR0 = 1;
- }
- void main()
- {
- unsigned char Key_Loosen[4][4]={{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
- ENLED = 0;
- ADDR3 = 1;
- ADDR2 = 0;
- ADDR1 = 0;
- ADDR0 = 0;
- P0 = LedChar[0];
- P2=0xff;
- T0_Init();
- while(1)
- {
- unsigned char Num2,Num4;
- for(Num4=0;Num4<4;Num4++)
- {
- for(Num2=0;Num2<4;Num2++)
- {
- if(Key_Loosen[Num4][Num2]!=Key_Buff[Num4][Num2])
- // 第一遍(最开始backup[i][j]的值等于1) 第二遍(由于KeySta[i][j]的值附给了backup[i][j],,backup[i][j]的值等于0,但是KeySta[i][j]的值任然等于0,由于if(backup[i][j] != KeySta[i][j])才能进入此程序所以KeySta[i][j]的值必须等于1,而KeySta[i][j]的值等于1的唯一办法就是松开按键,按键松开KeySta[i][j]的值等于1便进入了
-
- {
- if(Key_Loosen[Num4][Num2]==0)
- //第一遍(backup[i][j]的值任然等于1所以无法进入if) 第二遍(此时backup[i][j] == 0便顺理成章的进入了
-
- {
- P0 = LedChar[Num4*4+Num2];
- }
- Key_Loosen[Num4][Num2]=Key_Buff[Num4][Num2];
- //第一遍(KeySta[i][j]的值附给了backup[i][j],所以此时backup[i][j]的值等于0) 第二遍(由于此时KeySta[i][j]的值等于1,而KeySta[i][j]又把自己的值赋给了 backup[i][j],所以backup[i][j]的值又回到了初始化时的1)Over^-^
-
- }
- }
- }
- }
- }
- void InterruptTimer0() interrupt 1
- {
- unsigned char Num1;
- static unsigned char Keys=0;
- TH0 = 0xFC;
- TL0 = 0x67;
- Key_Buff[Keys][0]=(Key_Buff[Keys][0]<<1)|KEY_IN1;
- Key_Buff[Keys][1]=(Key_Buff[Keys][1]<<1)|KEY_IN2;
- Key_Buff[Keys][2]=(Key_Buff[Keys][2]<<1)|KEY_IN3;
- Key_Buff[Keys][3]=(Key_Buff[Keys][3]<<1)|KEY_IN4;
- for(Num1=0;Num1<4;Num1++)
- {
- if((Key_Buff[Keys][Num1]&0x0f)==0x00)
- {
- Key_Buff[Keys][Num1]=0;
- }
- }
- Keys++;
- Keys=Keys&0x03;
- switch(Keys)
- {
- case 0:KEY_OUT4=1;KEY_OUT1=0;break;
- case 1:KEY_OUT1=1;KEY_OUT2=0;break;
- case 2:KEY_OUT2=1;KEY_OUT3=0;break;
- case 3:KEY_OUT3=1;KEY_OUT4=0;break;
- }
- }
- //注意数组也会重新初始化!
- 设计者:薛羽豪
复制代码
|
|