📄 fhy.lst
字号:
C51 COMPILER V8.02 FHY 03/01/2009 08:55:07 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE FHY
OBJECT MODULE PLACED IN fhy.OBJ
COMPILER INVOKED BY: D:\software\keil\C51\BIN\C51.EXE fhy.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<AT89X52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};/*0~9的数码管段码*/
5 char DATA_P3[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
6 uchar hour=0,min=0,sec=0; /*时、分、秒单元清零*/
7 uint deda=0; /*2.5mS计数单元清零*/
8 uchar t_hour=0,t_min=0,t_sec=0; /*闹时时、分、秒单元清零*/
9 uchar d_hour=0,d_min=0,d_sec=0; /*倒计时时、分、秒单元清零*/
10 bit o_f=0; /*闹时启/停标志*/
11 uchar set=0;
12 uint t=0; /*模式设定标志*/
13 uchar m=0,a=0;
14 uint time_counter1 = 0;
15 uint time_counter2 = 0;
16 uint time_counter3 = 0;
17 void delay(uint k); //延时子函数
18 void conv(); /*走时单元转换*/
19 void d_conv();
20 void p_out(); /*判别闹时到否子函数*/
21 void dirve(); /*走时时间输出驱动子函数*/
22 void t_dirve(); /*闹时时间输出驱动子函数*/
23 void d_dirve(); /*倒计时时间输出驱动子函数*/
24 uint almflag1=0; /*闹铃1提示标志*/
25 uint almflag2=0; /*闹铃2提示标志*/
26 uchar dflag=0;
27 unsigned char dis_buff1[6]; /* 走时显示缓冲区,存放要显示的6个字符的段码值*/
28 unsigned char dis_buff2[4]; /* 闹钟显示缓冲区,存放要显示的6个字符的段码值*/
29 unsigned char dis_buff3[6]; /* 倒计时显示缓冲区,存放要显示的6个字符的段码值*/
30 unsigned char posit1=0;
31 unsigned char posit2=0;
32 unsigned char posit3=0;
33
34
35
36 /*闹时启/停子函数*/
37
38
39 void time1_of()
40 { if(P2_1==0)
41 1 { delay(1);
42 2 o_f=1;
43 2 }
44 1
45 1 if(P2_2==0)
46 1 {delay(1);
47 2 o_f=0;
48 2 }
49 1 if(o_f==1)
50 1 {
51 2 P1=0xc0;
52 2 P3=0xdf;
53 2 }
54 1 if(o_f==0)
55 1 {
C51 COMPILER V8.02 FHY 03/01/2009 08:55:07 PAGE 2
56 2 P1=0x8e;
57 2 P3=0xdf;
58 2 }
59 1
60 1 }
61
62
63 /*走时函数*/
64
65
66 void time()
67
68
69 {dirve();
70 1 p_out();
71 1 if(almflag2==1)
72 1 { if(time_counter3==1)
73 2 {P2_4=~P2_4;
74 3 time_counter3=0;
75 3 a++;
76 3 if(a==60)
77 3 {
78 4 a=0;
79 4 almflag2=0;
80 4 }
81 3 }
82 2 }
83 1 if(almflag2==0)
84 1 P2_4=1;
85 1 }
86
87
88 /*定时器T0 2.5mS初始化*/
89
90
91 void timer_init(void)
92
93 {
94 1 TMOD=0x01;//定时器1模式
95 1 TH0=0xf7;//计数初值
96 1 TL0=0x00;
97 1 TR0=1;//开始计数
98 1 ET0=1;//中断使能
99 1 }
100
101
102
103 /*2.5mS定时中断服务子函数*/
104
105
106 timer() interrupt 1
107
108
109 {
110 1 TH0=0xf7;
111 1 TL0=0x00;
112 1 if(++deda>=400)
113 1 { deda=0;
114 2 time_counter1=1; //1秒到
115 2 time_counter2=1;
116 2 time_counter3=1;
117 2 }
C51 COMPILER V8.02 FHY 03/01/2009 08:55:07 PAGE 3
118 1 }
119
120
121
122 /*延时子函数*/
123
124
125
126 void delay(uint k)
127
128
129 {
130 1
131 1 uint i,j;
132 1
133 1 for(i=0;i<k;i++)
134 1
135 1 for(j=0;j<121;j++)
136 1
137 1 {;}
138 1
139 1 }
140
141
142 /*扫描按键子函数*/
143
144
145 void scan_key()
146
147 { delay(1);
148 1 if(P2_3==0) set++;
149 1 if(set>=5) set=0;
150 1 F0:if(P2_3==0) goto F0;
151 1
152 1 }
153
154
155
156 /*时、分、秒单元及走时单元转换*/
157
158
159 void conv()
160 {
161 1 if(time_counter1==1)
162 1 {sec++;time_counter1=0;}
163 1 if(sec==60)
164 1 {min++;sec=0;}
165 1 if(min==60)
166 1 {hour++;min=0;}
167 1 if(hour==24)
168 1 {hour=0;}
169 1
170 1 }
171
172
173
174
175 /*倒计时单元及走时单元转换*/
176
177
178 void d_conv()
179
C51 COMPILER V8.02 FHY 03/01/2009 08:55:07 PAGE 4
180 { t=3600*d_hour+60*d_min+d_sec;
181 1 if(time_counter2==1)
182 1 {
183 2 t--;
184 2 time_counter2=0;
185 2 }
186 1 d_hour=t/3600;
187 1 d_min=t%3600/60;
188 1 d_sec=t%60;
189 1
190 1 if(d_hour==0&&d_min==15&&d_sec==0)
191 1 {almflag1=1;}
192 1
193 1 if(d_hour==0&&d_min==0&&d_sec==0)
194 1 {
195 2 almflag1=1;
196 2 dflag=0;
197 2 }
198 1 }
199
200
201
202 /*调整走时时间*/
203
204
205
206 void time_adj()
207 { if(P2_2==0) delay(1); //按键消抖
208 1 if(P2_2==0) hour++;
209 1 if(hour==24) hour=0;
210 1
211 1 if(P2_1==0) delay(1);
212 1 if(P2_1==0) min++;
213 1 if(min==60) min=0;
214 1
215 1 if(P2_0==0) delay(1);
216 1 if(P2_0==0) sec=0;
217 1 for(m=0;m<30;m++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -