?? 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 + -