📄 keyb.lst
字号:
C51 COMPILER V8.05a KEYB 04/15/2009 22:04:18 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE KEYB
OBJECT MODULE PLACED IN keyB.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE keyB.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /* 其中键盘扫描程序返回的n数值分别代表 1:P1.0
2 2:P1.1
3 3:P1.2
4 4:P1.3
5 89S51实验板 5:P1.4 */
6
7 #include "reg51.h"
8 #include "stdio.h"
9
10 //外部变量函数
11 sbit BLACK_LIGHT=P2^4; //背光控制
12 //------------------LPH7366.C------------------
13 extern void LPH7366_write_str(unsigned char line,unsigned char row,unsigned char str); //LPH7366任意写入字
-符函数
14 extern void data_tick(unsigned char i_data); //数据拆分函数
15 extern unsigned char ge,shi; //数据拆分
16 //-----------------time.C----------------------
17 extern struct time
18 {
19 unsigned char hour;
20 unsigned char minute;
21 unsigned char second;
22 }local_time,alarm_time,temp_time;
23 extern bit second_flag; //秒信号标志
24 //------------------温度计.C-------------------
25 extern void temp_display(); //温度显示
26 //------------------DS18B20.C------------------
27 extern void temp_data_turn(float in_data); //DS18B20读取温度转换
28 extern signed char temp_TL,temp_TH; //温度上下限
29 extern bit T_sign; //温度正负符号
30 //------------------------------------------
31 //内部变量函数
32 unsigned char keyB(); //键盘扫描
33 void time_switch(); //时间功能切换
34 void temp_switch(); //温度功能切换
35 void temp_set_display(unsigned char option_i); //温度切换显示
36 void temp_set_option_display(signed char temp); //温度切换显示子函数
37 void time_set_display(unsigned char option_i); //时间切换显示
38 void time_set_option_display(struct time i); //时间切换显示子函数
39 void key_time_setdone(struct time *i); //时间调整
40 void key_temp_setdone(unsigned char *i); //温度调整
41 void flash_co(unsigned char set_i); //闪烁控制函数
42
43 bit key_flag=1; //键盘标志位
44 bit flash=0; //闪烁总开关
45 bit flash1; //闪烁控制位
46 bit flash2; //闪烁控制位
47 bit flash3; //闪烁控制位
48 extern bit ring_flag; //闹铃
49 unsigned char data key;
50 unsigned char key_option_i; //具体哪位调整 共有3位可调
51 unsigned char temp_TLTH_dis; //显示用TH_dis,TL_dis
52
53
54 /******************************键盘函数********************************/
C51 COMPILER V8.05a KEYB 04/15/2009 22:04:18 PAGE 2
55 /*函数原型:unsigned char keyB()
56 /*函数功能:键盘扫描
57 /*输入参数:无
58 /*输出参数:key (根据该数值进行判断是哪个键被按下)
59 /*调用模块:无
60
61 /**********************************************************************/
62 unsigned char keyB() //键盘扫描子程序
63 { unsigned char data i;
64 1 i=P1; //读P1口
65 1 i=i|0xe0; //屏蔽高3位 为1
66 1 switch(i)
67 1 {case 0xfe: key=1;
68 2 break;
69 2 case 0xfd: key=2;
70 2 break;
71 2 case 0xfb: key=3;
72 2 break;
73 2 case 0xf7: key=4;
74 2 break;
75 2 case 0xef: key=5;
76 2 break;
77 2 case 0xff: key=6;
78 2 default: key=0;
79 2 break;
80 2 }
81 1 return(key);
82 1 }
83
84 /****************************键盘主函数********************************/
85 /*函数原型:void key_mian()
86 /*函数功能:最上级键盘操作
87 /*输入参数:无
88 /*输出参数:无
89 /*调用模块:keyB(),time_set(),temp_set()
90
91 /**********************************************************************/
92 void key_main()
93 {
94 1 keyB();
95 1
96 1 if(key==1&&key_flag) //时间
97 1 {
98 2 key_flag=0;
99 2 time_switch(); //时间功能切换
100 2 }
101 1 if(key==2&&key_flag) //温度
102 1 {
103 2 key_flag=0;
104 2 temp_switch(); //温度功能切换
105 2 }
106 1
107 1 if(key==4&&key_flag) //背光控制
108 1 {
109 2 key_flag=0;
110 2 BLACK_LIGHT=~BLACK_LIGHT;
111 2 }
112 1
113 1 if(key==5&&key_flag) //闹铃控制
114 1 {
115 2 key_flag=0;
116 2 ring_flag=~ring_flag;
C51 COMPILER V8.05a KEYB 04/15/2009 22:04:18 PAGE 3
117 2 }
118 1
119 1 if(key==3||key==0) //键盘标志位复位
120 1 {
121 2 key_flag=1;
122 2 }
123 1 flash=0;
124 1 flash_co(0);
125 1 }
126
127 /***************************时间功能切换函数***************************/
128 /*函数原型:void time_switch()
129 /*函数功能:时间功能切换
130 /*输入参数:无
131 /*输出参数:无
132 /*调用模块:keyB(),key_time_setdone(),LPH7366_write_str(),time_set_display()
133
134 /**********************************************************************/
135 void time_switch()
136 {
137 1 key_option_i=1; //键盘按键计数器
138 1 while(1)
139 1 {keyB();
140 2 //------------3号键---------------------
141 2 if(key==3&&key_flag) //功能切换
142 2 {
143 3 key_flag=0;
144 3 key_option_i++;
145 3 if(key_option_i==4)
146 3 key_option_i=1;
147 3 }
148 2 //-----------4号键-------------------
149 2 if(key==4&&key_flag) //背光控制
150 2 {
151 3 key_flag=0;
152 3 BLACK_LIGHT=~BLACK_LIGHT;
153 3 }
154 2 //-----------5号键-------------------
155 2 if(key==5&&key_flag) //确定
156 2 {
157 3 key_flag=0;
158 3 if(key_option_i==1)
159 3 key_time_setdone(&local_time); //时间功能的具体那项功能设置 1:local_time 2:alarm_time 3:temp_time
160 3 if(key_option_i==2)
161 3 key_time_setdone(&alarm_time);
162 3 if(key_option_i==3)
163 3 key_time_setdone(&temp_time);
164 3 LPH7366_write_str(6,9,0x00); //显示空格
165 3 LPH7366_write_str(6,10,0x00); //显示空格
166 3 break;
167 3 }
168 2 //---------其余键--------------------
169 2 if(key==1||key==2||key==0)
170 2 {
171 3 key_flag=1;
172 3 }
173 2 //-----------------------------------
174 2 time_set_display(key_option_i); //功能切换时显示
175 2 }
176 1 }
177
178 /***************************温度功能切换函数***************************/
C51 COMPILER V8.05a KEYB 04/15/2009 22:04:18 PAGE 4
179 /*函数原型:void temp_switch()
180 /*函数功能:温度功能切换
181 /*输入参数:无
182 /*输出参数:无
183 /*调用模块:keyB(),key_temp_setdone(),temp_set_display()
184
185 /**********************************************************************/
186 void temp_switch()
187 {
188 1 key_option_i=1; //键盘按键计数器
189 1 while(1)
190 1 {keyB();
191 2 //------------3号键---------------------
192 2 if(key==3&&key_flag) //功能切换
193 2 {
194 3 key_flag=0;
195 3 key_option_i++;
196 3 if(key_option_i==3)
197 3 key_option_i=1;
198 3 }
199 2 //-----------4号键-------------------
200 2 if(key==4&&key_flag) //背光控制
201 2 {
202 3 key_flag=0;
203 3 BLACK_LIGHT=~BLACK_LIGHT;
204 3 }
205 2 //-----------5号键-------------------
206 2 if(key==5&&key_flag) //确定
207 2 {
208 3 key_flag=0;
209 3 if(key_option_i==1)
210 3 key_temp_setdone(&temp_TH); //时间功能的具体那项功能设置 1:TH 2:TL
211 3 if(key_option_i==2)
212 3 key_temp_setdone(&temp_TL);
213 3 LPH7366_write_str(3,6,0); //显示空格
214 3 LPH7366_write_str(3,7,0); //显示空格
215 3 break;
216 3 }
217 2 //----------其余键--------------------
218 2 if(key==1||key==2||key==0)
219 2 {
220 3 key_flag=1;
221 3 }
222 2 //-----------------------------------
223 2 temp_set_display(key_option_i); //功能切换时显示
224 2 }
225 1 }
226
227 /**************************时间切换显示函数****************************/
228 /*函数原型:void time_set_display(unsigned char option_i)
229 /*函数功能:时间切换显示
230 /*输入参数:无
231 /*输出参数:无
232 /*调用模块:time_set_option_display(),LPH7366_write_str(),
233
234 /**********************************************************************/
235 void time_set_display(unsigned char option_i)
236 {
237 1 if(option_i==1) //local_time
238 1 {
239 2 time_set_option_display(local_time);
240 2 LPH7366_write_str(6,9,0x00); //显示空格
C51 COMPILER V8.05a KEYB 04/15/2009 22:04:18 PAGE 5
241 2 LPH7366_write_str(6,10,35); //显示C
242 2 }
243 1
244 1 if(option_i==2) //alarm_time
245 1 {
246 2 time_set_option_display(alarm_time);
247 2 LPH7366_write_str(6,9,0x00); //显示空格
248 2 LPH7366_write_str(6,10,33); //显示A
249 2 }
250 1
251 1 if(option_i==3) //temp_time
252 1 {
253 2 time_set_option_display(temp_time);
254 2 LPH7366_write_str(6,9,0x00); //显示空格
255 2 LPH7366_write_str(6,10,52); //显示T
256 2 }
257 1 }
258
259 /***************************时间切换显示子函数************************/
260 /*函数原型:void time_set_option_display(struct time i)
261 /*函数功能:时间切换显示子函数
262 /*输入参数:无
263 /*输出参数:无
264 /*调用模块:data_tick(),LPH7366_write_str()
265
266 /**********************************************************************/
267 void time_set_option_display(struct time i)
268 {
269 1 data_tick(i.hour); //hour
270 1 if(flash1==1)
271 1 {
272 2 if(second_flag==1)
273 2 {
274 3 LPH7366_write_str(6,1,(shi+16));
275 3 LPH7366_write_str(6,2,(ge+16));
276 3 }
277 2 else
278 2 {
279 3 LPH7366_write_str(6,1,60); //55
280 3 LPH7366_write_str(6,2,60);
281 3 }
282 2 }
283 1 else
284 1 {
285 2 LPH7366_write_str(6,1,(shi+16));
286 2 LPH7366_write_str(6,2,(ge+16));
287 2 }
288 1
289 1 if(second_flag==1)
290 1 LPH7366_write_str(6,3,26); //:
291 1 else
292 1 LPH7366_write_str(6,3,0); //
293 1
294 1 data_tick(i.minute); //minute
295 1 if(flash2==1)
296 1 {
297 2 if(second_flag==1)
298 2 {
299 3 LPH7366_write_str(6,4,(shi+16));
300 3 LPH7366_write_str(6,5,(ge+16));
301 3 }
302 2 else
C51 COMPILER V8.05a KEYB 04/15/2009 22:04:18 PAGE 6
303 2 {
304 3 LPH7366_write_str(6,4,60); //55
305 3 LPH7366_write_str(6,5,60);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -