📄 receive.lst
字号:
C51 COMPILER V8.02 RECEIVE 08/23/2007 14:37:00 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE RECEIVE
OBJECT MODULE PLACED IN receive.OBJ
COMPILER INVOKED BY: D:\SOFTWARE\uv3\C51\BIN\C51.EXE receive.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include<string.h>
4 #include<stdio.h>
5 #include<math.h>
6 #define uint unsigned int
7 #define uchar unsigned char
8 #define lcd_bus P1
9 #define key_bus P0
10 sbit rt=P2^4;
11 sbit enable=P2^7;
12 sbit beep=P2^5;
13 // lcd
14 sbit rs=P2^0;
15 sbit rw=P2^1;
16 sbit e =P2^2;
17 uchar offset=0x80;
18 uchar inte; //整数部分
19 uchar dec; //小数部分
20 uint detemp; //年月摄氏度
21 uchar state=0;
22 uchar TLL;
23 uchar THH;
24 uchar code hanzi[]={0x80,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
25 0xf,0x9,0xf,0x9,0xf,0x9,0x11,0,
26 0x1C,0x14,0x1C,0x0,0x0,0x0,0x00,0x00,
27 0x06,0x08,0x10,0x10,0x10,0x08,0x06,0x00};
28 uchar code str1[]="temperature is:";
29 uchar code str2[]="welcome";
30 uchar code str3[]="1:temperature";
31 uchar code str4[]="2:INPUT TL";
32 uchar code str5[]="3:INPUT TH";
33 uchar code str6[]="4:send";
34 uchar code str7[]="sending";
35 uchar code key_table[16]={15,0,14,13,7,8,9,12,4,5,6,11,1,2,3,10};
36 /*****************读按键***************/
37 uchar getkey()
38 {
39 1 uchar keycode=0xff,temp,i;
40 1 key_bus=0x0f;
41 1 temp=key_bus&0x0f;
42 1 if(temp!=0x0f) //有键按下
43 1 {
44 2 key_bus=0x7f;
45 2 for(i=0;i<4;i++)
46 2 {
47 3 temp=key_bus&0x0f;
48 3 if(temp==0x07)
49 3 {
50 4 keycode=i*4;
51 4 break;
52 4 }
53 3 else if(temp==0x0b)
54 3 {
55 4 keycode=i*4+1;
C51 COMPILER V8.02 RECEIVE 08/23/2007 14:37:00 PAGE 2
56 4 break;
57 4 }
58 3 else if(temp==0x0d)
59 3 {
60 4 keycode=i*4+2;
61 4 break;
62 4 }
63 3 else if(temp==0x0e)
64 3 {
65 4 keycode=i*4+3;
66 4 break;
67 4 }
68 3 key_bus=(key_bus>>1)|0x80;
69 3 }
70 2
71 2 while((key_bus&0x0f)!=0x0f) //等待释放
72 2 {
73 3 key_bus=0x0f;
74 3 }
75 2
76 2 }
77 1 return key_table[keycode];
78 1 }
79
80
81 //////////////////////////////////////////
82 delay(uchar d)
83 {
84 1 while(--d);
85 1 }
86
87
88 /**********判断忙标志,返回的是一个位BF**********/
89 bit lcd_busy(void)
90 {
91 1 uchar bflag;
92 1 rs=0;
93 1 rw=1;
94 1 _nop_();
95 1 e=1;
96 1 _nop_();
97 1 lcd_bus=0xff;
98 1 bflag=lcd_bus;
99 1 e=0;
100 1 return(bit)(bflag&0x80); //BF=1 busy
101 1 }
102
103
104
105 /*********写命令,有两个参数,第一个是要写的命令控制字,
106 第二个是用来控制是否进行忙标志的判断。
107 busyflag=1:判断;为 0:不判断****************/
108 void lcd_wrcmd(uchar cmd)
109 {
110 1 while(lcd_busy());
111 1 lcd_bus=cmd;
112 1 rs=0;
113 1 rw=0;
114 1 _nop_();
115 1 e=1;
116 1 _nop_();
117 1 _nop_();
C51 COMPILER V8.02 RECEIVE 08/23/2007 14:37:00 PAGE 3
118 1 e=0;
119 1 }
120
121
122 /************向液晶片写数据***************/
123 void lcd_wrdata( uchar lcddata)
124 {
125 1 while(lcd_busy());
126 1 lcd_bus=lcddata;
127 1 rs=1;
128 1 rw=0;
129 1 _nop_();
130 1 e=1;
131 1 _nop_();
132 1 _nop_();
133 1 e=0;
134 1 }
135
136 /****************初始化***************/
137 void lcd_ini(void)
138 {
139 1 lcd_wrcmd(0x38);
140 1 delay(100);
141 1 lcd_wrcmd(0x0c);
142 1 delay(100);
143 1 lcd_wrcmd(0x06);
144 1 delay(100);
145 1 lcd_wrcmd(0x01);
146 1 delay(100);
147 1 }
148
149 //////////////////////////////////////////////
150 //
151 // 生成汉字子模函数
152 // 当lcd_wrdata(0);显示第一个汉字
153 // 当lcd_wrdata(1);显示第二个汉字
154 //
155 //////////////////////////////////////////////
156 lcd_h()
157 {
158 1 uchar i;
159 1 lcd_wrcmd(0x40);
160 1 for(i=0;i<32;i++) lcd_wrdata(hanzi[i]);
161 1 }
162
163
164 receivedata() interrupt 4 //接收中断
165 { uchar temp;
166 1 static bit flag_inte=0,flag_dec=0; //整数部分和小数部分的标志
167 1 temp=SBUF;
168 1 if(flag_dec==1)
169 1 {
170 2 dec=temp; //接收小数部分
171 2 flag_dec=0; // 清除小数标志
172 2 }
173 1 if(flag_inte==1)
174 1 {inte=temp; //接收整数部分
175 2 flag_inte=0; // 清除整数标志
176 2 }
177 1
178 1 if(temp==0xfe) flag_dec=1; //表示下面发送的是小数部分
179 1 if(temp==0xff) flag_inte=1; //表示下面发送的是整数部分
C51 COMPILER V8.02 RECEIVE 08/23/2007 14:37:00 PAGE 4
180 1
181 1
182 1
183 1 RI=0; //清除中断标志
184 1 }
185
186 senddata(unsigned char dat) //串口发送数据
187 {SBUF=dat;
188 1 while(TI==0);
189 1 TI=0;
190 1 }
191
192 serial_init() //串口初始化
193 {
194 1
195 1
196 1 SCON=0X50; /* SCON: 串口方式1, 8位异步通信,接收使能*/
197 1 TMOD=0x20; /*波特率发生需用定时器1:TMOD: 定时器1, 8位自动重装 */
198 1 PCON= 0x80; //双倍时钟
199 1 TH1=0xfd; /* TH1:自动重装值,19200baud ,晶振11.0592MHz */
200 1 TL1=0xfd;
201 1 TR1=1; /* TR1:启动定时器1 */
202 1 ES=1;
203 1 EA=1;
204 1 }
205
206
207
208 void tempdisplay(void)
209 {
210 1 uchar i,r=0,j,iii;
211 1 uchar stra[3];
212 1 uchar xiaoshu[4];
213 1 lcd_wrcmd(0x0f);
214 1 lcd_wrcmd(0x81);
215 1 for(j=0;j<16;j++)lcd_wrdata(str1[j]);
216 1 while(1)
217 1
218 1 { if(inte<TLL||inte>=THH)
219 2 beep=1;
220 2 else beep=0;
221 2 detemp=dec*625;
222 2 xiaoshu[0]=detemp/1000+'0';
223 2 xiaoshu[1]=detemp%1000/100+'0';
224 2 xiaoshu[2]=detemp%100/10+'0';
225 2 xiaoshu[3]=detemp%10+'0';
226 2
227 2 stra[0]=inte/100+'0';
228 2 stra[1]=inte%100/10+'0';
229 2 stra[2]=inte%10+'0';
230 2 if(stra[0]=='0')
231 2 r=1;
232 2 lcd_wrcmd(0xc2+r);
233 2 for(i=r;i<3;i++)
234 2 lcd_wrdata(stra[i]);
235 2 lcd_wrdata('.');
236 2 for(i=0;i<4;i++)
237 2 lcd_wrdata(xiaoshu[i]);
238 2 delay(100);
239 2 lcd_wrdata(2);
240 2 lcd_wrdata(0x43);
241 2 for(i=0;i<4;i++)
C51 COMPILER V8.02 RECEIVE 08/23/2007 14:37:00 PAGE 5
242 2 lcd_wrdata(' ');
243 2 iii=getkey();
244 2 if(iii==1)
245 2 enable=!enable;
246 2 if(iii==13)
247 2 {
248 3 state=1;
249 3 lcd_wrcmd(0x0c);
250 3 lcd_wrcmd(1);
251 3 lcd_wrcmd(0x80);
252 3 break;
253 3 }
254 2 }
255 1
256 1 }
257
258 welcome()
259 {
260 1
261 1 uchar temp=0x12,w;
262 1 lcd_wrcmd(0x0c);
263 1 lcd_wrcmd(0x82);
264 1
265 1 for(w=0;w<strlen(str2);w++)
266 1 lcd_wrdata(str2[w]);
267 1 lcd_h();
268 1 lcd_wrcmd(0xc4);
269 1 lcd_wrdata('2'); lcd_wrdata('0');lcd_wrdata('0');lcd_wrdata('7');
270 1 lcd_wrdata(0);
271 1 lcd_wrdata('0');lcd_wrdata('8');
272 1 lcd_wrdata(1);
273 1 while(1)
274 1 {
275 2 temp=getkey();
276 2 if(temp>=0&&temp<=15) //按任意键跳转
277 2 {
278 3 state=1;
279 3 lcd_wrcmd(1);
280 3 break;
281 3 }
282 2 }
283 1 }
284
285 menu()
286 {
287 1 uchar i,ii,cnt=1;
288 1
289 1 lcd_wrcmd(0x83);
290 1 for(i=0;i<strlen(str3);i++)
291 1 lcd_wrdata(str3[i]);
292 1 lcd_wrcmd(0xc3);
293 1 i=0;
294 1 while(str4[i]!='\0')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -