📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 01/12/2008 17:07:08 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************
2
3 带红外控制的LCD时间控制器
4
5 zhaojun 2007/12/20
6
7 ******************************************************/
8 #include"config.h" // 系统设置
9
10
11 main()
12 {
13 1 LCMInit();//初始化LCD
14 1 Clearmen();//初始化系统
15 1 Mychar();//写入自定义字符
16 1 while(1)
17 1 {
18 2 if(CLED==0)// 有闹铃标志
19 2 {
20 3 Display(2);
21 3 Display(6);
22 3 Ctrlaction();//到点比较函数
23 3 }
24 2 else // 无闹铃标志
25 2 {
26 3 Display(1);
27 3 Display(6);
28 3 }
29 2 if(DLED==0)Integral_point_time();//整点报时
30 2 //
31 2 Keyscan(); // 手动按键扫描
32 2
33 2 Telecontrol(); // 遥控按键扫描
34 2 }
35 1 }
36 /****************************** 遥控部分 ***********************************************/
37
38 /*****************************************************
39 函 数 名:void Telecontrol(void)
40 功 能:遥控按键扫描
41 说 明:
42 入口参数:
43 返 回 值:无
44 *****************************************************/
45 void Telecontrol(void)
46 {
47 1 if(IRCOM[2]==0x15)//TIME:当前时间设置
48 1 {
49 2 IRCOM[2]=0xff;
50 2 Tp_set_time();
51 2 }
52 1 if(IRCOM[2]==0x1c)//R/L:整点报时
53 1 {
54 2 IRCOM[2]=0xff;
55 2 DLED=~DLED;
C51 COMPILER V7.20 MAIN 01/12/2008 17:07:08 PAGE 2
56 2 }
57 1 if(IRCOM[2]==0x0c)//P/N:闹铃控制开关
58 1 {
59 2 IRCOM[2]=0xff;
60 2 CLED=~CLED;
61 2 }
62 1 if(IRCOM[2]==0x16)//RETURN:闹铃设置
63 1 {
64 2 IRCOM[2]=0xff;
65 2 Tp_set_ctrltime();
66 2 }
67 1 if(IRCOM[2]==0x16)//||:继电器
68 1 {
69 2 IRCOM[2]=0xff;
70 2 RELAY=~RELAY;// 继电器取反
71 2 YLED=~YLED; // 指示灯指示
72 2 }
73 1 }
74
75 /*****************************************************
76 函 数 名:void Tp_set_time(void)
77 功 能:遥控设置时间
78 说 明:
79 入口参数:
80 返 回 值:无
81 *****************************************************/
82 void Tp_set_time(void)
83 {
84 1 bit mark=1;
85 1 ET0=0;TR0=0; // 关定时器0
86 1 do
87 1 {
88 2 NewTime[2]=0x3a;NewTime[5]=0x3a;//写入冒号
89 2 sec=0;NewTime[6]=0x30;NewTime[7]=0x30;//秒钟值放入显示缓冲
90 2 Display(3);Display(6);
91 2 if(IRCOM[2]==0x0e)//小时加1
92 2 {
93 3 IRCOM[2]=0xff;
94 3 hour++;NewTime[0]=hour/10+0x30;NewTime[1]=hour%10+0x30;//小时值放入显示缓冲
95 3 Display(3);Display(6);
96 3 if(hour>=24)
97 3 {
98 4 hour=0;NewTime[0]=0x30;NewTime[1]=0x30;
99 4 Display(3);Display(6);
100 4 }
101 3 }
102 2 if(IRCOM[2]==0x1a)// 分钟加1
103 2 {
104 3 IRCOM[2]=0xff;
105 3 min++;NewTime[3]=min/10+0x30;NewTime[4]=min%10+0x30;//小时值放入显示缓冲
106 3 Display(3);Display(6);
107 3 if(min>=60)//分钟加
108 3 {
109 4 min=0;NewTime[3]=0x30;NewTime[4]=0x30;//分钟值放入显示缓冲
110 4 Display(3);Display(6);
111 4 }
112 3 }
113 2 if(IRCOM[2]==0x0f)//结束设置
114 2 {
115 3 IRCOM[2]=0xff;
116 3 ET0=1;TR0=1;mark=0;//调时结束,开定时器0
117 3 }
C51 COMPILER V7.20 MAIN 01/12/2008 17:07:08 PAGE 3
118 2 }while(mark);
119 1 }
120
121 /*****************************************************
122 函 数 名:void Tp_set_ctrltime(void)
123 功 能:设置闹铃时间
124 说 明:
125 入口参数:无
126 返 回 值:无
127 *****************************************************/
128 void Tp_set_ctrltime(void)
129 {
130 1 bit mark=1;
131 1 do
132 1 {
133 2 Display(4);Display(7);
134 2 if(IRCOM[2]==0x0A) // 小时加
135 2 {
136 3 IRCOM[2]=0xff;
137 3 DelayMs(5);while(K2==0);//消抖,等按键K2释放
138 3 armhour++;CtrlTime[0]=armhour/10+0x30;CtrlTime[1]=armhour%10+0x30;//小时清零
139 3 Display(4);Display(7);
140 3 if(armhour>=24)
141 3 {
142 4 armhour=0;CtrlTime[0]=0x30;CtrlTime[1]=0x30;
143 4 Display(4);Display(7);
144 4 }
145 3 }
146 2 if(IRCOM[2]==0x1E) // 分钟加
147 2 {
148 3 IRCOM[2]=0xff;
149 3 DelayMs(5);while(K3==0);//消抖,等按键K3释放
150 3 armmin++;CtrlTime[3]=armmin/10+0x30;CtrlTime[4]=armmin%10+0x30;
151 3 Display(4);Display(7);
152 3 if(armmin>=60)//分钟加
153 3 {
154 4 armmin=0;CtrlTime[3]=0x30;CtrlTime[4]=0x30;//分钟清零
155 4 Display(4);Display(7);
156 4 }
157 3 }
158 2 if(IRCOM[2]==0x0F) // 调时结束
159 2 {
160 3 IRCOM[2]=0xff;
161 3 mark=0; // 调时结束,开定时器0
162 3 }
163 2 }while(mark);
164 1 }
165 /*****************************************************
166 函 数 名:void Ctrlaction(void)
167 功 能:闹铃时间比较函数
168 说 明:
169 入口参数:
170 返 回 值:无
171 *****************************************************/
172 void Ctrlaction(void)
173 {
174 1 if(armhour==hour) //如果小时相等,则比较分钟
175 1 {
176 2 if(armmin==min) // 如果分钟相等
177 2 {
178 3 CLED=1;
179 3 RELAY=~RELAY;// 继电器去取反
C51 COMPILER V7.20 MAIN 01/12/2008 17:07:08 PAGE 4
180 3 YLED=~YLED; // 继电器工作指示灯取反
181 3 Display(5);Display(7);//显示闹铃时间
182 3 Led_hint(); // LED闪烁
183 3 Buzzer();Buzzer();// 蜂鸣器报警
184 3 Delay400Ms();Delay400Ms();
185 3 Buzzer();// 蜂鸣器报警
186 3 Delay400Ms();Delay400Ms();
187 3 }
188 2 }
189 1 }
190 /****************** 手动控制部分 *******************************
-*****/
191
192 /*****************************************************
193 函 数 名:void Keyscan(void)
194 功 能:按键扫描
195 说 明:不同的按键进入不同的项目
196 入口参数:
197 返 回 值:无
198 *****************************************************/
199 void Keyscan(void)
200 {
201 1 /* ******** 当前时间设置 *******************/
202 1 if(K1==0)
203 1 {
204 2 DelayMs(5);while(K1==0);//消抖
205 2 Set_time(); //调用设置当前时间函数
206 2 }
207 1
208 1 /********** 整点报时控制开关 ******************/
209 1 if(K2==0)
210 1 {
211 2 DelayMs(5);while(K2==0);//消抖
212 2 DLED=~DLED;//整点报时标志取反
213 2
214 2 }
215 1
216 1 /******* 闹铃控制开关 *********************/
217 1 if(K3==0)
218 1 {
219 2 DelayMs(5);while(K3==0);//消抖
220 2 Ctrl_on_or_off();//闹铃控制开关
221 2 }
222 1
223 1 /******* 闹铃时间设置 ***********************/
224 1 if(K4==0)
225 1 {
226 2 DelayMs(5);while(K4==0);//消抖
227 2 Set_ctrltime();//设置闹铃时间函数
228 2 }
229 1
230 1 /******** 手动开关 ********************/
231 1 /* if(K5==0)
232 1 {
233 1 DelayMs(5);while(K5==0);//消抖
234 1 Manual();
235 1 } */
236 1 }
237 /*****************************************************
238 函 数 名:void Set_time(void)
239 功 能:设置当前时间:K2-小时加1;K3-分钟加1;K1-推出
240 说 明:在正常工作情况下按K1键,进入此函数
C51 COMPILER V7.20 MAIN 01/12/2008 17:07:08 PAGE 5
241 入口参数:无
242 返 回 值:无
243 *****************************************************/
244 void Set_time(void)
245 {
246 1 bit mark=1;
247 1 ET0=0;TR0=0; // 关定时器0
248 1 do
249 1 {
250 2 NewTime[2]=0x3a;NewTime[5]=0x3a;//写入冒号
251 2 sec=0;NewTime[6]=0x30;NewTime[7]=0x30;//秒钟值放入显示缓冲
252 2 Display(3);Display(6);
253 2 if(K2==0) // 小时加
254 2 {
255 3 Buzzer();DelayMs(5);while(K2==0);//消抖,等按键K2释放
256 3 hour++;NewTime[0]=hour/10+0x30;NewTime[1]=hour%10+0x30;//小时值放入显示缓冲
257 3 Display(3);Display(6);
258 3 if(hour>=24)
259 3 {
260 4 hour=0;NewTime[0]=0x30;NewTime[1]=0x30;
261 4 Display(3);Display(6);
262 4 }
263 3 }
264 2 if(K3==0)// 分钟加
265 2 {
266 3 Buzzer();DelayMs(5);while(K3==0); //消抖,等按键K3释放
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -