📄 定时.lst
字号:
C51 COMPILER V7.50 定时 06/27/2006 21:20:58 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 定时
OBJECT MODULE PLACED IN 定时.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 定时.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #define uchar unsigned char
3 uchar cout, k,i,n;
4 uchar miao = 0;
5 uchar fen = 0;
6 uchar hour =0;
7 uchar d_hour,d_fen,d_miao;
8 sbit P3_0=P3^0;
9 sbit P3_1=P3^1;
10 sbit P3_2=P3^2;
11 sbit P3_7=P3^7;
12 bit baojing,flag_ma,t;
13 uchar duanma[11] =
14 {
15 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff
16 };
17 uchar weima[6] =
18 {
19 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf
20 };
21 uchar huanchun[6];
22 void Delay(uchar i)
23 {
24 1 do{ if(flag_ma==0) //显示标志,为0显示设置定时时间,
25 2 { huanchun[0] = miao % 10;
26 3 huanchun[1] = miao / 10;
27 3 huanchun[2] = fen % 10;
28 3 huanchun[3] = fen / 10;
29 3 huanchun[4] = hour % 10;
30 3 huanchun[5] = hour / 10;
31 3 }
32 2 else //显示标志,为1显示设置定时时长,
33 2 { huanchun[0] = d_miao % 10;
34 3 huanchun[1] = d_miao / 10;
35 3 huanchun[2] = d_fen% 10;
36 3 huanchun[3] = d_fen / 10;
37 3 huanchun[4] = d_hour % 10;
38 3 huanchun[5] = d_hour / 10;
39 3 }
40 2 }while(i--);
41 1 }
42 fuwei() //复位操作
43 { miao=0;fen=0;hour=0;
44 1 d_hour=0;d_fen=0;d_hour=0;
45 1 }
46 void dingshi()interrupt 1 //定时50ms //到计数
47 {
48 1 TH0 = 0x4c;
49 1 TL0 = 0x00;
50 1 cout++;
51 1 if (cout == 20)
52 1 {
53 2 miao--;
54 2 cout=0;
55 2 if (miao==0xff)
C51 COMPILER V7.50 定时 06/27/2006 21:20:58 PAGE 2
56 2 {
57 3 miao=59;
58 3 fen--;
59 3 if (fen==0xff)
60 3 {
61 4 fen=59;
62 4 hour--;
63 4 if (hour==0xff)
64 4 hour=23;
65 4 }
66 3 }
67 2 if(miao==0&&fen==0&&hour==0)
68 2 { baojing=1;//声音报警标志
69 3 P3_2=0;//声音报警
70 3 P3_7=0; //控制信号产生控制为低电平
71 3 if(fen==58||t==1)t=0,P3_2=1;//报警1分钟,或到定时时间后停止报警
72 3 }
73 2 if(miao==(60-d_miao)&&fen==(59-d_fen)&&hour==(23-d_hour))
74 2 { P3_7=1; //
75 3 t=1;
76 3 TR0=0;
77 3 fuwei(); //显示都为0
78 3 }
79 2 }
80 1 }
81 void xianshi()interrupt 3 //中断显示 2 MS
82 {
83 1 TH1=0Xf8; //显示定时两毫秒。
84 1 TL1=0Xcc;
85 1 P1 = weima[i];
86 1 P2 = duanma[huanchun[i]];
87 1 i++;
88 1 if(i==6)i=0;
89 1 if(fen==58||t==1)P3_2=1; //到1分钟或定时到后停止报警
90 1 }
91 unsigned char scankey() //键盘扫描
92 {
93 1 unsigned char k,down,up;
94 1 P0=0x00;
95 1 P0=0xF0;
96 1 k=P0;
97 1 if(k==0xF0)return 0xFF;
98 1 Delay(50); ////////////
99 1 down=3;
100 1 while(k&0x80)down--,k<<=1;
101 1 P0=0x00;
102 1 P0=0x0F;
103 1 k=P0;
104 1 if(k==0x0F)return 0xFF;
105 1 up=0;
106 1 while(k&0x01)up+=4,k>>=1;
107 1 return up+down;
108 1 }//scankey
109 songjian() //松键操作
110 { uchar k;
111 1 while(1)
112 1 { k=scankey();
113 2 if(k==scankey()&&k==0xff)break;
114 2 }
115 1 }
116 main()
117 {
C51 COMPILER V7.50 定时 06/27/2006 21:20:58 PAGE 3
118 1 TMOD = 0X01; //初始化定时器T0 T1
119 1 TH0 = 0XEE;
120 1 TL0 = 0X00;
121 1 TH1=0Xf8;
122 1 TL1=0Xcc;
123 1 EA = 1;
124 1 ET0 = 1;
125 1 TR0 = 0;
126 1 ET1 = 1;
127 1 TR1 = 1;
128 1 P3_7=1;//控制信号初始为高电平
129 1 while(1)
130 1 {
131 2 k=scankey();
132 2 Delay(100);
133 2 if(k==scankey()&&k!=0xff)
134 2 {
135 3 songjian();
136 3 if(k==15)
137 3 { TR0=0;
138 4 P3_0=0;
139 4 flag_ma=0;
140 4 while(1)
141 4 {
142 5 k=scankey();
143 5 Delay(100);
144 5 if(k==scankey()&&k!=0xff)
145 5 { songjian();
146 6 if(k==14){P3_0=1;break;}
147 6 if(k<6)
148 6 { switch(k)
149 7 { case 0: miao++;
150 8 if(miao==60)miao=0;
151 8 break;
152 8 case 1: miao--;
153 8 if(miao==0xff)miao=59;
154 8 break;
155 8 case 2: fen++;
156 8 if(fen==60)fen=0;
157 8 break;
158 8 case 3: fen--;
159 8 if(fen==0xff)fen=59;
160 8 break;
161 8 case 4: hour++;
162 8 if(hour==24)hour=0;
163 8 break;
164 8 case 5: hour--;
165 8 if(hour==0xff)hour=23;
166 8 break;
167 8 }
168 7 }
169 6 }
170 5 }
171 4 }
172 3
173 3 if(k==13)
174 3 { TR0=0;
175 4 P3_0=0;
176 4 flag_ma=1;
177 4 while(1)
178 4 {
179 5 k=scankey();
C51 COMPILER V7.50 定时 06/27/2006 21:20:58 PAGE 4
180 5 Delay(100);
181 5 if(k==scankey()&&k!=0xff)
182 5 { songjian();
183 6 if(k==12){P3_0=1;break;}
184 6 if(k<6)
185 6 {
186 7 switch(k)
187 7 { case 0: d_miao++;
188 8 if(d_miao==60)d_miao=0;
189 8 break;
190 8 case 1: d_miao--;
191 8 if(d_miao==0xff)d_miao=59;
192 8 break;
193 8 case 2: d_fen++;
194 8 if(d_fen==60)d_fen=0;
195 8 break;
196 8 case 3: d_fen--;
197 8 if(d_fen==0xff)d_fen=59;
198 8 break;
199 8 case 4: d_hour++;
200 8 if(d_hour==24)d_hour=0;
201 8 break;
202 8 case 5: d_hour--;
203 8 if(d_hour==0xff)d_hour=23;
204 8 break;
205 8 }
206 7 }
207 6 }
208 5 }
209 4 }
210 3 if(k==11){flag_ma=0;;P3_1=0;TR0=1;}
211 3 }
212 2 }
213 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 735 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 33 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -