附上源程序
- #include "reg52.h"
- #define KEY P3
- #define key_state_0 0
- #define key_state_1 1
- #define key_state_2 2
- char read_KBD(void)
- {
- static char key_state=0;
- unsigned char key_press,key_return=0;
- unsigned char key1,key2;
- KEY=0xf0;
- key1=KEY&0xf0;
- KEY=0x0f;
- key2=KEY&0x0f;
- key_press=key1|key2;
-
- switch(key_state)
- {
- case key_state_0:
- if(key_press!=0xff) key_state=key_state_1;
- break;
-
- case key_state_1:
- if(key_press!=0xff)
- {
- if(key_press==0x7e) key_return = 7; //S7
- if(key_press==0x7d) key_return = 6; //S6
- if(key_press==0xde) key_return = 15; //S15
- if(key_press==0xdd) key_return = 14; //S14
- }
- else
- key_state=key_state_0;
- break;
-
- case key_state_2:
- if(key_press==0xff) key_state=key_state_0;
- break;
- }
- return key_return;
- }
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- #define FOSC 18432000L
- #define T1MS (65536-FOSC/12/1000) //1ms timer calculation method in 12T mode
- sbit TEST_LED = P1^0; //work LED, flash once per second
- WORD count; //1000 times counter
- WORD key_count;
- unsigned char code T_display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- unsigned char key_val;
- unsigned char key_table[2];
- void tm0_isr() interrupt 1 using 1
- {
- static char i;
- TL0 = T1MS; //reload timer0 low byte
- TH0 = T1MS >> 8; //reload timer0 high byte
- if (key_count-- == 0)
- {
- key_count = 10; //10ms
- key_val=read_KBD();
- if(key_val!=0)
- {
- key_table[0] = key_val/10; //ʮλ
- key_table[1] = key_val%10; //¸öλ
- }
- }
- if (count-- == 0) //1ms * 1000 -> 1s
- {
- count = 1 //1ms
- P2=0xe0;P0=~T_display[key_table[i]];P2=0x00;
- P2=0xc0;P0=T_COM[i];P2=0x00;
- i++;
- if(i==2) i=0;
- }
- }
- void main()
- {
- TMOD = 0x01; //set timer0 as mode1 (16-bit)
- TL0 = T1MS; //initial timer0 low byte
- TH0 = T1MS >> 8; //initial timer0 high byte
- TR0 = 1; //timer0 start running
- ET0 = 1; //enable timer0 interrupt
- EA = 1; //open global interrupt switch
- count = 0; //initial counter
- while (1); //loop
- }
复制代码
求大佬解答一下,就是找不到哪里出错了
|