📄 main.lst
字号:
C51 COMPILER V6.23a MAIN 09/21/2011 10:24:19 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 extern void LCD_DispIni(void);
6 extern void LCD_DispFill(uchar filldata);
7 extern void LCD_DispChar(uchar cy, uchar cx, char dispdata);
8 extern void LCD_DispStr (uchar cy, uchar cx, char *disp_str);
9 extern void LCD_DispHZ (uchar cy, uchar cx, char dispdata);
10 extern void LCD_DispHZStr (uchar cy, uchar cx, char *disp_str);
11
12 extern int readt(void);
13 extern void convert(void);
14 //时间初始化为0
15 uchar sec0=0x30,min0=0x30,hour0=0x30;
16 uchar sec1=0x30,min1=0x30,hour1=0x30;
17 //定时器1
18 //uchar s0=0x30,m0=0x30,h0=0x30;
19 //uchar s1=0x30,m1=0x30,h1=0x30;
20 uint count=0;//用于计数
21 uint count1=0;
22
23 sbit led=P1;
24
25 void timer0(void) interrupt 1 //计数器0,用于浇灌时间
26 {
27 1
28 1 TH0=-25000/256;
29 1 TL0=-25000%256;
30 1 count++;
31 1 if(count==20)//满1秒
32 1 {
33 2 count=0;
34 2 sec0++;//秒加一
35 2 if(sec0==0x3a)
36 2 {
37 3 sec0=0x30;
38 3 sec1++;
39 3 if(sec1==0x36)
40 3 {
41 4 min0++;
42 4 sec0=0x30;
43 4 sec1=0x30;
44 4 if(min0==0x3a)
45 4 {
46 5 min1++;
47 5 if(min1==0x36)
48 5 {
49 6 hour0++;
50 6 min1=0x30;
51 6 min0=0x30;
52 6 if(hour0==0x3a)
53 6 {
54 7 hour1++;
55 7
C51 COMPILER V6.23a MAIN 09/21/2011 10:24:19 PAGE 2
56 7 }
57 6 }
58 5 }
59 4
60 4 }
61 3 }
62 2
63 2 }
64 1
65 1 LCD_DispChar(7, 13,sec0);
66 1 LCD_DispChar(7,12,sec1);
67 1
68 1 LCD_DispChar(7,10,min0);
69 1 LCD_DispChar(7, 9,min1);
70 1 //LCD_DispChar(3,1,hour0);
71 1 //LCD_DispChar(3,0,hour1);
72 1 }
73
74
75 uchar dp[16]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9};//小数部分转换
76 uchar str[6]={0,0,0,0,0,0};
77
78 void time0_Ini(void)
79 {
80 1 TMOD=0x01;
81 1 TH0=-25000/256;
82 1 TL0=-25000%256;
83 1 TR0=1;
84 1 ET0=1;
85 1 EA=1;
86 1
87 1 }
88
89
90
91 void timer1(void) interrupt 3 //计数器0,用于浇灌时间
92 {
93 1
94 1 TH1=-25000/256;
95 1 TL1=-25000%256;
96 1 count1++;
97 1 if(count1==1200)//满1秒
98 1 {
99 2 count1=0;
100 2 TR1=0;
101 2 ET1=0;
102 2 time0_Ini();
103 2 led=0x00;
104 2
105 2 }
106 1
107 1 }
108
109 void time1_Ini(void)
110 {
111 1 TMOD=0x10;
112 1 TH1=-25000/256;
113 1 TL1=-25000%256;
114 1 TR1=1;
115 1 ET1=1;
116 1 EA=1;
117 1
C51 COMPILER V6.23a MAIN 09/21/2011 10:24:19 PAGE 3
118 1 }
119
120 void main()
121 {
122 1 uchar buf[4]={1,0,13,0x55};//常温
123 1 uchar buf1[4]={2,0,13,0x55};//低温
124 1 uchar buf2[4]={3,0,13,0x55};//高温
125 1 uchar buf3[]={4,5,6,7,8,13,0x55};//电磁阀开关
126 1 uchar buf4[]={9,10,11,12,13,0x55};//浇灌时间
127 1 uchar guan[]={8,0x55};
128 1 uchar kai[]={7,0x55};
129 1 uchar hm[]={16,14,16,15,0x55};
130 1 int temp;
131 1 bit zf; //正负标记,0:正数 1:负数
132 1 LCD_DispIni();
133 1
134 1
135 1 while(1)
136 1 {
137 2 LCD_DispHZStr(2, 0, buf3);
138 2 LCD_DispHZStr(3, 0, buf4);
139 2
140 2 convert(); //启动温度转换
141 2 temp=readt(); //读取温度值
142 2
143 2 if(temp<=0x230)
144 2 {
145 3 if(temp<=0x180)
146 3
147 3 {LCD_DispHZStr(0, 0, buf1);
148 4 LCD_DispHZStr(2, 6, guan);
149 4 TR0=0;
150 4 ET0=0;
151 4 EA=0;
152 4 LCD_DispChar(7, 13,'0');
153 4 LCD_DispChar(7,12,'0');
154 4 LCD_DispChar(7,10,'0');
155 4 LCD_DispChar(7, 9,'0');
156 4 led=0xff;
157 4 }
158 3
159 3 else
160 3
161 3 {
162 4
163 4 time0_Ini();
164 4 LCD_DispHZStr(0, 0, buf);
165 4 LCD_DispHZStr(2, 6, kai);
166 4 led=0x00;
167 4 if(min0==0x31)//到一分钟,停止浇灌
168 4 {
169 5 TR0=0;
170 5 ET0=0;
171 5 LCD_DispHZStr(2, 6, guan);
172 5 led=0xff;
173 5 sec0=0x30;
174 5 sec1=0x30;
175 5 min0=0x30;
176 5 min1=0x30;
177 5 time1_Ini();//启动定时器T1
178 5
179 5
C51 COMPILER V6.23a MAIN 09/21/2011 10:24:19 PAGE 4
180 5
181 5 }
182 4
183 4
184 4 }
185 3 }
186 2
187 2 else
188 2 {
189 3 time0_Ini();
190 3 LCD_DispHZStr(0, 0, buf2);
191 3 LCD_DispHZStr(2, 6, kai);
192 3 led=0;
193 3 if(min0==0x32)
194 3 {
195 4 TR0=0;
196 4 ET0=0;
197 4 EA=0;
198 4 led=0xff;
199 4 sec0=0x30;//时间清零
200 4 sec1=0x30;
201 4 min0=0x30;
202 4 min1=0x30;
203 4 }
204 3 }
205 2 zf=0;
206 2
207 2 if(temp<0) //如果温度在0度以下
208 2 { zf=1; //置负数标志
209 3 temp=-temp; //求补
210 3 }
211 2 str[4]=dp[temp&0x0f]+0x30; //求出温度的小数
212 2 temp=temp>>4;
213 2 str[0]=temp/100+0x30; //求出百位
214 2 temp=temp%100;
215 2 str[1]=temp/10+0x30; //求出十位
216 2 str[2]=temp%10+0x30; //求出个位
217 2 str[3]='.';
218 2 if(zf==1) //如果是负数
219 2 { if(str[1]=='0') //如果十位为0
220 3 { str[0]=' '; //显示格式为' -x.x'
221 4 str[1]='-';
222 4 }
223 3 else //如果十位不为0
224 3 str[0]='-'; //显示格式为'-xx.x'
225 3 }
226 2 else //否则,如果是正数
227 2 { if(str[0]=='0') //如果百位、十位都是0
228 3 { if(str[1]=='0') //显示格式为' x.x'
229 4 str[1]=' '; // 如果只有百位为0
230 4 str[0]=' '; //显示格式为' xx.x'
231 4 }
232 3 }
233 2 LCD_DispStr(1.5, 5, str);
234 2
235 2 }
236 1
237 1 }
238
239
240
241
C51 COMPILER V6.23a MAIN 09/21/2011 10:24:19 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 834 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 32 36
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 + -