📄 timer.lst
字号:
C51 COMPILER V8.02 TIMER 12/10/2008 22:55:07 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE timer.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "timer.h"
2 #include "main.h"
3 #include "keyboard.h"
4 #include "led.h"
5
6 unsigned char display_buffer[4]; //显示缓冲区,共4位
7
8 unsigned char minute=0; //定义默认定时时间
9 unsigned char second=0;
10 unsigned char setminute=0,setsecond=20; //设置定时时间
11
12 unsigned char n_50m_second; //保存多少个50毫秒的变量
13
14
15 unsigned char coming1=15; //15秒灯光提示
16 unsigned char coming2=3; // 3秒声音提示
17 bit beepcome=0; //到时标记位
18
19
20 //unsigned char flicker_time=0; //闪烁频率
21 //unsigned char display_on=1; //显示开关标志。用来产生闪烁效果
22 unsigned int status=1; //状态值 1 设置 ; 2 计时
23
24 unsigned int alarmtime1=0,alarmtime2=0;
25 unsigned int alarmspeed=300;
26
27 void timer0_isr(void) interrupt 1 using 1 //定时器0中断处理倒计时函数
28 {
29 1 TL0=0xB9;
30 1 TH0=0x3C; //定时器重装。定时50mS中断一次
31 1 n_50m_second++;
32 1 if (n_50m_second>=20) //1秒到
33 1 {
34 2 n_50m_second=0; //清50毫秒计数
35 2 second--; //秒减1
36 2 if(second==0xff) //如果秒到00
37 2 {
38 3 second=59; //秒变59秒
39 3 minute--; //分减1
40 3 if(minute==0xff) //如果分到00
41 3 {
42 4 minute=0; //分清0
43 4 second=0;
44 4 beepcome=1; //标记beepcome
45 4 TR0=0;
46 4 EA=0; //取消计时中断
47 4 }
48 3 }
49 2 }
50 1 }
51
52
53
54
55
C51 COMPILER V8.02 TIMER 12/10/2008 22:55:07 PAGE 2
56 void timer(void)
57 {
58 1
59 1
60 1 if (minute ==0 && second<=coming1 && TR0==1) //开始灯光提示
61 1 {
62 2 alarmtime1+=10;
63 2 if (alarmtime1>=alarmspeed) {P0_0=~P0_0;alarmtime1=0;alarmspeed-=3;} //蜂鸣器,LED切换
64 2
65 2 if (minute ==0 && second<=coming2 && TR0==1) //开始声音提示
66 2 {
67 3 alarmtime2+=10;
68 3 if (alarmtime2>=alarmspeed) {P0_1=~P0_1;alarmtime2=0; }
69 3 }
70 2
71 2 }
72 1
73 1
74 1
75 1
76 1 switch (status) //1为设置状态,2为计时状态
77 1 {
78 2 case 1: //============================设置状态===================================
79 2 {
80 3 if(key==KEY_START) //开始计时
81 3 {
82 4 minute=setminute; //载入设置时间
83 4 second=setsecond;
84 4 EA=1; //开始计时
85 4 TR0=1;
86 4 status=2; //进入计时状态
87 4 key=0;
88 4 }
89 3
90 3 if(key==KEY_MIN) //调整分功能
91 3 {
92 4 setminute++;
93 4 if (setminute>=100) setminute=0;
94 4
95 4 key=0;
96 4 }
97 3 if(key==KEY_SEC) //调整秒功能
98 3 {
99 4 setsecond++;
100 4 if (setsecond>=60) setsecond=0;
101 4 key=0;
102 4 }
103 3 if(key==KEY_RESET) //重置功能
104 3 {
105 4 key=0;
106 4 }
107 3 showset(); //调用显示设置函数
108 3 display(display_buffer); //显示结果
109 3 break;
110 3 }
111 2
112 2
113 2 case 2: //=======================计时状态=====================================
114 2 {
115 3 if(key==KEY_RESET) //如果设置键按下
116 3 {
117 4 status=1; //进入设置状态
C51 COMPILER V8.02 TIMER 12/10/2008 22:55:07 PAGE 3
118 4 key=0; //清键值
119 4 }
120 3
121 3 if(key==KEY_MIN) //调整分功能
122 3 {
123 4 key=0;
124 4 }
125 3
126 3 if(key==KEY_SEC) //调整秒功能
127 3 {
128 4 key=0;
129 4 }
130 3
131 3 if(key==KEY_START) // 转为暂停
132 3 {
133 4 TR0=~TR0; //暂停、启动计时器
134 4 key=0;
135 4 }
136 3 showtime(); //调用显示时间函数
137 3 display(display_buffer); //显示结果
138 3 break;
139 3 }
140 2 }
141 1
142 1 }
143
144
145
146
147
148
149
150 void showtime(void) //显示当前剩余时间
151 {
152 1 display_buffer[0]=second%10;
153 1 display_buffer[1]=second/10;
154 1 display_buffer[2]=minute%10;
155 1 display_buffer[3]=minute/10;
156 1 }
157
158 void showset(void) //显示当前设置时间
159 {
160 1 display_buffer[0]=setsecond%10;
161 1 display_buffer[1]=setsecond/10;
162 1 display_buffer[2]=setminute%10;
163 1 display_buffer[3]=setminute/10;
164 1 }
165
166
167 /*
168 void beeping(void)
169 {
170 if (beeptime>0)
171 {
172 P0_5=0;
173 P0_0=1;
174 beeptime--;
175 }
176 else
177 {
178 P0_5=1;
179 P0_0=0;
C51 COMPILER V8.02 TIMER 12/10/2008 22:55:07 PAGE 4
180 beepcome=0;
181 beeptime=20;
182 }
183
184 }
185 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 373 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -