📄 1602_display.lst
字号:
C51 COMPILER V8.02 1602_DISPLAY 01/20/2009 21:12:52 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 1602_DISPLAY
OBJECT MODULE PLACED IN 1602_display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602_display.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 sbit LCDRS = P3^3;
7 sbit LCDRW = P3^4;
8 sbit LCDEN = P3^5;
9
10 uchar code NumTable[]="0123456789";
11
12 /*
13 void snop()
14 {
15 ;;
16 }
17 */
18 void delay(uint time)
19 {
20 1 uchar i,j;
21 1 for(i=time;i>0;i--)
22 1 for(j=110;j>0;j--);
23 1 }
24
25 void write_com(uchar com) //写命令
26 {
27 1 LCDRS = 0;
28 1 LCDRW = 0;
29 1 LCDEN = 0;
30 1 P1 = com;
31 1 LCDEN = 1;
32 1 delay(5);
33 1 LCDEN = 0;
34 1 }
35
36 void write_data(uchar dat) //写数据
37 {
38 1 LCDRS = 1;
39 1 LCDRW = 0;
40 1 LCDEN = 0;
41 1 P1 = dat;
42 1 LCDEN = 1;
43 1 delay(5);
44 1 LCDEN = 0;
45 1 }
46
47 //以下内容未用,进行屏蔽
48 /*
49 void read_com() //读状态
50 {
51 LCDRS = 0;
52 LCDRW = 1;
53 LCDEN = 1;
54 snop();
55 LCDEN = 0;
C51 COMPILER V8.02 1602_DISPLAY 01/20/2009 21:12:52 PAGE 2
56 }
57
58 void read_data() //读数据
59 {
60 LCDRS = 1;
61 LCDRW = 1;
62 LCDEN = 1;
63 snop();
64 LCDEN = 0;
65 }
66 */
67
68 //以下对读写函数进行测试
69
70 void init()
71 {
72 1 //初始化P2口,准备接收矩阵键盘输入
73 1 P2 = 0xff;
74 1
75 1 //初始化LCD
76 1 /*
77 1 delay(15); //延时15毫秒
78 1 write_com(0x38);//初始化:设置16X2显示,5X7点阵,8位数据接口
79 1 delay(5); //延时5毫秒
80 1 write_com(0x38);//初始化:设置16X2显示,5X7点阵,8位数据接口
81 1 delay(5); //延时5毫秒
82 1 write_com(0x38);//初始化:设置16X2显示,5X7点阵,8位数据接口
83 1 delay(5); //延时5毫秒
84 1 write_com(0x0f);//开显示,开光标,光标闪烁
85 1 delay(5);
86 1 write_com(0x07);//读写后地址指针和光标均加一,整屏显示左移
87 1 delay(5);
88 1 write_com(0x80);//数据指针初始化
89 1 */
90 1
91 1 write_com(0x38);
92 1 write_com(0x0f);
93 1 write_com(0x06);
94 1 write_com(0x01);
95 1 write_com(0x80);
96 1 }
97
98 uchar key_scan()
99 {
100 1 uchar temp,hor,row;
101 1
102 1 P2 = 0xf0;
103 1 temp = P2;
104 1 temp &= 0xf0;
105 1 if(temp != 0xf0)//扫描到按键动作
106 1 {
107 2 delay(5);
108 2
109 2 //开始进行列检查
110 2 P2 = 0xf0;
111 2 temp = P2;
112 2 temp &= 0xf0;
113 2 if(temp != 0xf0)//确认有按键动作
114 2 {
115 3 temp = ~temp;
116 3 temp >>= 4; //列值在temp的低四位
117 3 switch(temp)//列值转换,并保存在row中
C51 COMPILER V8.02 1602_DISPLAY 01/20/2009 21:12:52 PAGE 3
118 3 {
119 4 case 1 : row = 1; break;
120 4 case 2 : row = 2; break;
121 4 case 4 : row = 3; break;
122 4 case 8 : row = 4; break;
123 4 default: break;
124 4 }
125 3 //列检查结束
126 3
127 3 //开始进行行检查
128 3 P2 = 0x0f;
129 3 temp = P2;
130 3 temp = ~temp;
131 3 temp &= 0x0f;//行值在temp的低四位
132 3 switch(temp)//行值转换,并保存在hor中
133 3 {
134 4 case 1 : hor = 1; break;
135 4 case 2 : hor = 2; break;
136 4 case 4 : hor = 3; break;
137 4 case 8 : hor = 4; break;
138 4 default: break;
139 4 }
140 3 //行检查结束
141 3
142 3 //检查按键动作是否结束,否则程序在此等待
143 3 P2 = 0xf0;
144 3 temp = P2;
145 3 temp &= 0xf0;
146 3 while(temp != 0xf0)
147 3 {
148 4 P2 = 0xf0;
149 4 temp = P2;
150 4 temp &= 0xf0;
151 4 }
152 3 //按键动作结束,程序往下进行
153 3
154 3 //计算键值并返回
155 3 return ((hor-1)*4 + row);
156 3
157 3 }
158 2 }
159 1 //没有按键动作,返回0;
160 1 return 0;
161 1 }
162
163 void main()
164 {
165 1 uchar key,char_seat,shi,ge;
166 1 init();
167 1 while(1)
168 1 {
169 2 key = key_scan();
170 2 if(key != 0)
171 2 {
172 3 shi = key/10;
173 3 ge = key%10;
174 3 if(char_seat==16) //第一行显示满格,进入第二行显示
175 3 {
176 4 write_com(0x80+0x40);
177 4 }
178 3 if(char_seat==32) //第二行显示满格,进行清屏,从第一行开始显示
179 3 {
C51 COMPILER V8.02 1602_DISPLAY 01/20/2009 21:12:52 PAGE 4
180 4 char_seat=0;
181 4 write_com(0x01);
182 4 write_com(0x80);
183 4 }
184 3 if(shi!=0)
185 3 {
186 4 write_data(NumTable[shi]);
187 4 char_seat++;
188 4 }
189 3 write_data(NumTable[ge]);
190 3 char_seat++;
191 3
192 3
193 3
194 3 }
195 2 }
196 1 }
197 //测试结束
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 275 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -