📄 cortrol.lst
字号:
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE CORTROL
OBJECT MODULE PLACED IN Cortrol.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Cortrol.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //****************************************************************************
2 //**********情报板系统控制器程序 ***********
3 //**********单片机STC12C5410AD,晶振18.432MHZ ***********
4 //**********LIUBIN<2008.6.16> ***********
5 //**********当前版本1.0 ***********
6 //****************************************************************************
7 #include <reg52.h>
8 #include <stdio.h>
9 #include <absacc.h>
10 #include <ctype.h>
11 #include <intrins.h>
12 #define ACK 1
13 #define noACK 0
14 #define MEASURE_TEMP 0X03 //测量温度命令
15 #define MEASURE_HUM1 0X05 //测量湿度命令
16 #define TEMP 0 //温度参数标志
17 #define HUMI 1 //湿度参数标志
18 #define LUMM 2 //亮度参数标志
19 #define S_TEMP 3
20 #define DC 4
21 ////***********************************************************************************/
22 sfr ISP_CONTR=0xe7;
23 sfr ADC_CONTR=0XC5;
24 sfr ADC_DATA=0XC6;
25 sfr P1M0=0X91;
26 sfr P1M1=0X92;
27 sbit CHECK1=P1^0;
28 sbit CHECK2=P1^1;
29 sbit CHECK3=P1^2;
30 sbit TH_DATA=P1^4;
31 sbit TH_SCK =P1^5;
32 sbit C=P3^7;
33 sbit DRE=P3^2;
34 sbit E=P1^7;
35 sbit AC1=P2^0;
36 sbit AC2=P2^1;
37 sbit AC3=P2^2;
38 sbit KB0=0XA0;
39 sbit KB1=0XA1;
40 sbit KB2=0XA2;
41 sbit KB3=0XA3;
42 sbit STB=P0^0;
43 sbit CLK=P0^1;
44 sbit DATA0=P0^2;
45 sbit BELL=P0^3;
46 sbit LED=P3^5;
47 sbit IN1=P3^3;
48 //sbit test=P1^6;
49 //****************************************************************************************
50 void delay1(unsigned char d1);
51 void delay(unsigned int i);
52 int ADC3_Switch(void);
53 void POW_Check(void);
54 void Display(signed int display_data,unsigned char dis_flag);
55 void Display_set(signed int display_set_data,unsigned char dis_set_flag);
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 2
56 void serial_Init(void);
57 char s_write_byte(char);
58 void s_transstart(void);
59 unsigned char s_read_byte(char s );
60 signed int measure(unsigned char mode);
61 void key_deal(void);
62 unsigned char key_switch(unsigned char key_d);
63 void keycost_deal(unsigned char TH_flag);
64 void bell(void);
65 void error_bell(void);
66 void TH_Control(void);
67 void Key_scan();
68 void R_Data_with(void);
69 void read_device_status( );
70 void set_TH_Control( );
71 //******************************************************************/
72 typedef unsigned char uchar;
73 uchar xdata CHECK_DATA,POW_DATA;
74 //uchar xdata serial_id;
75 uchar xdata i,j;
76 uchar xdata KeyNumber,kb_data;
77 bit keyboard_flag,keyflag,RT_Flag;
78 uchar xdata error;
79 signed int L_Temp_set,H_Temp_set,H_Hum_set,H_Lum_set;//L_Hum_set,L_Lum_set;
80 int TEM,HUMM,LUM,f1,f2,f3,time_count;
81 char TH_F0,TH_F1,TH_F2,kf;
82 uchar data serial_count,serial_count_T; // serial帧位置计数
83 uchar data serial_length; // serial帧数据长度
84 uchar data serial_sum; // serial帧总校验和
85 uchar data serial_data; // serial帧数据
86 uchar data serial_id; // DEVICE地址
87 unsigned char serial_buf_R[7]; // 接收缓冲区
88 unsigned char serial_buf_T[7]; // 发送缓冲区
89 unsigned char serial_buf2[7]; // 接收缓冲2区
90 /*****************************************************************/
91 /***********************************************************************************/
92 void main(void)
93 {
94 1 serial_Init( );
95 1 while(1)
96 1 {
97 2 LED=0; //点亮指示灯
98 2
99 2 POW_Check( ); //三相电源检测
100 2 TH_Control(); //温湿度控制
101 2
102 2 if(kb_data!=0xff) //按键查询处理
103 2 {
104 3 key_deal();
105 3 KeyNumber=0xff;
106 3 kb_data=0Xff;
107 3 keyflag=0;
108 3 }
109 2 if(TH_F0==1&&RT_Flag==0)
110 2 {
111 3
112 3 TEM=measure(TEMP); //测试温度值
113 3 Display(TEM,TEMP); //显示温度值
114 3
115 3
116 3 }
117 2
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 3
118 2 LED=1; //熄灭指示灯
119 2 if(TH_F1==1&&RT_Flag==0)
120 2 {
121 3 HUMM=measure(HUMI); //测试湿度值
122 3 Display(HUMM,HUMI); //显示湿度值
123 3 }
124 2
125 2 if(TH_F2==1&&RT_Flag==0)
126 2 { LUM=ADC3_Switch(); //测试亮度值
127 3 Display(LUM,LUMM); //显示亮度值
128 3 keyflag=1;
129 3 }
130 2 if(RT_Flag==1)
131 2 {
132 3 R_Data_with();
133 3 serial_count=0; //复位帧计数
134 3 serial_sum=0; //复位校验和
135 3 RT_Flag=0;
136 3 }
137 2 }
138 1 }
139 /*************************************初始化程序********************************
140 ****函数名称:serial_Init() ****************************
141 ****函数功能:设置通讯波特率,定时器0初值 ,变量初值****************************
142 *******************************************************************************/
143 void serial_Init(void)
144 {
145 1 TH1 = 0xFB; // 设定TH1初值 , 波特率 19200
146 1 TL1 = 0xFB; // 设定TL1初值, 波特率 19200
147 1 TH0 = 0Xa5; //定时器0设置初值,定时时间为10MS
148 1 TL0 = 0X00;
149 1 SCON = 0x50; // 设定串口工作方式
150 1 PCON = PCON|0X80;
151 1 TMOD = (TMOD & 0x0f) | 0x21; // 设定T1为波特发生器
152 1 PS = 1; // 串口为高级中断
153 1 ES = 1; // 允许串口中断
154 1 TR1 = 1; // 启动T1
155 1 TR0 = 1;
156 1 ET0 = 1;
157 1 // EX1 = 1;
158 1 // PX1 =1;
159 1 // IT1=1;
160 1 EA = 0;
161 1 DRE = 0; //设485接受
162 1 C=0;
163 1 E=0;
164 1 delay(5);
165 1 serial_id=P2; //读地址
166 1 delay(5);
167 1 E=1;
168 1
169 1 BELL=1;
170 1 error=0;
171 1 // P2=0XF0;
172 1 KeyNumber=0XFF;
173 1 kb_data=0xff;
174 1 keyboard_flag=1;
175 1 RT_Flag=0;
176 1 keyflag=0;
177 1 f1=200;
178 1 f2=0;
179 1 f3=0;
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 4
180 1 TH_F0=0;
181 1 TH_F1=0;
182 1 TH_F2=0;
183 1 time_count=0;
184 1 kf=0;
185 1 serial_count=0;
186 1 serial_count_T=0;
187 1 L_Temp_set=10;
188 1 H_Temp_set=45;
189 1 H_Hum_set=80;
190 1 EA=1;
191 1 }
192 //********************************串口中断**********************************
193 //*******函数功能:处理串口中断,接收数据到缓冲区
194 //******* 发送缓冲区中要发送的数据
195 //**************************************************************************
196 void serial_IR (void) interrupt 4
197 {
198 1 uchar temp;
199 1 if(RI)
200 1 {RI=0;
201 2 //LED=0;
202 2 temp=SBUF;
203 2 if(temp==0x00)
204 2 ISP_CONTR=0X60; //软件复位
205 2 else
206 2 serial_buf_R[serial_count++]=temp; //将数据写入缓存区
207 2 }
208 1 if(TI)
209 1 { TI=0;
210 2 serial_count_T++;
211 2 if(serial_count_T < 7)
212 2 SBUF = serial_buf_T[serial_count_T]; //发送待发数据
213 2 else DRE = 0; //设485接受
214 2 }
215 1
216 1
217 1 }
218
219 //*********************************接收到数据处理函数*******************
220
221 void R_Data_with(void)
222 {// LED=0;
223 1 for(i=0;i<7;i++)
224 1 {
225 2 serial_buf2[i]=serial_buf_R[i];
226 2 }
227 1 for(i=0;i<6;i++)
228 1 {
229 2 serial_sum+=serial_buf_R[i];
230 2 }
231 1 if(serial_sum==serial_buf2[6]) //校验和累加
232 1 {
233 2 if(serial_buf2[1]== serial_id) //校验地址
234 2 {
235 3 if(serial_buf2[2] == 0xA0)
236 3 read_device_status( ); //读取控制状态
237 3 if(serial_buf2[2]==0x50)
238 3 {
239 4 set_TH_Control( ); //设置控制
240 4 // write_flash();
241 4 }
C51 COMPILER V7.20 CORTROL 08/25/2008 11:28:19 PAGE 5
242 3 }
243 2 }
244 1
245 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -