📄 4×4-key.lst
字号:
153 /* */
154 /*******************************************************************/
155 void lcd_init()
156 {
157 1 LCD_RST = 0; //液晶复位
158 1 delay(30);
159 1 LCD_RST = 1;
160 1 delay(5);
161 1 LCD_PSB = 1; //并口方式
162 1
163 1 lcd_wcmd(0x34); //扩充指令操作
164 1 delay(5);
165 1 lcd_wcmd(0x30); //基本指令操作
166 1 delay(5);
167 1 lcd_wcmd(0x0C); //显示开,关光标
168 1 delay(5);
169 1 lcd_wcmd(0x01); //清除LCD的显示内容
170 1 delay(5);
171 1 }
172
173 /*********************************************************/
174 /* */
175 /* 设定显示位置 */
176 /* */
177 /*********************************************************/
178 void lcd_pos(uchar X,uchar Y)
C51 COMPILER V8.05a 4×4_KEY 11/23/2006 15:04:53 PAGE 4
179 {
180 1 uchar pos;
181 1 if (X==0)
182 1 {X=0x80;}
183 1 else if (X==1)
184 1 {X=0x90;}
185 1 else if (X==2)
186 1 {X=0x88;}
187 1 else if (X==3)
188 1 {X=0x98;}
189 1 pos = X+Y ;
190 1 lcd_wcmd(pos); //显示地址
191 1 }
192
193 /*************************************************************/
194 /* */
195 /* 键扫描子程序 */
196 /* */
197 /*************************************************************/
198 void keyscan(void)
199 {
200 1 P1=0x0F; //低四位输入
201 1 delay(1);
202 1 temp=P1; //读P1口
203 1 temp=temp&0x0F;
204 1 temp=~(temp|0xF0);
205 1 if(temp==1)
206 1 key=0;
207 1 else if(temp==2)
208 1 key=1;
209 1 else if(temp==4)
210 1 key=2;
211 1 else if(temp==8)
212 1 key=3;
213 1 else
214 1 key=16;
215 1
216 1 P1=0xF0; //高四位输入
217 1 delay(1);
218 1 temp=P1; //读P1口
219 1 temp=temp&0xF0;
220 1 temp=~((temp>>4)|0xF0);
221 1 if(temp==1)
222 1 key=key+0;
223 1 else if(temp==2)
224 1 key=key+4;
225 1 else if(temp==4)
226 1 key=key+8;
227 1 else if(temp==8)
228 1 key=key+12;
229 1 else
230 1 key=16;
231 1
232 1 dis_buf = key; //键值入显示缓存
233 1 dis_buf = dis_buf & 0x0f;
234 1
235 1 if(dis_buf>9) //转换为ASCII码
236 1 dis_buf = dis_buf+0x37;
237 1 else
238 1 dis_buf = dis_buf+0x30;
239 1
240 1 lcd_pos(2,5);
C51 COMPILER V8.05a 4×4_KEY 11/23/2006 15:04:53 PAGE 5
241 1 lcd_wdat(dis_buf); //显示键值
242 1 }
243
244 /*************************************************************/
245 /* */
246 /*判断键是否按下 */
247 /* */
248 /*************************************************************/
249 void keydown(void)
250 {
251 1 P1=0xF0;
252 1 if(P1!=0xF0)
253 1 {
254 2 keyscan();
255 2 beep();
256 2 delay(60);
257 2 }
258 1 }
259
260 /*********************************************************/
261 /* */
262 /* 主程序 */
263 /* */
264 /*********************************************************/
265 void main()
266 {
267 1 uchar i;
268 1
269 1 BEEP=1;
270 1
271 1 delay(10); //延时
272 1 lcd_init(); //初始化LCD
273 1
274 1 lcd_pos(0,0); //设置显示位置为第一行的第1个字符
275 1 for(i=0;i<16;i++)
276 1 lcd_wdat(dis1[i]); //显示字符
277 1
278 1 lcd_pos(1,0); //设置显示位置为第二行的第1个字符
279 1 for(i=0;i<16;i++)
280 1 lcd_wdat(dis2[i]); //显示字符
281 1
282 1 lcd_pos(2,0); //设置显示位置为第三行的第1个字符
283 1 for(i=0;i<16;i++)
284 1 lcd_wdat(dis3[i]); //显示字符
285 1
286 1 lcd_pos(3,0); //设置显示位置为第四行的第1个字符
287 1 for(i=0;i<16;i++)
288 1 lcd_wdat(dis4[i]); //显示字符
289 1
290 1 while(1)
291 1 {
292 2 keydown();
293 2 }
294 1 }
295
296 /*********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 516 ----
CONSTANT SIZE = 68 ----
XDATA SIZE = ---- ----
C51 COMPILER V8.05a 4×4_KEY 11/23/2006 15:04:53 PAGE 6
PDATA SIZE = ---- ----
DATA SIZE = 3 1
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 + -