📄 text1.lst
字号:
C51 COMPILER V7.20 TEXT1 07/16/2007 22:00:06 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 //数据口定义
6 #define lcd1602_bus P3
7
8 //引脚定义
9 sbit rs_1602=P2^5;
10 sbit rw_1602=P2^6;
11 sbit e_1602=P2^7;
12
13 //ASCII码表
14 /**********0---9**************/
15 unsigned int code table[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
16 /**********a---z**************/
17 unsigned int code table1[26]={0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
18 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a};
19 /***********A---Z*************/
20 unsigned int code table2[26]={0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,
21 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a};
22
23 //基本变量定义
24 //uchar cnt;
25 // unsigned int d[3];
26 /*
27 hexstoascii2(unsigned int hex)
28 {
29 d[0]=table[hex/10];
30 hex=hex%10;
31 d[1]=table[hex];
32 }
33
34 hexstoascii3(unsigned int hex)
35 {
36 d[0]=table[hex/100];
37 hex=hex%100;
38 d[1]=table[hex/10];
39 hex=hex%10;
40 d[2]=table[hex];
41 }
42 */
43 /**********************************lcd1602******************************************/
44
45 /*********延时子程序**********/
46 void delay(uchar dy)
47 {
48 1 while(--dy);
49 1 }
50
51 /***********忙判断标志,返回一个位BF********************/
52 bit lcd1602_busy(void)
53 {
54 1 uchar busy_flag;
55 1 rs_1602=0;
C51 COMPILER V7.20 TEXT1 07/16/2007 22:00:06 PAGE 2
56 1 rw_1602=1;
57 1 _nop_();
58 1 e_1602=1;
59 1 _nop_();
60 1 lcd1602_bus=0xff;
61 1 busy_flag=lcd1602_bus; //e在高电平时读
62 1 e_1602=0;
63 1 return (bit)(busy_flag&0x80); //BF=1; BUSY 返回一个位
64 1 }
65
66
67 /********写命令,有两个参数,一个是要写的命令控制字,
68 第二个是用来控制是否进行忙标志的判断。
69 busyflag=1;
70 判断: 为0
71 ***************/
72 void lcd1602_wrcmd(unsigned char lcdcmd)
73 {
74 1 while(lcd1602_busy()); //等待空闲
75 1 lcd1602_bus=lcdcmd;
76 1 rs_1602=0;
77 1 rw_1602=0;
78 1 _nop_();
79 1 e_1602=1;
80 1 _nop_();
81 1 _nop_();
82 1 e_1602=0; //产生一个下沿
83 1 }
84
85
86
87 /***************向液晶写数据******************/
88 void lcd1602_wrdata(uchar lcddata)
89 {
90 1 while(lcd1602_busy()); //等待空闲
91 1 lcd1602_bus=lcddata; //在下沿的时候写数据
92 1 rs_1602=1;
93 1 rw_1602=0;
94 1 _nop_();
95 1 e_1602=1;
96 1 _nop_();
97 1 _nop_();
98 1 e_1602=0;
99 1 //lcd_bus=0xff;
100 1 }
101
102
103 /************液晶的清屏************/
104 void lcd1602_clear(void)
105 {
106 1 lcd1602_wrcmd(0x01); //液晶清屏控制字 并延时>40us
107 1 delay(100);
108 1 }
109
110 /***********1602液晶的初始化***************/
111 void lcd1602_init(void)
112 {
113 1 lcd1602_wrcmd(0x38); //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
114 1 delay(100);
115 1 lcd1602_wrcmd(0x0f); //显示开关控制----显示开关开,光标开关关,闪烁开关关
116 1 delay(100);
117 1 lcd1602_wrcmd(0x06); //输入方式设置,AC自增1, S=0;
C51 COMPILER V7.20 TEXT1 07/16/2007 22:00:06 PAGE 3
118 1 delay(100);
119 1 lcd1602_wrcmd(0x01); //清屏
120 1 delay(100);
121 1 }
122
123
124 /**********4*4矩阵键盘****************/
125 /************
126 矩阵键盘
127 D---------P1.0
128 C---------P1.1
129 B---------P1.2
130 A---------P1.3
131 1---------P1.4
132 2---------P1.5
133 3---------P1.6
134 4---------P1.7
135 按键值的分布
136 D C B A
137 1〔15 14 13 12〕
138 2〔11 10 9 8〕
139 3〔 7 6 5 4〕
140 4〔 3 2 1 0〕
141 利用已有的那个按键程序
142 *************/
143
144 uchar getkey_ii()
145
146 {
147 1 unsigned char keycode=0xff,temp,i;
148 1 P1=0x0f;
149 1 temp=P1&0x0f;
150 1 if(temp!=0x0f) //判是否有键按下
151 1 {
152 2 // beep=0;
153 2 P1=0xef; //自第0行开始扫描输出,自列读入键值
154 2 for(i=0;i<4;i++)
155 2 {
156 3 temp=P1&0x0f;
157 3 if(temp==0x07) //判断第0列是否有键按下
158 3 {
159 4 keycode=i*4+0;
160 4 break;
161 4 }
162 3 else if(temp==0x0b)//判断第1列是否有键按下
163 3 {
164 4 keycode=i*4+1;
165 4 break;
166 4 }
167 3 else if(temp==0x0d)//判断第2列是否有键按下
168 3 {
169 4 keycode=i*4+2;
170 4 break;
171 4 }
172 3 else if(temp==0x0e)//判断第3列是否有键按下
173 3 {
174 4 keycode=i*4+3;
175 4 break;
176 4 }
177 3 P1=(P1<<1)|0x1;
178 3 }
179 2
C51 COMPILER V7.20 TEXT1 07/16/2007 22:00:06 PAGE 4
180 2 while((P1&0x0f)!=0x0f) //等待释放
181 2 {
182 3 P1=0x0f;
183 3 }
184 2 // beep=1;
185 2
186 2 }
187 1 return keycode;
188 1 }
189
190 /**********lcd1602 测试程序**********************/
191 //上电后lcd1602 显示
192 // "System of P.H.Y"
193 // " Welcome!"
194 //
195 //分别按矩阵最右下角的三个按键 分别出现下面几个显示界面:
196 // key=0 显示
197 // " 2005/7/28";
198 // " 20:27";
199 // key=1 显示
200 // "<>?+-*/()="
201 // "`-=\[]/.,;"
202 // key=2 显示
203 // "!@#$%^&*()_+|~"
204 // "!@#$%^&*()_+|~"
205
206 void xianshi(unsigned long a)
207 { unsigned long c,p=0;
208 1 if (a!=0)
209 1 { c=a/100000000;
210 2 if(c!=0)
211 2 {lcd1602_wrdata(c+0x30);
212 3 p=1;
213 3 }
214 2 delay(100);
215 2 c=(a%100000000)/10000000;
216 2 if(c!=0 )
217 2 {lcd1602_wrdata(c+0x30);
218 3 p=1;
219 3 }
220 2 delay(100);
221 2 c=(a%10000000)/1000000;
222 2 if(c!=0 || p==1 )
223 2 {lcd1602_wrdata(c+0x30);
224 3 p=1;
225 3 }
226 2 delay(100);
227 2 c=(a%1000000)/100000;
228 2 if(c!=0 || p==1 )
229 2 {lcd1602_wrdata(c+0x30);
230 3 p=1;
231 3 }
232 2 delay(100);
233 2 c=(a%100000)/10000;
234 2 if(c!=0 || p==1 )
235 2 {lcd1602_wrdata(c+0x30);
236 3 p=1;
237 3 }
238 2 delay(100);
239 2 c=(a%10000)/1000;
240 2 if(c!=0 || p==1)
241 2 {lcd1602_wrdata(c+0x30);
C51 COMPILER V7.20 TEXT1 07/16/2007 22:00:06 PAGE 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -