📄 temprature.lst
字号:
C51 COMPILER V7.06 TEMPRATURE 04/09/2008 00:06:15 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEMPRATURE
OBJECT MODULE PLACED IN temprature.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.exe temprature.c DB OE
stmt level source
1 #include "C8051F330.h"
2
3 #define TRUE 1
4 #define FALSE 0
5 #define ADC0START ADC0CN|=0x10;
6
7 #define Set_Bit(BIT) (BIT = 1) /*定义置1函数*/
8 #define Clear_Bit(BIT) (BIT = 0) /*定义清0函数*/
9
10
11
12 sbit ChouYang=P0^1; //臭氧控制位
13 sbit JiaRe_Disp=P0^4; //加热灯显示位
14 sbit FengShan_Disp=P0^5; //排风灯显示位
15 sbit JiaRe=P0^7; //加热控制位
16 sbit ChouYang_Disp=P1^1; //臭氧显示位
17 sbit FengShan=P1^0; //风扇控制位
18 sbit Kong=P1^2;
19
20 sbit DQ=P0^6;
21
22 sbit Hd7279_Key=P0^0; //7279按键识别信号
23 sbit Hd7279_CS=P1^4; //7279片选
24 sbit Hd7279_Clk=P1^5; //7279时钟
25 sbit Hd7279_Data=P1^7; //7279信号
26
27 unsigned char n,a=0;
28 char TemperatureSet,TemperatureNow; //温度
29 char TimeSet,TimeNow=0x00; //时间
30 //static unsigned char TemperatureTemp,TimeTemp;
31 unsigned char KeyValue; //按键值
32 static unsigned int Time_Inc=0,Time_Inc_30S=0,Time_Inc_5S=0;
33 static unsigned char Display_Select; //Display_Select=0(显示当前温度);Display_Select=1(显示设定温度);
34 static unsigned char Time_Change; //Time_Change=0(30s定时);Time_Change=1(5s定时)
35 static unsigned char ChouYang_Flag,JiaRe_Flag,FengShan_Flag; //标志位
36 /*ChouYang_Flag(01:开启臭氧排放;02:臭氧指示灯亮;04:臭氧指示灯闪烁)*/
37 /*JiaRe_Flag(01:加热开启;02:加热指示灯亮;04:加热指示灯闪烁)*/
38 /*FengShan_Flag(01:排风开启;02:排风指示灯亮;04:排风指示灯闪烁)*/
39 bit isnewdata;
40 unsigned int kk=0;
41 float temp=0.0;
42 float count=0.0;
43 char Control_Auto;
44 char Control_Flag;
45 char FengShan_Time,JiaRe_Time;
46
47 char Int_Flag=0;
48 char CInt_Flag=0;
49 char Temperature_Flag=0;
50
51
52 void initial(void);
53 void timer_init(void);
54 void adc0_Rx(void);//对滑动变阻器采样
55 void delayus(unsigned int x);
C51 COMPILER V7.06 TEMPRATURE 04/09/2008 00:06:15 PAGE 2
56
57 void Temperature_Display(unsigned char tempr);//显示当前温度
58 void Time_Display(unsigned char ); //显示当前时间
59 void init_18B20(void);//初始化18B20
60 void write_18B20(unsigned char x);//向18B20写数据
61 unsigned char read_18B20(void);//读取18B20数据
62
63 void Write_Hd7279(unsigned char,unsigned char); /*定义HD7279写函数*/
64 unsigned char Read_Hd7279(unsigned char); /*定义HD7279读函数*/
65 void Send_Byte(unsigned char); /*定义HD7279发送字节函数*/
66 unsigned char Receive_Byte(void); /*定义HD7279接收字节函数*/
67 void Short_Delay(void); /*定义短延时函数*/
68 void Long_Delay(void); /*定义长延时函数*/
69 void System_Initial(void); //设定初始设定
70
71 void Control_Key_Check(void); //检查控制按键
72 void Up_Down_Check(void ); //检查是否在增加减少温度/时间值
73 void ChouYang_Check(void);
74 void LED_Flash(void);
75 void delayms(int);
76
77 void main(void)
78 {
79 1 float sumTemp=0.0;
80 1 unsigned char index=0;
81 1 int sign=1,i;
82 1 int a=0;
83 1 delayus(50);
84 1 System_Initial();
85 1 initial();
86 1
87 1 timer_init();
88 1 delayus(100);
89 1 EA=1; //开中断
90 1 for(i=0;i<0x200;i++)
91 1 Send_Byte(0xa4); /*HD7279复位*/
92 1 Write_Hd7279(0x98,0x0f); /*HD7279启动消隐功能,能提高灯的亮度*/
93 1 Send_Byte(0x88);
94 1 Send_Byte(0xff); //LED停止闪烁
95 1 delayms(1000);
96 1 TimeNow=TimeSet;
97 1 Temperature_Display(TemperatureNow);
98 1
99 1 while(1)
100 1 {
101 2
102 2 Time_Display(TimeSet); //显示当前时间
103 2 if(Display_Select==0) //显示当前温度
104 2 Temperature_Display(TemperatureNow);
105 2 if(Display_Select==1) //显示设定温度
106 2 Temperature_Display(TemperatureSet);
107 2
108 2 Up_Down_Check(); //检查是否在增加减少温度/时间值
109 2 ChouYang_Check();
110 2
111 2 if(Control_Flag==1)
112 2 {
113 3 Control_Flag=0;
114 3 Control_Auto=1;
115 3
116 3 }
117 2
C51 COMPILER V7.06 TEMPRATURE 04/09/2008 00:06:15 PAGE 3
118 2 if(Control_Auto==0)
119 2 {
120 3 if(Temperature_Flag==1)
121 3 {
122 4 if((TemperatureNow>TemperatureSet+5))
123 4 {
124 5 JiaRe=0; //停止加热
125 5
126 5
127 5 delayms(100);
128 5 FengShan=1; //排风
129 5
130 5 }
131 4 LED_Flash();
132 4
133 4 if((TemperatureNow<TemperatureSet-5))
134 4 {
135 5 FengShan=0;
136 5 delayms(100);
137 5 JiaRe=1; //开始加热
138 5
139 5
140 5 }
141 4 Temperature_Flag=0;
142 4 }
143 3 }
144 2 if(Control_Auto==1)
145 2 {
146 3
147 3 Control_Key_Check();
148 3 }
149 2
150 2
151 2
152 2
153 2
154 2 }
155 1 }
156
157 void delayus(unsigned int x)
158 {
159 1 while(x)
160 1 {
161 2 x--;
162 2 }
163 1 }
164
165 void delayms(int x)
166 {
167 1 int i;
168 1 for(i=0;i<1000;i++)
169 1 delayus(x);
170 1 }
171 void System_Initial(void) //设定初始设定
172 {
173 1 ChouYang=0; //臭氧不开
174 1 ChouYang_Disp=0; //臭氧指示关闭
175 1 JiaRe=0; //加热关闭
176 1 JiaRe_Disp=0; //加热指示关闭
177 1 FengShan=0; //风扇关闭
178 1 FengShan_Disp=0; //风扇指示关闭
179 1 ChouYang_Flag=0; //臭氧标志位清零
C51 COMPILER V7.06 TEMPRATURE 04/09/2008 00:06:15 PAGE 4
180 1 JiaRe_Flag=0; //加热标志位清零
181 1 FengShan_Flag=0; //排风标志位清零
182 1 KeyValue=0xff;
183 1
184 1 TimeSet=45;
185 1 TemperatureSet=30; //30
186 1 TemperatureNow=0;
187 1 Display_Select=0;
188 1
189 1 Int_Flag=0;
190 1
191 1 Control_Auto=0;
192 1 FengShan_Time=0;
193 1 JiaRe_Time=0;
194 1 Control_Flag=0;
195 1
196 1
197 1 }
198
199 void initial(void)
200 {
201 1 PCA0MD=0x00;//禁用看门狗
202 1
203 1 P0MDIN=0xF3; //P0.2,P0.3配置为模拟输入(晶振)
204 1 P0MDOUT=0xBE;
205 1 P0SKIP=0x0C; //P0.2,P0.3配置为模拟输入
206 1
207 1 P1MDIN=0xFF; //所有P1口配置为数字I/O口
208 1 P1MDOUT=0xFF;
209 1 P1SKIP=0x00; //推挽输出
210 1
211 1 XBR0=0x00;
212 1 XBR1=0x40;
213 1
214 1 //*/使用内部高频时钟
215 1 OSCICL=0xFF;
216 1 OSCICN=0x80;//系统时钟15/8M
217 1 CLKSEL=0x00;
218 1 //*/
219 1 //*/切换到外部振荡器
220 1 OSCXCN=0x67;
221 1 for(n=0;n<255;n++);
222 1 while(0==(OSCXCN&0x80))
223 1 {
224 2 }
225 1 CLKSEL=0x01;//外部振荡器
226 1 OSCICN=0x00; //禁止内部振荡器
227 1 //*/
228 1 //初始化ADC0
229 1
230 1 //
231 1 IT01CF=0x00; //使P0.0(HD7279_Key)为中断(INT0),低电平有效
232 1
233 1 IT0=1; //边缘触发
234 1 // TCON&=0xFE;
235 1
236 1 EX0=1;
237 1
238 1
239 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -