📄 hanglishikeybanchen02.lst
字号:
C51 COMPILER V6.23a HANGLISHIKEYBANCHEN02 03/17/2006 09:28:21 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE HANGLISHIKEYBANCHEN02
OBJECT MODULE PLACED IN .\HangliShiKeyBanChen02.obj
COMPILER INVOKED BY: e:\system\Keil\C51\BIN\C51.EXE ..\SCR\HangliShiKeyBanChen02.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Han
-gliShiKeyBanChen02.lst) OBJECT(.\HangliShiKeyBanChen02.obj)
stmt level source
1 #include <at89x52.h>
2 #define KeyBufSize 12
3 sbit LampFull=P3^7;//红色
4 sbit LampEempty=P3^6; //绿色
5 unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f ,0x77 ,0x7c};
6 unsigned char OverFlag;
7 unsigned char KeyBuf[KeyBufSize],JianZi,PointW,PointR; //全局变量 按键队列
8 unsigned char DispBuf[2];//全局变量 显示缓存 只有两个七段LED 所以只定义了两个单元的数组
9 void delay(unsigned char j);
10 unsigned char GetKey();
11 void LcdDriver();
12 unsigned char PutKey();
13 unsigned char KeyDriver();
14 void Key();
15 void display(void);
16 void delay(unsigned char j)
17 {
18 1 unsigned char m,k;
19 1 for(m=0;m<j;m++)
20 1 for(k=0;k<5;k++);
21 1 }
22 void LcdDriver()
23 { static unsigned char i,j;
24 1 j=i;
25 1 i=GetKey();
26 1 if(i==255) { DispBuf[0]=j; i=j;}
27 1 else DispBuf[0]=i;
28 1 DispBuf[1]=DispBuf[0];
29 1 }
30 unsigned char GetKey()
31 { unsigned char x;
32 1 if((PointW==PointR)&(OverFlag==0)) {LampEempty=1;LampFull=0;return 255;}
33 1 if(PointR>=KeyBufSize) PointR=0;
34 1 x=KeyBuf[PointR];
35 1 PointR++;
36 1 return x;
37 1 }
38
39 unsigned char PutKey()
40 {
41 1 if((PointW-PointR)==KeyBufSize-1) {LampEempty=0;LampFull=1;return 255;}
42 1 if(PointW>=KeyBufSize) { PointW=0; OverFlag=1;}
43 1 if((PointW==PointR)&(OverFlag==1)){LampEempty=0;LampFull=1;OverFlag=0;return 255;}
44 1 KeyBuf[PointW]=JianZi;
45 1 PointW++;
46 1 }
47 unsigned char KeyDriver()
48 {unsigned char x,y,key;
49 1 P2=0x0f; //低四位输入1,高四位输出0
50 1 x=P2;
51 1 x=x&0x0f; //P2输入后,清高四位,作为X值
52 1 P2=0xf0; //高四位输入1,低四位输出0
53 1 y=P2;
54 1 y=y&0xf0; //P2输入后移位到低四位,并清高四位,作为Y值
C51 COMPILER V6.23a HANGLISHIKEYBANCHEN02 03/17/2006 09:28:21 PAGE 2
55 1 key=x|y;
56 1 key=key&0xfe;
57 1 return key;
58 1 }
59 void Key()
60 {
61 1 unsigned char Keyok;
62 1 Keyok=KeyDriver();
63 1 if(Keyok==254){return;}
64 1 else
65 1 {
66 2 switch(Keyok)
67 2 {
68 3 case 236: JianZi=3; break;
69 3 case 234: JianZi=2; break;
70 3 case 230: JianZi=1; break;
71 3
72 3 case 220: JianZi=6; break;
73 3 case 218: JianZi=5; break;
74 3 case 214: JianZi=4; break;
75 3
76 3 case 188: JianZi=9; break;
77 3 case 186: JianZi=8; break;
78 3 case 182: JianZi=7; break;
79 3
80 3 case 124: JianZi=0; break;
81 3 case 122: JianZi=11; break;
82 3 case 118: JianZi=10; break;
83 3 }
84 2 PutKey();
85 2 LcdDriver();
86 2 }
87 1 }
88
89
90 void display(void) //显示函数
91 {
92 1 static unsigned char sys;
93 1 switch(sys)
94 1 { case 0:P3_5=1;
95 2 P2_0=0;
96 2 P0=a[DispBuf[0]];
97 2 sys=1;
98 2 break;
99 2 case 1:P3_5=0;
100 2 P2_0=1;
101 2 P0=a[DispBuf[1]];
102 2 sys=0;
103 2 break;
104 2 }
105 1 }
106 main()
107 {
108 1 LampFull=0;
109 1 LampEempty=0;
110 1 while(1)
111 1 {
112 2 Key();
113 2 display();
114 2 delay(25);
115 2 LampFull=0;
116 2 LampEempty=0;
C51 COMPILER V6.23a HANGLISHIKEYBANCHEN02 03/17/2006 09:28:21 PAGE 3
117 2 }
118 1 }
119
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 373 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 ----
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 + -