📄 18b20test.lst
字号:
C51 COMPILER V8.02 18B20TEST 05/20/2012 19:52:06 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 18B20TEST
OBJECT MODULE PLACED IN 18B20TEST.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18B20TEST.C BROWSE DEBUG OBJECTEXTEND
line level source
1 //DS18B20温度检测及其液晶显示
2 #include<reg52.h> //包含单片机寄存器的头文件
3 #include<intrins.h> //包含_nop_()函数定义的头文件
4 char w ,p;
5 unsigned char code Error[]={" mima ERROR"};
6 unsigned char code xiu[]={"shuru"};
7 unsigned char x[]={1,2,3,4,5,6};
8 unsigned char q[]={0,0,0,0,0,0};
9 unsigned char temp;
10 /*******************************************************************************
11 以下是对液晶模块的操作程序
12 *******************************************************************************/
13 sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚
14 sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚
15 sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚
16 sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚
17 sbit kai=P2^7;
18 sbit jidian=P2^6;
19 char k,m,flap;
20 void cunchu(char j);
21 void cuowu(void);
22 /*****************************************************
23 函数功能:延时1ms
24 (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
25 ***************************************************/
26 void delay1ms()
27 {
28 1 unsigned char i,j;
29 1 for(i=0;i<4;i++)
30 1 for(j=0;j<33;j++)
31 1 ;
32 1 }
33 /*****************************************************
34 函数功能:延时若干毫秒
35 入口参数:n
36 ***************************************************/
37 void delaynms(unsigned char n)
38 {
39 1 unsigned char i;
40 1 for(i=0;i<n;i++)
41 1 delay1ms();
42 1 }
43 /*****************************************************
44 函数功能:判断液晶模块的忙碌状态
45 返回值:result。result=1,忙碌;result=0,不忙
46 ***************************************************/
47 bit BusyTest(void)
48 {
49 1 bit result;
50 1 RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态
51 1 RW=1;
52 1 E=1; //E=1,才允许读写
53 1 _nop_(); //空操作
54 1 _nop_();
55 1 _nop_();
C51 COMPILER V8.02 18B20TEST 05/20/2012 19:52:06 PAGE 2
56 1 _nop_(); //空操作四个机器周期,给硬件反应时间
57 1 result=BF; //将忙碌标志电平赋给result
58 1 E=0; //将E恢复低电平
59 1 return result;
60 1 }
61 /*****************************************************
62 函数功能:将模式设置指令或显示地址写入液晶模块
63 入口参数:dictate
64 ***************************************************/
65 void WriteInstruction (unsigned char dictate)
66 {
67 1 while(BusyTest()==1); //如果忙就等待
68 1 RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令
69 1 RW=0;
70 1 E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,
71 1 // 就是让E从0到1发生正跳变,所以应先置"0"
72 1 _nop_();
73 1 _nop_(); //空操作两个机器周期,给硬件反应时间
74 1 P0=dictate; //将数据送入P0口,即写入指令或地址
75 1 _nop_();
76 1 _nop_();
77 1 _nop_();
78 1 _nop_(); //空操作四个机器周期,给硬件反应时间
79 1 E=1; //E置高电平
80 1 _nop_();
81 1 _nop_();
82 1 _nop_();
83 1 _nop_(); //空操作四个机器周期,给硬件反应时间
84 1 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
85 1 }
86 /*****************************************************
87 函数功能:指定字符显示的实际地址
88 入口参数:x
89 ***************************************************/
90 void WriteAddress(unsigned char x)
91 {
92 1 WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"
93 1 }
94 /*****************************************************
95 函数功能:将数据(字符的标准ASCII码)写入液晶模块
96 入口参数:y(为字符常量)
97 ***************************************************/
98 void WriteData(unsigned char y)
99 {
100 1 while(BusyTest()==1);
101 1 RS=1; //RS为高电平,RW为低电平时,可以写入数据
102 1 RW=0;
103 1 E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,
104 1 // 就是让E从0到1发生正跳变,所以应先置"0"
105 1 P0=y; //将数据送入P0口,即将数据写入液晶模块
106 1 _nop_();
107 1 _nop_();
108 1 _nop_();
109 1 _nop_(); //空操作四个机器周期,给硬件反应时间
110 1 E=1; //E置高电平
111 1 _nop_();
112 1 _nop_();
113 1 _nop_();
114 1 _nop_(); //空操作四个机器周期,给硬件反应时间
115 1 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
116 1 }
117
C51 COMPILER V8.02 18B20TEST 05/20/2012 19:52:06 PAGE 3
118 /*****************************************************
119 函数功能:对LCD的显示模式进行初始化设置
120 ***************************************************/
121 void LcdInitiate(void)
122 {
123 1
124 1 delaynms(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间
125 1 WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
126 1 delaynms(5); //延时5ms ,给硬件一点反应时间
127 1 WriteInstruction(0x38);
128 1 delaynms(5); //延时5ms ,给硬件一点反应时间
129 1 WriteInstruction(0x38); //连续三次,确保初始化成功
130 1 delaynms(5); //延时5ms ,给硬件一点反应时间
131 1 WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁
132 1 delaynms(5); //延时5ms ,给硬件一点反应时间
133 1 WriteInstruction(0x06); //显示模式设置:光标右移,字符不移
134 1 delaynms(5); //延时5ms ,给硬件一点反应时间
135 1 WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除
136 1 delaynms(5); //延时5ms ,给硬件一点反应时间
137 1
138 1 }
139
140
141
142
143
144 /*****************************************************
145 DISPLAY
146 ***************************************************/
147 void display(int i)
148 {
149 1 delaynms(500) ;
150 1 WriteAddress(0x00+k); //写显示地址,将在第1行第1列开始显示
151 1 WriteData(0x30+i); //将字符常量写入LCD
152 1 q[k]=i;
153 1 if(k>5)
154 1 {
155 2 cuowu();
156 2 }
157 1 k++;
158 1 delaynms(500) ;
159 1
160 1
161 1 }
162 void display10(char i)
163 {
164 1 delaynms(500) ;
165 1 WriteAddress(0x00+0x80+0x40+5+p); //写显示地址,将在第1行第1列开始显示
166 1 WriteData(0x30+i); //将字符常量写入LCD
167 1 x[p]=i;
168 1 p++;
169 1 if(p==6)
170 1 {
171 2 delaynms(1000);
172 2 delaynms(1000);
173 2 delaynms(1000);
174 2 flap=1;
175 2 }
176 1 while(1)
177 1 {
178 2
179 2 P1=0xff; //先向P1口写1;端口读状态
C51 COMPILER V8.02 18B20TEST 05/20/2012 19:52:06 PAGE 4
180 2 P1=0xfe;
181 2
182 2 temp=P1;
183 2
184 2 if(temp!=0xee)
185 2 {break;}
186 2 }
187 1
188 1
189 1 }
190 void display11(char i)
191 {
192 1 delaynms(500) ;
193 1 WriteAddress(0x00+0x80+0x40+5+p); //写显示地址,将在第1行第1列开始显示
194 1 WriteData(0x30+i); //将字符常量写入LCD
195 1 x[p]=i;
196 1 p++;
197 1 if(p==6)
198 1 {
199 2 delaynms(1000);
200 2 delaynms(1000);
201 2 delaynms(1000);
202 2 flap=1;
203 2 }
204 1 while(1)
205 1 {
206 2
207 2 P1=0xff; //先向P1口写1;端口读状态
208 2 P1=0xfe;
209 2
210 2 temp=P1;
211 2
212 2 if(temp!=0xde)
213 2 {break;}
214 2 }
215 1
216 1 }
217 void display12(char i)
218 {
219 1 delaynms(500) ;
220 1 WriteAddress(0x00+0x80+0x40+5+p); //写显示地址,将在第1行第1列开始显示
221 1 WriteData(0x30+i); //将字符常量写入LCD
222 1 x[p]=i;
223 1 p++;
224 1 if(p==6)
225 1 {
226 2 delaynms(1000);
227 2 delaynms(1000);
228 2 delaynms(1000);
229 2 flap=1;
230 2 }
231 1 while(1)
232 1 {
233 2
234 2 P1=0xff; //先向P1口写1;端口读状态
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -