📄 text1.lst
字号:
C51 COMPILER V7.20 TEXT1 08/13/2007 15:13:36 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<reg52.h>
2 #include<intrins.h>
3 #define uint unsigned int
4 #define uchar unsigned char
5 #define ulong unsigned long
6 /*****数据口定义****/
7 #define lcd1602_bus P0
8
9
10 /*定义9850端口*/
11 sbit sclk=P2^0; //W_CLK
12 sbit load=P2^1; //FQUD
13 sbit sdata=P2^2; //DATA
14
15 /******* 引脚LCD定义 *****/
16 sbit rs_1602=P2^5;
17 sbit rw_1602=P2^6;
18 sbit e_1602=P2^7;
19
20 sbit alarm=P0^0;
21
22
23 sbit beep=P2^3; //按键声音开关
24
25 /******* TLC0838数据口定义 *******/
26 sbit CS=P3^2; //TLC0838---PIN18
27 sbit DI=P3^3; //TLC0838---PIN17
28 sbit CLK=P3^4; //TLC0838---PIN16
29 sbit DO=P3^5; //TLC0838---PIN14
30
31 //SE接成低电平
32 uchar error=1;
33
34
35
36
37
38 /*********延时子程序**********/
39 void delay_1ms(uint t)
40 {
41 1 uint i,j;
42 1 for(i=0;i<t;i++)
43 1 for(j=0;j<120;j++);
44 1 }
45
46 void delay(uchar t)
47 {
48 1 uchar i;
49 1 while(t--)
50 1 {
51 2 /* 对于11.0592M时钟,约延时1ms */
52 2 for (i=0;i<125;i++)
53 2 {}
54 2 }
55 1 }
C51 COMPILER V7.20 TEXT1 08/13/2007 15:13:36 PAGE 2
56
57
58
59
60
61
62
63 /***********忙判断标志,返回一个位BF********************/
64 bit lcd1602_busy(void)
65 {
66 1 uchar busy_flag;
67 1 rs_1602=0;
68 1 rw_1602=1;
69 1 _nop_();
70 1 e_1602=1;
71 1 _nop_();
72 1 lcd1602_bus=0xff;
73 1 busy_flag=lcd1602_bus; //e在高电平时读
74 1 e_1602=0;
75 1 return (bit)(busy_flag&0x80); //BF=1; BUSY 返回一个位
76 1 }
77
78
79 /********写命令,有两个参数,一个是要写的命令控制字,
80 第二个是用来控制是否进行忙标志的判断。
81 busyflag=1;
82 判断: 为0
83 ***************/
84 void lcd1602_wrcmd(unsigned char lcdcmd)
85 {
86 1 while(lcd1602_busy()); //等待空闲
87 1 lcd1602_bus=lcdcmd;
88 1 rs_1602=0;
89 1 rw_1602=0;
90 1 _nop_();
91 1 e_1602=1;
92 1 _nop_();
93 1 _nop_();
94 1 e_1602=0; //产生一个下沿
95 1 }
96
97
98
99 /***************向液晶写数据******************/
100 void lcd1602_wrdata(uchar lcddata)
101 {
102 1 while(lcd1602_busy()); //等待空闲
103 1 lcd1602_bus=lcddata; //在下沿的时候写数据
104 1 rs_1602=1;
105 1 rw_1602=0;
106 1 _nop_();
107 1 e_1602=1;
108 1 _nop_();
109 1 _nop_();
110 1 e_1602=0;
111 1 //lcd_bus=0xff;
112 1 }
113
114
115 /************液晶的清屏************/
116 void lcd1602_clear(void)
117 {
C51 COMPILER V7.20 TEXT1 08/13/2007 15:13:36 PAGE 3
118 1 lcd1602_wrcmd(0x01); //液晶清屏控制字 并延时>40us
119 1 delay(1);
120 1 }
121
122 /***********1602液晶的初始化***************/
123 void lcd1602_init(void)
124 {
125 1 lcd1602_wrcmd(0x38); //功能设置-----8位数据接口,两行显示,5*7点阵字符显示
126 1 delay(1);
127 1 lcd1602_wrcmd(0x0e); //显示开关控制----显示开关开,光标开关关,闪烁开关关
128 1 delay(1);
129 1 lcd1602_wrcmd(0x06); //输入方式设置,AC自增1, S=0;
130 1 delay(1);
131 1 lcd1602_wrcmd(0x01); //清屏
132 1 delay(1);
133 1 }
134
135
136 /**********4*4矩阵键盘****************/
137 /************
138 矩阵键盘
139 D---------P1.0
140 C---------P1.1
141 B---------P1.2
142 A---------P1.3
143 1---------P1.4
144 2---------P1.5
145 3---------P1.6
146 4---------P1.7
147 按键值的分布
148 D C B A
149 1〔15 14 13 12〕
150 2〔11 10 9 8〕
151 3〔 7 6 5 4〕
152 4〔 3 2 1 0〕
153 利用已有的那个按键程序 */
154 uchar getkey_ii()
155
156 {
157 1 unsigned char keycode=0xff,temp,i;
158 1 P1=0x0f;
159 1 temp=P1&0x0f;
160 1 if(temp!=0x0f) //判是否有键按下
161 1 {
162 2 beep=0;
163 2 P1=0xef; //自第0行开始扫描输出,自列读入键值
164 2 for(i=0;i<4;i++)
165 2 {
166 3 temp=P1&0x0f;
167 3 if(temp==0x07) //判断第0列是否有键按下
168 3 {
169 4 keycode=i*4+0;
170 4 break;
171 4 }
172 3 else if(temp==0x0b)//判断第1列是否有键按下
173 3 {
174 4 keycode=i*4+1;
175 4 break;
176 4 }
177 3 else if(temp==0x0d)//判断第2列是否有键按下
178 3 {
179 4 keycode=i*4+2;
C51 COMPILER V7.20 TEXT1 08/13/2007 15:13:36 PAGE 4
180 4 break;
181 4 }
182 3 else if(temp==0x0e)//判断第3列是否有键按下
183 3 {
184 4 keycode=i*4+3;
185 4 break;
186 4 }
187 3 P1=(P1<<1)|0x1;
188 3 }
189 2
190 2 while((P1&0x0f)!=0x0f) //等待释放
191 2 {
192 3 P1=0x0f;
193 3 }
194 2 beep=1;
195 2
196 2 }
197 1 return keycode;
198 1 }
199
200
201 /********* 显示数字 *************/
202 void xianshu(unsigned long a)
203 { unsigned long c,p=0;
204 1
205 1
206 1
207 1 c=a/1000000000;
208 1 if(c!=0)
209 1 {lcd1602_wrdata(c+0x30);
210 2 p=1;
211 2 }
212 1 c=(a%1000000000)/100000000;
213 1 if(c!=0 || p==1)
214 1 {lcd1602_wrdata(c+0x30);
215 2 p=1;
216 2 }
217 1 c=(a%100000000)/10000000;
218 1 if(c!=0 || p==1)
219 1 {lcd1602_wrdata(c+0x30);
220 2 p=1;
221 2 }
222 1
223 1 c=(a%10000000)/1000000;
224 1 if(c!=0 || p==1)
225 1 {lcd1602_wrdata(c+0x30);
226 2 p=1;
227 2 }
228 1 c=(a%1000000)/100000;
229 1 if(c!=0 || p==1)
230 1 {lcd1602_wrdata(c+0x30);
231 2 p=1;
232 2 }
233 1 c=(a%100000)/10000;
234 1 if(c!=0 || p==1)
235 1 {lcd1602_wrdata(c+0x30);
236 2 p=1;
237 2 }
238 1 c=(a%10000)/1000;
239 1 if(c!=0 || p==1)
240 1 {lcd1602_wrdata(c+0x30);
241 2 p=1;
C51 COMPILER V7.20 TEXT1 08/13/2007 15:13:36 PAGE 5
242 2 }
243 1
244 1 c=(a%1000)/100;
245 1 if(c!=0 || p==1)
246 1 {lcd1602_wrdata(c+0x30);
247 2 p=1;
248 2 }
249 1
250 1 c=(a%100)/10;
251 1 if(c!=0 || p==1)
252 1 {lcd1602_wrdata(c+0x30);
253 2 }
254 1
255 1 c=a%10+0x30;
256 1 lcd1602_wrdata(c);
257 1
258 1
259 1 }
260
261 /******* 菜单显示子程序 ************/
262 void xianshi(uchar j)
263 { uchar code str[][9]={{"1.SIN "},{"2.OOK "},{"3.set F "},{"4.set dF"},{"5.set XW"},{"6.FSK "},{"7
-.FM "},{"1.SIN "}};
264 1 uchar i;
265 1 unsigned char offset=0x80;
266 1 lcd1602_clear();
267 1 lcd1602_wrcmd(offset+0x00);
268 1
269 1 lcd1602_wrcmd(offset+0x00);
270 1 lcd1602_wrdata('-');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -