📄 chuankou.lst
字号:
C51 COMPILER V8.02 CHUANKOU 07/31/2008 11:10:05 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CHUANKOU
OBJECT MODULE PLACED IN chuankou.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE chuankou.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***********************************************************************
2 函数名称:串口通信
3 函数功能:实现串口半双工通信
4 说明:主机发送1-8数字是可控制单片机LED点亮
5 主机发送的单个字符可在LCD 上显示
6 主机发送的数据可原样返回
7 单片机P3_2---P3_7可向主机发送字符
8 李灿松
9 2008.7.20
10 ***********************************************************************/
11 #include<reg52.h>
12 #include<intrins.h>
13 #include<absacc.h>
14 #define uchar unsigned char
15 #define L1602_DB0_DB7 P0 //定义1602的数据总线
16 uchar code tab[10]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,} ;
17 uchar code str[]={"I LOVE YOU FOR 10.2 "};
18 uchar code hello[]={"hello:"};
19 uchar data dat[4];
20 sbit L1602_RS=P2^0; //定义1602得RS控制线
21 sbit L1602_RW=P2^1; //定义1602得RW控制线
22 sbit L1602_E=P2^2; //定义1602的E控制线
23 sbit L1602_Busy=P0^7; //定义1602的测忙线
24 sbit P3_2=P3^2;
25 sbit P3_3=P3^3;
26 sbit P3_4=P3^4;
27 sbit P3_5=P3^5;
28 sbit P3_6=P3^6;
29 sbit P3_7=P3^7;
30 typedef bit BOOL ;
31
32 void init(void)
33 {
34 1 TMOD=0x20; //定时器1工作在方式2
35 1 PCON=0x00; //波特率不增倍
36 1 SCON=0x50; //串行工作方式3
37 1 TH1=0xFD; //SMOD=0时的初值
38 1 TL1=0xFD;
39 1 TR1=1;
40 1 }
41
42 /*void delay(void)
43 {
44 int k;
45 for(k=0;k<800;k++);
46
47 }
48 */
49
50 /**********************************************************************************************
51 函数名称:显示函数
52 函数功能:显示接受的数据
53 说明:
54 **********************************************************************************************/
55 void display()
C51 COMPILER V8.02 CHUANKOU 07/31/2008 11:10:05 PAGE 2
56 {
57 1 uchar t_shi,t_ge,t_feng,t_miao;
58 1 void LCM1602_Init();
59 1 void print(uchar a,uchar *str);
60 1 void print1(uchar a,uchar t);
61 1 void LCM1602_Delay(uchar count);
62 1 // if(k==49) P1=0xfe;
63 1 // else if(k==50) P1=0xfd;
64 1 // else if(k==51) P1=0xfb;
65 1 // else if(k==52) P1=0xf7;
66 1 // else if(k==53) P1=0xef;
67 1 // else if(k==54) P1=0xdf;
68 1 // else if(k==55) P1=0xbf;
69 1 // else if(k==56) P1=0x7f;
70 1 // else P1=0xff;
71 1 t_shi=dat[0];t_ge=dat[1];t_feng=dat[2];t_miao=dat[3];
72 1 LCM1602_Init();
73 1 print(0x80,hello);
74 1 print1(0xc0,t_shi);
75 1 print1(0xc1,t_ge);
76 1 print1(0xc2,t_feng);
77 1 print1(0xc3,t_miao);
78 1 LCM1602_Delay(5000);
79 1 }
80
81
82 void send_str()
83 // 传送字串
84 {
85 1 unsigned char i = 0;
86 1 while(str[i] != '\0')
87 1 {
88 2 SBUF = str[i];
89 2 while(!TI); // 等特数据传送
90 2 TI = 0; // 清除数据传送标志
91 2 i++; // 下一个字符
92 2 }
93 1 }
94
95 /**********************************************************************************************
96 函数名称:主函数
97 函数功能:主函数
98 说明:
99 **********************************************************************************************/
100
101 void main()
102 {
103 1 P2=0xff;
104 1 P0=0xff;
105 1 EA=1;
106 1 ES=1; //串行口中断开
107 1 init();
108 1 while(1)
109 1 {
110 2 display();
111 2 if(P3_2==0)
112 2 {
113 3 // SBUF='L'; //发送
114 3 // while(TI==0); //等待串口发送完毕
115 3 // TI=0;
116 3 send_str();
117 3 while(P3_2==0); //等待按键放
C51 COMPILER V8.02 CHUANKOU 07/31/2008 11:10:05 PAGE 3
118 3 }
119 2 if(P3_3==0)
120 2 {
121 3 SBUF='b'; //发送
122 3 while(TI==0); //等待串口发送完毕
123 3 TI=0;
124 3 while(P3_3==0); //等待按键放
125 3 }
126 2 if(P3_4==0)
127 2 {
128 3 SBUF='i'; //发送
129 3 while(TI==0); //等待串口发送完毕
130 3 TI=0;
131 3 while(P3_4==0); //等待按键放
132 3 }
133 2 if(P3_5==0)
134 2 {
135 3 SBUF='y'; //发送
136 3 while(TI==0); //等待串口发送完毕
137 3 TI=0;
138 3 while(P3_5==0); //等待按键放
139 3 }
140 2 if(P3_6==0)
141 2 {
142 3 SBUF='n'; //发送
143 3 while(TI==0); //等待串口发送完毕
144 3 TI=0;
145 3 while(P3_6==0); //等待按键放
146 3 }
147 2 if(P3_7==0)
148 2 {
149 3 SBUF='g'; //发送
150 3 while(TI==0); //等待串口发送完毕
151 3 TI=0;
152 3 while(P3_7==0); //等待按键放
153 3 }
154 2
155 2 }
156 1
157 1 }
158
159 serial () interrupt 4 using 1
160 {
161 1 int i;
162 1 if(RI==1)
163 1 {
164 2 RI=0;
165 2 for(i=0;i<4;i++)
166 2 {
167 3 dat[i]=SBUF; //接受
168 3 SBUF=dat[i]; //发送
169 3 }
170 2 while(TI==0);
171 2 TI=0;
172 2 }
173 1 }
174
175 /**********************************************************************************************
176 函数名称:延时函数
177 函数功能:转换延时和显示延时
178 说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
179 **********************************************************************************************/
C51 COMPILER V8.02 CHUANKOU 07/31/2008 11:10:05 PAGE 4
180 void delay(unsigned int delay_time) // 延时程序
181 {
182 1 while(delay_time--);
183 1 }
184
185 void LCM1602_Delay(uchar count)
186 {
187 1 uchar i;
188 1 while(--count!=0)
189 1 {for(i=0;i<250;i++);}
190 1 }
191
192 /**********************************************************************************************
193 函数名称:初始化函数
194 函数功能:液晶1602初始化
195 说明:
196 **********************************************************************************************/
197 void LCM1602_Init(void)
198 {
199 1 void LCM1602_WriteData(uchar LCM1602_data);
200 1 void LCM1602_WriteCMD(uchar LCM1602_command);
201 1 LCM1602_WriteCMD(0x38); //显示两行,每个字符为5*7个像素
202 1 delay(1);
203 1 LCM1602_WriteCMD(0x06); //光标移动设置,光标右移
204 1 delay(1);
205 1 LCM1602_WriteCMD(0x0c); //现设开,光标开,闪烁开
206 1 delay(1);
207 1 LCM1602_WriteCMD(0x01); //清屏
208 1 delay(1);
209 1 }
210 void print(uchar a,uchar *str)
211 {
212 1 void LCM1602_WriteData(uchar LCM1602_data);
213 1 void LCM1602_WriteCMD(uchar LCM1602_command);
214 1 LCM1602_WriteCMD(a);
215 1 while(*str!='\0')
216 1 {
217 2 LCM1602_WriteData(*str++);
218 2 }
219 1 *str=0;
220 1 }
221 void print1(uchar a,uchar t)
222 {
223 1 LCM1602_WriteCMD(a);
224 1 LCM1602_WriteData(t);
225 1 }
226
227
228
229 /**********************************************************************************************
230 函数名称:写命令和写数据函数
231 函数功能:向LCD写命令和数据
232 说明:LCM1602_WriteCMD是写命令函数,void LCM1602_WriteData是写数据函数
233 **********************************************************************************************/
234 void LCM1602_WriteCMD(uchar LCM1602_command)
235 {
236 1 BOOL lcd_bz();
237 1 while(lcd_bz()); //测忙
238 1 L1602_RS=0;
239 1 L1602_RW=0;
240 1 L1602_E=0;
241 1 _nop_();
C51 COMPILER V8.02 CHUANKOU 07/31/2008 11:10:05 PAGE 5
242 1 _nop_();
243 1 L1602_DB0_DB7=LCM1602_command;
244 1 _nop_();
245 1 _nop_();_nop_();
246 1 L1602_E=1; //命令总送出
247 1 _nop_();_nop_();_nop_();
248 1 L1602_E=0;
249 1 }
250
251 void LCM1602_WriteData(uchar LCM1602_data)
252 {
253 1 BOOL lcd_bz();
254 1 while(lcd_bz()); //测忙
255 1 L1602_RS=1;
256 1 L1602_RW=0;
257 1 L1602_E=0;
258 1 L1602_DB0_DB7=LCM1602_data;
259 1 _nop_();
260 1 _nop_();
261 1 _nop_();
262 1 _nop_();
263 1 L1602_E=1; //数据送出
264 1 _nop_();
265 1 _nop_();
266 1 _nop_();
267 1 L1602_E=0;
268 1 }
269
270
271 /**********************************************************************************************
272 函数名称:LCD检测忙函数
273 函数功能:检测LCD是否处于忙状态
274 说明:
275 **********************************************************************************************/
276 BOOL lcd_bz()
277 { // 测试LCD忙碌状态
278 1 BOOL result;
279 1 L1602_RS=0;
280 1 L1602_RW=1;
281 1 L1602_E=1;
282 1 _nop_();
283 1 _nop_();
284 1 _nop_();
285 1 _nop_();
286 1 result = (BOOL)(P0 & 0x80);
287 1 L1602_E = 0;
288 1 return result;
289 1 }
290 /**********************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 446 ----
CONSTANT SIZE = 38 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 10
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -