📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 07/20/2008 11:31:54 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <AT89X52.H>
2 #include <ctype.h>
3 #include <string.h>
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <math.h>
7
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 sfr p3=0xb0;
12 sbit p3_5=p3^5;
13 sbit p3_4=p3^4;
14
15 sbit DQ=P1^5;//ds18b20与单片机连接口
16 sbit RS=P1^2;
17 sbit RW=P1^1;
18 sbit EN=P1^0;
19
20 /****继电器部分控制***********************************/
21 sbit LED_RED=P2^6;
22 sbit LED_BLUE=P2^7;
23 sbit Relay_add=P2^0;
24
25
26 //// /////////////////////////////////////////////////////
27 bit K1,K2,K3,k4,k5;
28 bit KT;
29 bit flash;
30 unsigned char set=0,xiaoshi=0,fenzhong=0,wendu=0;//定时与调温变量
31 uchar ms50,second,minite,hour=12;
32 uchar temp;
33
34 void Init_T0(void);
35 void FlashKey(void);
36 void Add(void);
37 void Init_Clock(void);
38 void Refresh(void);
39
40
41 ////////////////////////////////////////////////////////
42
43 unsigned char code str1[]={"M: : T: . "};
44 unsigned char code str2[]={"S: : st: . "};
45
46 unsigned char code str3[]={"I love you HJ!"};
47 unsigned char code str4[]={"Made by hu jiao"};
48
49 uchar data disdata[8];
50 uint tvalue;//温度值
51 uchar tflag;//温度正负标志
52
53 /////////////////////////////////
54 uchar data inputdata[8];
55 ///////////////////////////////////////
C51 COMPILER V7.50 MAIN 07/20/2008 11:31:54 PAGE 2
56
57 /*************************lcd1602程序**************************/
58 void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
59 {unsigned int i,j;
60 1 for(i=0;i<ms;i++)
61 1 for(j=0;j<120;j++);
62 1 }
63
64 void wr_com(unsigned char com)//写指令//
65 { delay1ms(1);
66 1 RS=0;
67 1 RW=0;
68 1 EN=0;
69 1 P0=com; //////////////////////*****************
-*DAT
70 1 delay1ms(1);
71 1 EN=1;
72 1 delay1ms(1);
73 1 EN=0;
74 1 }
75
76 void wr_dat(unsigned char dat)//写数据//
77 { delay1ms(1);;
78 1 RS=1;
79 1 RW=0;
80 1 EN=0;
81 1 P0=dat; /////////////////////////***************
-***DAT
82 1 delay1ms(1);
83 1 EN=1;
84 1 delay1ms(1);
85 1 EN=0;
86 1 }
87
88 void lcd_init()//初始化设置//
89 {delay1ms(15);
90 1 wr_com(0x38);delay1ms(5);
91 1 wr_com(0x08);delay1ms(5);
92 1 wr_com(0x01);delay1ms(5);
93 1 wr_com(0x06);delay1ms(5);
94 1 wr_com(0x0c);delay1ms(5);
95 1 }
96
97
98
99
100 void display(unsigned char *p)//显示//
101 {
102 1 while(*p!='\0')
103 1 {
104 2 wr_dat(*p);
105 2 p++;
106 2 delay1ms(1);
107 2 }
108 1 }
109
110 init_play()//初始化显示
111 { lcd_init();
112 1 wr_com(0x80);
113 1 display(str1);
114 1 wr_com(0xc0);
115 1 display(str2);
C51 COMPILER V7.50 MAIN 07/20/2008 11:31:54 PAGE 3
116 1 }
117
118 /******************************ds1820程序***************************************/
119 void delay_18B20(unsigned int i)//延时1微秒
120 {
121 1 while(i--);
122 1 }
123
124
125 void ds1820rst()/*ds1820复位*/
126 { unsigned char x=0;
127 1 DQ = 1; //DQ复位
128 1 delay_18B20(4); //延时
129 1 DQ = 0; //DQ拉低
130 1 delay_18B20(100); //精确延时大于480us
131 1 DQ = 1; //拉高
132 1 delay_18B20(40);
133 1 }
134
135
136 uchar ds1820rd()/*读数据*/
137 { unsigned char i=0;
138 1 unsigned char dat = 0;
139 1 for (i=8;i>0;i--)
140 1 { DQ = 0; //给脉冲信号
141 2 dat>>=1;
142 2 DQ = 1; //给脉冲信号
143 2 if(DQ)
144 2 dat|=0x80;
145 2 delay_18B20(10);
146 2 }
147 1 return(dat);
148 1 }
149
150
151 void ds1820wr(uchar wdata)/*写数据*/
152 {
153 1 unsigned char i=0;
154 1 for (i=8; i>0; i--)
155 1 { DQ = 0;
156 2 DQ = wdata&0x01;
157 2 delay_18B20(10);
158 2 DQ = 1;
159 2 wdata>>=1;
160 2 }
161 1 }
162
163
164
165 read_temp()/*读取温度值并转换*/
166 {
167 1 uchar a,b;
168 1 ds1820rst();
169 1 ds1820wr(0xcc);//*跳过读序列号*/
170 1 ds1820wr(0x44);//*启动温度转换*/
171 1 ds1820rst();
172 1 ds1820wr(0xcc);//*跳过读序列号*/
173 1 ds1820wr(0xbe);//*读取温度*/
174 1 a=ds1820rd();
175 1 b=ds1820rd();
176 1 tvalue=b;
177 1 tvalue<<=8;
C51 COMPILER V7.50 MAIN 07/20/2008 11:31:54 PAGE 4
178 1 tvalue=tvalue|a;
179 1 if(tvalue<0x0fff)
180 1 tflag=0;
181 1 else
182 1 {tvalue=~tvalue+1;
183 2 tflag=1;}
184 1
185 1 tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
186 1 return(tvalue);
187 1 }
188
189
190 /*******************************************************************/
191 void ds1820disp1() //温度值显示
192 {
193 1 uchar flagdat;
194 1
195 1 disdata[0]=tvalue/1000 +0x30;//百位数
196 1 disdata[1]=tvalue%1000/100 +0x30;//十位数
197 1 disdata[2]=tvalue%100/10 +0x30;//个位数
198 1 disdata[3]=tvalue%10 +0x30;//小数位
199 1
200 1 disdata[4]=hour/10+0x30;//小时高位
201 1 disdata[5]=hour%10+0x30;//小时低位
202 1 disdata[6]=minite/10+0x30;//分钟高位
203 1 disdata[7]=minite%10+0x30;//分钟低位
204 1
205 1
206 1 if(tflag==0)
207 1 flagdat=0x20;//正温度不显示符号
208 1 else
209 1 flagdat=0x2d;//负温度显示负号:-
210 1
211 1 if(disdata[0]==0x30)
212 1 {
213 2 disdata[0]=0x20;//如果百位为0,不显示
214 2 if(disdata[1]==0x30)
215 2 {disdata[1]=0x20;//如果百位为0,十位为0也不显示
216 3 }
217 2 }
218 1
219 1 /* wr_com(0x80|9); //第一行 第 0x80|x 列
220 1 wr_dat(flagdat);//显示符号位
221 1
222 1 wr_com(0x80|10);
223 1 wr_dat(disdata[0]);//显示 百位
224 1
225 1 wr_com(0x80|11);
226 1 wr_dat(disdata[1]);//显示 十位
227 1
228 1 wr_com(0x80|12);
229 1 wr_dat(disdata[2]);//显示 个位
230 1
231 1 wr_com(0x80|13);
232 1 wr_dat(0x2e);//显示小数点
233 1
234 1 wr_com(0x80|14);
235 1 wr_dat(disdata[3]);//显示小数位
236 1
237 1 wr_com(0x80|15);
238 1 wr_dat(0xdf); // du */
239 1 wr_com(0x80|2); //第一行 第 0x80|x 列
C51 COMPILER V7.50 MAIN 07/20/2008 11:31:54 PAGE 5
240 1 wr_dat(disdata[4]); //小时高位
241 1
242 1 wr_com(0x80|3);
243 1 wr_dat(disdata[5]); //小时低位
244 1
245 1 wr_com(0x80|5);
246 1 wr_dat(disdata[6]); //分高位
247 1
248 1 wr_com(0x80|6);
249 1 wr_dat(disdata[7]); //分低位
250 1
251 1 // wr_com(0x80|9);
252 1 // wr_dat(flagdat);//正负标志位
253 1
254 1 wr_com(0x80|10);
255 1 wr_dat(disdata[0]); //百位
256 1
257 1 wr_com(0x80|11);
258 1 wr_dat(disdata[1]); //十位
259 1 wr_com(0x80|12);
260 1 wr_dat(disdata[2]); //个位
261 1 // wr_com(0x80|13);
262 1 // wr_dat(0x2e); //小数点
263 1 wr_com(0x80|14);
264 1 wr_dat(disdata[3]);//显示小数位
265 1 wr_com(0x80|15);
266 1 wr_dat(0xdf); // du */
267 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -