?? hour.lst
字號:
C51 COMPILER V6.23a HOUR 09/08/2003 17:01:40 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE HOUR
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE hour.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #pragma SRC
2 #include <stdio.h>
3 #include <reg51.h>
4
5
6 #define TRUE 1
7 #define FALSE 0
8
9 #define DELAY_VALUE 3
10 #define DELAY_VALUE_EXTRA 10100
11
12
13
14 #define PinDrvKey1 P1_0
15 #define PinDrvKey2 P1_1
16 #define PinDrvKey3 P1_2
17 #define PinDrvKey4 P1_3
18 //鍵盤掃描的驅動線
19
20
21 #define PinScanKey1 P1_4
22 #define PinScanKey2 P1_5
23 #define PinScanKey3 P1_6
24 #define PinScanKey4 P1_7
25 //鍵盤掃描的信號獲取線
26
27 #define PinSegA P2_0
28 #define PinSegB P2_1
29 #define PinSegC P2_2
30 #define PinSegD P2_3
31 //七段碼的數據線
32
33 #define PinSelectA P2_4
34 #define PinSelectB P2_5
35 #define PinSelectC P2_6
36 //選擇器的數據位
37
38 #define PinSelectCS P2_4
39 //選擇器的片選位
40
41 #define LedSelect0 0x80
42 #define LedSelect1 0x90
43 #define LedSelect2 0xa0
44 #define LedSelect3 0xb0
45 #define LedSelect4 0xc0
46 #define LedSelect5 0xd0
47
48 #define PinLamp P0_0
49 //指示燈驅動管腳
50 #define PinSpeaker P0_1
51 //蜂鳴器驅動管腳
52
53 sbit P0_0=P0^0;
54 sbit P0_1=P0^1;
55 sbit P0_2=P0^2;
C51 COMPILER V6.23a HOUR 09/08/2003 17:01:40 PAGE 2
56 sbit P0_3=P0^3;
57 sbit P0_4=P0^4;
58 sbit P0_5=P0^5;
59 sbit P0_6=P0^6;
60 sbit P0_7=P0^7;
61
62 sbit P1_0=P1^0;
63 sbit P1_1=P1^1;
64 sbit P1_2=P1^2;
65 sbit P1_3=P1^3;
66 sbit P1_4=P1^4;
67 sbit P1_5=P1^5;
68 sbit P1_6=P1^6;
69 sbit P1_7=P1^7;
70
71 sbit P2_0=P2^0;
72 sbit P2_1=P2^1;
73 sbit P2_2=P2^2;
74 sbit P2_3=P2^3;
75 sbit P2_4=P2^4;
76 sbit P2_5=P2^5;
77 sbit P2_6=P2^6;
78 sbit P2_7=P2^7;
79
80
81 void initial(void);
82 //初始化子程序
83 void delay(short i);
84 //延時子程序
85 void display(unsigned char i,unsigned char num);
86 //顯示子程序,其中變量i,num含義為在第i個數碼管顯示數字num.
87 unsigned char keyscan(void);
88 //鍵盤掃描子程序
89 void updatee(void);
90
91 unsigned char h1=0;
92 unsigned char h0=0;
93 unsigned char m1=0;
94 unsigned char m0=0;
95 unsigned char s1=0;
96 unsigned char s0=0;
97 unsigned char seth1=0;
98 unsigned char seth0=0;
99 unsigned char setm1=0;
100 unsigned char setm0=0;
101 unsigned char sets1=0;
102 unsigned char sets0=0; //設定鬧鐘的鬧定時間,設定為鬧鐘時間,鬧鈴時間定為1分鐘
103
104 void main(void)
105 {
106 1 unsigned char status;
107 1 unsigned char keyword;
108 1 initial();
109 1 //鍵盤驅動信號,發光二極管,以及蜂鳴器都設在無效狀態
110 1 for(;;)
111 1 {
112 2 switch(status)
113 2 {
114 3 case 0:
115 3 keyword=keyscan();
116 3 if(keyword==16)
117 3 {
C51 COMPILER V6.23a HOUR 09/08/2003 17:01:40 PAGE 3
118 4 if(h1==seth1&&h0==seth0&&m1==setm1&&m0==setm0)
119 4 {
120 5 PinSpeaker=FALSE;
121 5 delay(DELAY_VALUE);
122 5 PinSpeaker=TRUE; //到達鬧鐘定時時間,蜂鳴器響
123 5 }
124 4 else
125 4 delay(DELAY_VALUE_EXTRA);
126 4 updatee();
127 4 }
128 3 else
129 3 if(keyword==11)status=1; //0狀態為計時狀態,1狀態為停止狀態
130 3 else
131 3 {
132 4 PinSpeaker=FALSE;
133 4 delay(DELAY_VALUE);
134 4 PinSpeaker=TRUE; //輸入有錯,蜂鳴器響
135 4 }
136 3 break;
137 3 case 1:
138 3 keyword=keyscan();
139 3 if(keyword==10)status=0;
140 3 else if(keyword==12)status=2;//2狀態為設置初值狀態;
141 3 else if(keyword==13){h0=0;
142 4 h1=0;
143 4 s0=0;
144 4 s1=0;
145 4 m0=0;
146 4 m1=0;}//清零
147 3 else if(keyword==14)status=3;//3狀態為設置鬧鐘時間狀態;
148 3 else
149 3 {
150 4 PinSpeaker=FALSE;
151 4 delay(DELAY_VALUE);
152 4 PinSpeaker=TRUE; //輸入有錯,蜂鳴器響
153 4 }
154 3 break;
155 3 case 2:
156 3 keyword=keyscan();
157 3 if(keyword==10&&s1<=5&&m1<=5&&(h1*10+h0)<24)
158 3 status=0;
159 3 else if(keyword==11&&s1<=5&&m1<=5&&(h1*10+h0)<24)
160 3 status=1;
161 3 else if(keyword<10&&keyword>=0) //輸入的是數字鍵
162 3 {
163 4 h1=h0;
164 4 h0=m1;
165 4 m1=m0;
166 4 m0=s1;
167 4 s1=s0;
168 4 s0=keyword;
169 4 updatee(); //輸入的數字鍵從低位起往左移
170 4 }
171 3 else
172 3 {
173 4 PinSpeaker=FALSE;
174 4 delay(DELAY_VALUE);
175 4 PinSpeaker=TRUE; //輸入有錯,蜂鳴器響
176 4 }
177 3 case 3:
178 3 keyword=keyscan();
179 3 if(keyword==10&&sets1<=5&&setm1<=5&&(seth1*10+seth0)<24)
C51 COMPILER V6.23a HOUR 09/08/2003 17:01:40 PAGE 4
180 3 status=0;
181 3 else if(keyword==11&&sets1<=5&&setm1<=5&&(seth1*10+seth0)<24)
182 3 status=1;
183 3 else if(keyword<10&&keyword>=0) //輸入的是數字鍵
184 3 {
185 4 seth1=seth0;
186 4 seth0=setm1;
187 4 setm1=setm0;
188 4 setm0=sets1;
189 4 sets1=sets0;
190 4 sets0=keyword;
191 4 updatee(); //輸入的數字鍵從低位起往左移
192 4 }
193 3 else
194 3 {
195 4 PinSpeaker=FALSE;
196 4 delay(DELAY_VALUE);
197 4 PinSpeaker=TRUE; //輸入有錯,蜂鳴器響
198 4 }
199 3
200 3 }
201 2 }
202 1
203 1 }
204
205 void initial(void)
206 {
207 1 P1_0=FALSE;
208 1 P1_1=FALSE;
209 1 P1_2=FALSE;
210 1 P1_3=FALSE; //鍵盤驅動信號都設為低,避免干擾。
211 1 P0_0=TRUE; //發光二極管設為不亮
212 1 P0_1=TRUE; //蜂鳴器不響
213 1 }
214
215 void delay(short i) //延遲子程序,為精確計時,需要用匯編語言來做。R6R7剛好存的是i的值
216 {
217 1 short ii;
218 1 ii=i;
219 1 #pragma asm
220 1 X_delay:
221 1 USING 0
222 1 CLR A
223 1 MOV R4,A
224 1 MOV R5,A
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -