📄 key_uart.lst
字号:
C51 COMPILER V7.06 KEY_UART 12/12/2007 16:26:50 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE KEY_UART
OBJECT MODULE PLACED IN Key_Uart.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE Key_Uart.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2
3 sbit SEGLOCK = P1^3;
4 sbit POSITLOCK = P1^2;
5
6 code unsigned char LedCode[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86
-,0x8e};
7 code unsigned char PositCode[] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
8 code unsigned char ASCII[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
9
10 unsigned char Rch,Tch;
11 unsigned char Rcounter,Tcounter;
12 unsigned char DisBuf[8];
13
14 void SegLock (void)
15 {
16 1 SEGLOCK = 1;
17 1 SEGLOCK = 0;
18 1 }
19
20 void PositLock (void)
21 {
22 1 POSITLOCK = 1;
23 1 POSITLOCK = 0;
24 1 }
25
26 void Delay (unsigned int Dat)
27 {
28 1 unsigned int i;
29 1 for (i=0;i<Dat;i++);
30 1 }
31
32 void Display (void)
33 {
34 1 unsigned char i;
35 1 for (i=0;i<8;i++)
36 1 {
37 2 P0 = LedCode[DisBuf[i]];
38 2 SegLock();
39 2 P0 = PositCode[i];
40 2 PositLock();
41 2 Delay(10);
42 2 P0 = 0x00;
43 2 PositLock();
44 2 }
45 1 }
46
47 void DisPrint (void)
48 {
49 1 DisBuf[0] = Tch >> 4;
50 1 DisBuf[1] = Tch & 0x0f;
51 1 DisBuf[2] = Tcounter / 10;
52 1 DisBuf[3] = Tcounter % 10;
53 1 DisBuf[4] = Rch >> 4;
54 1 DisBuf[5] = Rch & 0x0f;
C51 COMPILER V7.06 KEY_UART 12/12/2007 16:26:50 PAGE 2
55 1 DisBuf[6] = Rcounter / 10;
56 1 DisBuf[7] = Rcounter % 10;
57 1 }
58
59 unsigned char Kbhit (void)
60 {
61 1 P2 = 0xf0;
62 1 if ( P2==0xf0 ) return (0);
63 1 else return (1);
64 1 }
65
66 unsigned char GetKeyCode ( void )
67 {
68 1 unsigned char keycode; //定义一个键值变量用于判断键值
69 1 P2 = 0x0f;
70 1 keycode = P2;
71 1 P2 = 0xf0;
72 1 keycode |= P2; //将组合以后的键值存储
73 1 switch ( keycode )
74 1 {
75 2 case 0xee: return ( 15 ); break;
76 2 case 0xde: return ( 0 ); break;
77 2 case 0xbe: return ( 14 ); break;
78 2 case 0x7e: return ( 13 ); break;
79 2 case 0xed: return ( 7 ); break;
80 2 case 0xdd: return ( 8 ); break;
81 2 case 0xbd: return ( 9 ); break;
82 2 case 0x7d: return ( 12 ); break;
83 2 case 0xeb: return ( 4 ); break;
84 2 case 0xdb: return ( 5 ); break;
85 2 case 0xbb: return ( 6 ); break;
86 2 case 0x7b: return ( 11 ); break;
87 2 case 0xe7: return ( 1 ); break;
88 2 case 0xd7: return ( 2 ); break;
89 2 case 0xb7: return ( 3 ); break;
90 2 case 0x77: return ( 10 ); break;
91 2 }
92 1 }
93
94 void main (void)
95 {
96 1 SCON = 0x50;
97 1 TMOD = ( TMOD&0x0F ) | 0x20;
98 1 TH1 = -11059200/12/32/9600;
99 1 TL1 = TH1;
100 1 TR1 = 1;
101 1 ES = 1;
102 1 EA = 1;
103 1 while (1)
104 1 {
105 2 DisPrint();
106 2 Display();
107 2 if ( Kbhit() )
108 2 {
109 3 SBUF = ASCII[GetKeyCode()];
110 3 TI = 0;
111 3 while ( TI==0 );
112 3 TI = 0;
113 3 if(++Tcounter >= 100)
114 3 Tcounter = 0;
115 3 Tch = ASCII[GetKeyCode()];
116 3 while ( Kbhit() )
C51 COMPILER V7.06 KEY_UART 12/12/2007 16:26:50 PAGE 3
117 3 {
118 4 DisPrint();
119 4 Display();
120 4 }
121 3 }
122 2 }
123 1 }
124
125 void Uart_int (void) interrupt 4
126 {
127 1 if (RI)
128 1 {
129 2 Rch = SBUF;
130 2 RI = 0;
131 2 if (++Rcounter >= 100)
132 2 Rcounter = 0;
133 2 }
134 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 380 ----
CONSTANT SIZE = 40 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -