📄 4×4-key.lst
字号:
C51 COMPILER V8.05a 4×4_KEY 11/23/2006 15:04:53 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 4×4_KEY
OBJECT MODULE PLACED IN 4×4-KEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 4×4-KEY.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME500单片机开发系统演示程序 - 矩阵键盘键值读取器 */
4 /* */
5 /* TS12864A-3(带汉字库)显示 */
6 /* MCU:AT89S52 ,晶体频率:11.0592MHz */
7 /* */
8 /* 版本: V1.0 (2006/11/20) */
9 /* 作者: gguoqing (Email: gguoqing@willar.com) */
10 /* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) */
11 /* 时间: 2006/11/22 */
12 /* */
-
13 /*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
14 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
15 /* */
16 /*******************************************************************/
17
18 #include <reg51.h>
19 #include <intrins.h>
20
21 #define uchar unsigned char
22 #define uint unsigned int
23 /*TS12864A-3 端口定义*/
24 #define LCD_data P0 //数据口
25
26 sbit LCD_RS = P2^0; //寄存器选择输入
27 sbit LCD_RW = P2^1; //液晶读/写控制
28 sbit LCD_EN = P2^2; //液晶使能控制
29 sbit LCD_PSB = P2^3; //串/并方式控制
30 sbit LCD_RST = P2^5; //液晶复位端口
31
32 sbit BEEP = P3^7; //蜂鸣器
33
34 uchar code dis1[] = {"-----ME500------"};
35 uchar code dis2[] = {"矩阵键盘值读取器"};
36 uchar code dis3[] = {"键值编码:- H "};
37 uchar code dis4[] = {" www.willar.com "};
38
39 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
40
41 uchar dis_buf; //显示缓存
42 uchar temp;
43 uchar key; //键顺序吗
44
45 /*********************************************************/
46 /* */
47 /* 延时x*0.14ms子程序 */
48 /* */
49 /*********************************************************/
50
51 void delay0(uchar x) //x*0.14MS
52 {
53 1 uchar i;
54 1 while(x--)
C51 COMPILER V8.05a 4×4_KEY 11/23/2006 15:04:53 PAGE 2
55 1 {
56 2 for (i = 0; i<13; i++) {}
57 2 }
58 1 }
59
60 /*********************************************************/
61 /* */
62 /* 蜂鸣器响一声子程序 */
63 /* */
64 /*********************************************************/
65 void beep()
66 {
67 1 uchar i;
68 1 for (i=0;i<180;i++)
69 1 {
70 2 delay0(5);
71 2 BEEP=!BEEP; //BEEP取反
72 2 }
73 1 BEEP=1; //关闭蜂鸣器
74 1 }
75
76 /*******************************************************************/
77 /* */
78 /* 延时函数 */
79 /* */
80 /*******************************************************************/
81 void delay(int ms)
82 {
83 1 while(ms--)
84 1 {
85 2 uchar i;
86 2 for(i=0;i<250;i++)
87 2 {
88 3 _nop_();
89 3 _nop_();
90 3 _nop_();
91 3 _nop_();
92 3 }
93 2 }
94 1 }
95 /*******************************************************************/
96 /* */
97 /*检查LCD忙状态 */
98 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
99 /* */
100 /*******************************************************************/
101 bit lcd_busy()
102 {
103 1 bit result;
104 1 LCD_RS = 0;
105 1 LCD_RW = 1;
106 1 LCD_EN = 1;
107 1 delayNOP();
108 1 result = (bit)(P0&0x80);
109 1 LCD_EN = 0;
110 1 return(result);
111 1 }
112 /*******************************************************************/
113 /* */
114 /*写指令数据到LCD */
115 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
116 /* */
C51 COMPILER V8.05a 4×4_KEY 11/23/2006 15:04:53 PAGE 3
117 /*******************************************************************/
118 void lcd_wcmd(uchar cmd)
119 {
120 1 while(lcd_busy());
121 1 LCD_RS = 0;
122 1 LCD_RW = 0;
123 1 LCD_EN = 0;
124 1 _nop_();
125 1 _nop_();
126 1 P0 = cmd;
127 1 delayNOP();
128 1 LCD_EN = 1;
129 1 delayNOP();
130 1 LCD_EN = 0;
131 1 }
132 /*******************************************************************/
133 /* */
134 /*写显示数据到LCD */
135 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
136 /* */
137 /*******************************************************************/
138 void lcd_wdat(uchar dat)
139 {
140 1 while(lcd_busy());
141 1 LCD_RS = 1;
142 1 LCD_RW = 0;
143 1 LCD_EN = 0;
144 1 P0 = dat;
145 1 delayNOP();
146 1 LCD_EN = 1;
147 1 delayNOP();
148 1 LCD_EN = 0;
149 1 }
150 /*******************************************************************/
151 /* */
152 /* LCD初始化设定 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -