?? text1.lst
字號:
C51 COMPILER V8.09 TEXT1 01/07/2013 16:32:59 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: E:\keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 sbit s1=P2^0; //數碼管位選控制端
5 sbit s2=P2^1;
6 sbit s3=P2^2;
7 sbit s4=P2^3;
8 sbit s5=P2^4;
9 sbit s6=P2^5;
10 sbit s7=P2^6;
11 /*k1設置時間,k2定時。k1,k2使用不自動彈起按鍵。
12 k3時分秒選擇,k4加數字,k5減數字。*/
13 sbit k1=P1^0;
14 sbit k2=P1^1;
15 sbit k3=P1^2;
16 sbit k4=P1^3;
17 sbit k5=P1^4;
18 uchar count=0,sec,min,hour,ss=0;s=60,m=60,h=24;
19 uchar code mum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽數碼管0-9編碼
20 void delayms(uint k) //延時函數
21 {
22 1 uint i,j;
23 1 for(i=k;i>0;i--)
24 1 for(j=110;j>0;j--);
25 1 }
26 /*通過count獲得hour,min,sec變量值 */
27 void timecontrol()
28 {
29 1 sec++;
30 1 if(sec==60)
31 1 {
32 2 sec=0;
33 2 min++;
34 2 if(min==60)
35 2 {
36 3 min=0;
37 3 hour++;
39 3 hour=0;
40 3 }
41 2 }
42 1 }
43 void display(uchar zs,uchar zm, uchar zh) //數碼管顯示函數
44 {
45 1 s1=1;
46 1 P0=mum[zh/10];
47 1 delayms(5);
48 1 s1=0;
49 1
50 1 s2=1;
51 1 P0=mum[zh%10]&0x7f; // 時的個位加上小數點
52 1 delayms(5);
53 1 s2=0;
54 1
55 1 s3=1;
C51 COMPILER V8.09 TEXT1 01/07/2013 16:32:59 PAGE 2
56 1 P0=mum[zm/10];
57 1 delayms(5);
58 1 s3=0;
59 1
60 1 s4=1;
61 1 P0=mum[zm%10]&0x7f; //分的個位加上小數點
62 1 delayms(5);
63 1 s4=0;
64 1
65 1 s5=1;
66 1 P0=mum[zs/10];
67 1 delayms(5);
68 1 s5=0;
69 1
70 1 s6=1;
71 1 P0=mum[zs%10];
72 1 delayms(5);
73 1 s6=0;
74 1 }
75 void keyscan_settime() //時間設置模塊
76 {
77 1 uchar st,mt,ht;
78 1 if(k1==0)
79 1 {
80 2 delayms(10);
81 2 if(k1==0)
82 2 {
83 3 st=sec,mt=min,ht=hour;
84 3 TR0=0; //關閉定時器
85 3 while(k1==0) //等待用戶按鍵
86 3 {
87 4 display(st,mt,ht);
88 4 if(k3==0)
89 4 {
90 5 delayms(10);
91 5 if(k3==0)
92 5 {
93 6 while(!k3);
94 6 ss++;
95 6 if(ss==3) ss=0;
96 6 }
97 5 }
98 4 /*通過ss選擇時分秒設置*/
99 4 if(k4==0) //加數
100 4 {
101 5 delayms(10);
102 5 if(k4==0)
103 5 {
104 6 while(!k4);
105 6 switch(ss)
106 6 {
107 7 case 0:st++;if(st==60)st=0;break;
108 7 case 1:mt++;if(mt==60)mt=0;break;
109 7 case 2:ht++;if(ht==24)ht=0;break;
110 7 default :;
111 7 }
112 6 }
113 5 }
114 4 if(k5==0) //減數
115 4 {
116 5 delayms(10);
117 5 if(k5==0)
C51 COMPILER V8.09 TEXT1 01/07/2013 16:32:59 PAGE 3
118 5 {
119 6 while(!k5);
120 6 switch(ss)
121 6 {
122 7 case 0:if(st>0)st--;
123 7 else st=0;break;
124 7 case 1:if(mt>0)mt--;
125 7 else mt=0;break;
126 7 case 2:if(ht>0)ht--;
127 7 else ht=0;break;
128 7 default : ;
129 7 }
-
130 6 }
131 5 }
132 4 }
133 3 TR0=1;
134 3 sec=st,min=mt,hour=ht;
135 3 }
136 2 }
137 1 display(sec,min,hour);
138 1 }
139 void keyscan_time() //用戶定時模塊
140 {
141 1 if(k2==0)
142 1 {
143 2 delayms(10);
144 2 if(k2==0)
145 2 {
146 3 s=sec;m=min;h=hour;
147 3 while(k2==0) //開始定時設置
148 3 {
149 4 display(s,m,h);
150 4 if(k3==0)
151 4 {
152 5 delayms(10);
153 5 if(k3==0)
154 5 {
155 6 while(!k3);
156 6 ss++;
157 6 if(ss==3) ss=0;
158 6 }
159 5 }
160 4 /*通過ss選擇時分秒設置*/
161 4 if(k4==0) //加數
162 4 {
163 5 delayms(10);
164 5 if(k4==0)
165 5 {
166 6 while(!k4);
167 6 switch(ss)
168 6 {
169 7 case 0:s++;if(s==60)s=0;break;
170 7 case 1:m++;if(m==60)m=0;break;
171 7 case 2:h++;if(h==24)h=0;break;
172 7 default :;
173 7 }
174 6 }
175 5 }
176 4 if(k5==0) //減數
177 4 {
178 5 delayms(10);
C51 COMPILER V8.09 TEXT1 01/07/2013 16:32:59 PAGE 4
179 5 if(k5==0)
180 5 {
181 6 while(!k5);
182 6 switch(ss)
183 6 {
184 7 case 0:if(s>0)s--;
185 7 else s=0;break;
186 7 case 1:if(m>0)m--;
187 7 else m=0;break;
188 7 case 2:if(h>0)h--;
189 7 else h=0;break;
190 7 default : ;
191 7 }
- }
192 5 }
193 4 }
194 3 }
195 2 }
196 1 }
197 void buz()
198 {
199 1 if((hour==h)&&(min==m)&&(sec==s))
200 1 {
201 2 s7=0;
202 2 delayms(20);
203 2 s7=1;
204 2 }
205 1 }
206 void main()
207 {
208 1 TMOD=0x01; //定時器0工作在方式1
209 1 TH0=(65536-45872)/256; //裝初值,50ms
210 1 TL0=(65536-45872)%256;
211 1 EA=1; //總中斷允許
212 1 ET0=1; //T0中斷允許
213 1 TR0=1; //開定時器0
214 1 while(1)
215 1 {
216 2 keyscan_settime();
217 2 keyscan_time();
218 2 buz();
219 2 }
220 1 }
221 void T0_ms() interrupt 1 //中斷入口程序
222 {
223 1 TH0=(65536-45872)/256; //重新裝初值
224 1 TL0=(65536-45872)%256;
225 1 count++;
226 1 if(count==20) //判定1s時間是否已到
227 1 {
228 2 count=0;
229 2 timecontrol();
230 2 }
231 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 782 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 3
C51 COMPILER V8.09 TEXT1 01/07/2013 16:32:59 PAGE 5
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -