📄 key_lcd.lst
字号:
C51 COMPILER V8.02 KEY_LCD 12/31/2008 16:15:53 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE KEY_LCD
OBJECT MODULE PLACED IN key_lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key_lcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<AT89X51.h>
2 #include <stdio.h>
3 #include <math.h>
4 #define unchar unsigned char
5 #define unint unsigned int
6 sbit e=P2^0;
7 sbit rw=P2^1;
8 sbit rs=P2^2;
9 bit flag=0;
10 unint count=0;
11 unchar code table[]={0x30,0x31,0x32,0x33,
12 0x34,0x35,0x36,0x37,
13 0x38,0x39,0x2b,0x2d,
14 0x2a,0x25,0x3d,0x30};//+-*/= on分别为2b,2d,2a,25,3d,0x71(F的代码)
15 unchar key,temp;
16
17 void delay(void);//LCD延时
18 void delay10ms(unsigned char time); //键盘延时
19 void write_c(unchar command);//写命令到LCD
20 void write_d(unchar dat);//写数据到LCD
21 //void disply();//显示程序
22
23
24
25 void delay10ms(unsigned char time) //键盘延时程序
26 {
27 1 unsigned char a,b,c;
28 1 for(a=0;a<time;a++)
29 1 for(b=0;b<10;b++)
30 1 for(c=0;c<120;c++)
31 1 ;
32 1 }
33
34 void write_c(unchar command)//写命令到LCD
35 {
36 1 e=1;
37 1 rw=0;
38 1 rs=0;
39 1 P0=command;
40 1 e=0;
41 1 delay();
42 1 }
43
44 void write_d(unchar dat) //写数据到LCD
45 {
46 1 e=1;
47 1 rw=0;
48 1 rs=1;
49 1 P0=dat;
50 1 e=0;
51 1 delay();
52 1 }
53
54
55 void delay(void) //LCD延时
C51 COMPILER V8.02 KEY_LCD 12/31/2008 16:15:53 PAGE 2
56 {
57 1 int i;
58 1 for(i=0;i<1000;i++);
59 1 }
60
61
62 void keyscan(void) interrupt 1 //按键扫描子程序
63 {
64 1 P3=0xFF;
65 1 P3_3=0; //第a行为0
66 1 temp=P3;
67 1 temp&=0xF0;
68 1 if(temp!=0xF0)
69 1 {
70 2 delay10ms(10); //等待键盘释放
71 2 temp=P3;
72 2 temp&=0xF0;
73 2 if(temp !=0xF0)
74 2 { count++;
75 3 temp=P3;
76 3 temp&=0xF0;
77 3
78 3 switch(temp)
79 3 {
80 4 case 0xe0:
81 4 key=10;flag=1;break;
82 4 case 0xd0:
83 4 key=14;flag=1;break;
84 4 case 0xb0:
85 4 key=0;flag=1;break;
86 4 case 0x70:
87 4 key=15;flag=1;break;
88 4 }
89 3 }
90 2 }
91 1
92 1 P3=0xFF;
93 1 P3_2=0; //第b行为0
94 1 temp=P3;
95 1 temp&=0xF0;
96 1 if(temp !=0xF0)
97 1 {
98 2 delay10ms(10); //等待键盘释放
99 2 temp=P3;
100 2 temp&=0xF0;
101 2 if(temp !=0xF0)
102 2 { count++;
103 3 temp=P3;
104 3 temp&=0xF0;
105 3
106 3 switch(temp)
107 3 {
108 4 case 0xe0:
109 4 key=11;flag=1;break;
110 4 case 0xd0:
111 4 key=3;flag=1;break;
112 4 case 0xb0:
113 4 key=2;flag=1;break;
114 4 case 0x70:
115 4 key=1;flag=1;break;
116 4 }
117 3 }
C51 COMPILER V8.02 KEY_LCD 12/31/2008 16:15:53 PAGE 3
118 2 }
119 1
120 1 P3=0xFF;
121 1 P3_1=0; //第c行为0
122 1 temp=P3;
123 1 temp&=0xF0;
124 1 if(temp !=0xF0)
125 1 {
126 2 delay10ms(10); //等待键盘释放
127 2 temp=P3;
128 2 temp&=0xF0;
129 2 if(temp !=0xF0)
130 2 { count++;
131 3 temp=P3;
132 3 temp&=0xF0;
133 3
134 3 switch(temp)
135 3 {
136 4 case 0xe0:
137 4 key=12;flag=1;break;
138 4 case 0xd0:
139 4 key=6;flag=1;break;
140 4 case 0xb0:
141 4 key=5;flag=1;break;
142 4 case 0x70:
143 4 key=4;flag=1;break;
144 4 }
145 3 }
146 2 }
147 1
148 1 P3=0xFF;
149 1 P3_0=0; //第d行为0
150 1 temp=P3;
151 1 temp&=0xF0;
152 1 if(temp !=0xF0)
153 1 {
154 2 delay10ms(10); //等待键盘释放
155 2 temp=P3;
156 2 temp&=0xF0;
157 2 if(temp !=0xF0)
158 2 { count++;
159 3 temp=P3;
160 3 temp&=0xF0;
161 3
162 3 switch(temp)
163 3 {
164 4 case 0xe0:
165 4 key=13;flag=1;break;
166 4 case 0xd0:
167 4 key=9;flag=1;break;
168 4 case 0xb0:
169 4 key=8;flag=1;break;
170 4 case 0x70:
171 4 key=7;flag=1;break;
172 4 }
173 3 }
174 2 }
175 1
176 1 TH0=0x0b;//重赋初值
177 1 TL0=0xcf;//20ms
178 1 TR0=1;
179 1 }
C51 COMPILER V8.02 KEY_LCD 12/31/2008 16:15:53 PAGE 4
180
181 void disply(void) //这个函数没用到,但是一个好的显示函数
182 {
183 1 if(count<=8) //如果第一行写满则换到第二行
184 1 {write_c(0x80);
185 2 write_d(table[key]);
186 2 }
187 1 else
188 1 {
189 2 write_c(0xc0);
190 2 write_d(table[key]);
191 2 }
192 1 flag=0;
193 1 }
194
195 main()
196 {
197 1 EA=1; //定时器T0
198 1 ET0=1;
199 1 TH0=0x0b;
200 1 TL0=0xcf;//20ms
201 1 TR0=1;
202 1 write_c(0x38);//设置为8总线16*2 5*7点阵
203 1 write_c(0x0c);//开显示,光标闪烁
204 1 write_c(0x01);//清屏幕
205 1 write_c(0x80);
206 1 while(1)
207 1 {
208 2 if(flag)
209 2 {if(count<=32) //如果第一行写满则换到第二行
210 3 write_d(table[key]);
211 3 else
212 3 {
213 4 write_c(0xc0+(count-34)); //转到第二行显示
214 4 write_d(table[key]);
215 4 }
216 3 flag=0;//标志清零
217 3 }
218 2 }
219 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 564 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -