📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 04/09/2008 21:08:30 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE 程序\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\main.lst) OBJEC
-T(main.obj)
line level source
1 #include<reg52.h>
2 #include"LED_N.H"
3 #include"KEY.H"
4 #include"beeper.h"
5
6 #define NORMAL 0 //预定义三种工作模式
7 #define HOUR_STATE 1
8 #define MINUTE_STATE 2
9
10 void initial(); //函数声明
11 void SetTime();
12 void ModeJudge();
13
14 unsigned char second; //变量声明
15 unsigned char minute;
16 unsigned char hour;
17 unsigned int div;
18 unsigned char menu_state;
19 unsigned char SecondMask;
20 unsigned char MinuteMask;
21 unsigned char HourMask;
22 unsigned char m=0;
23 /*
24 函数名:SYS_Init();
25 入口参数:无
26 出口参数:无
27 说明: 定义T0工作方式1,约5ms产生一次中断
28 T1工作方式2,约200us产生一次中断
29 系统初始状态为NORMAL
30 初始时间为 08:55:00
31 */
32 void SYS_Init()
33 {
34 1 TMOD=0x21;
35 1 TL0=(65536-5000)%256; //5ms
36 1 TH0=(65536-5000)/256;
37 1 TH1=TL1=56;
38 1 EA=1;
39 1 ET0=1;
40 1 ET1=1;
41 1 TR0=1;
42 1 TR1=1;
43 1 PT0=0;
44 1 PT1=1;
45 1 hour=8;
46 1 minute=55;
47 1 second=0;
48 1 menu_state=NORMAL;
49 1 }
50 main()
51 {
52 1 SYS_Init();
53 1 while(1)
54 1 {
C51 COMPILER V8.02 MAIN 04/09/2008 21:08:30 PAGE 2
55 2 if(div>2304)
56 2 {
57 3 switch(menu_state)
58 3 {
59 4 case NORMAL: SecondMask=SECOND_BLINK;break; //正常模式时,第四位数码管中间的位段闪烁
60 4 case HOUR_STATE: HourMask =HOUR_BLINK; break; //调小时时,三、四位数码管闪烁
61 4 case MINUTE_STATE:MinuteMask=MINIT_BLINK; break; //调分钟时,一、二位数码管闪烁
62 4 default: break;
63 4 }
64 3 }
65 2 else
66 2 {
67 3 SecondMask=NO_BLINK2;
68 3 HourMask=MinuteMask=NO_BLINK;
69 3 }
70 2
71 2 if(second>=60) //正常模式时,时间计算
72 2 {
73 3 second=0;
74 3 minute++;
75 3 if(minute>=60)
76 3 {
77 4 minute=0;
78 4 hour++;
79 4 if(hour>=12)
80 4 hour=0;
81 4 }
82 3 }
83 2 if(m>2) //15ms执行一次的程序
84 2 {
85 3 m=0;
86 3 ModeJudge(); //判断模式改变
87 3 SetTime(); //设定时间
88 3 SplitNumber(hour*100+minute); //将时间送入缓存
89 3 }
90 2 };
91 1 }
92 void timer0() interrupt 1 // T0中断程序
93 {
94 1 TR0=0;
95 1 TH0=(65536-5000)/256; //5ms
96 1 TL0=(65536-5000)%256;
97 1 m++;
98 1 Display_Scan(SecondMask,MinuteMask,HourMask); //将时间显示在数码管上
99 1 TR0=1;
100 1 }
101 void timer1() interrupt 3 //T1中断程序
102 {
103 1 div++;
104 1 if(div>4607)
105 1 {
106 2 div=0;
107 2 second++; //时间记够1s,second加一
108 2 }
109 1 }
110 /*
111 函数名:SetTime();
112 入口参数:无
113 出口参数:无
114 说明:在NORMAL下,不做处理
115 在HOUR_MODE下,按 KEY2 和 KEY3 对小时加减
116 在MINUTE_MODE下,按 KEY2 和 KEY3 对分钟加减
C51 COMPILER V8.02 MAIN 04/09/2008 21:08:30 PAGE 3
117 */
118 void SetTime()
119 {
120 1 if(KEY2_JUDGE()!=NO_PRESS)
121 1 {
122 2 switch(menu_state)
123 2 {
124 3 case NORMAL:break;
125 3 case HOUR_STATE:hour++;if(hour>=12)hour=11;div=0;break;
126 3 case MINUTE_STATE:minute++;if(minute>=60)minute=59;second=0;div=0;break;
127 3 default: break;
128 3 }
129 2 }
130 1 if(KEY3_JUDGE()!=NO_PRESS)
131 1 {
132 2 switch(menu_state)
133 2 {
134 3 case NORMAL:break;
135 3 case HOUR_STATE:hour--;if(hour<=1)hour=1;div=0;break;
136 3 case MINUTE_STATE:if(minute<=0)minute=1;minute--;second=0;div=0;break;
137 3 default: break;
138 3 }
139 2 }
140 1 }
141 /*
142 函数名称:ModeJudge();
143 入口参数:无
144 出口参数:无
145 说明:按 KEY1,改变工作模式
146 */
147 void ModeJudge()
148 {
149 1 if( KEY1_JUDGE()==SHORT_PRESS)
150 1 {
151 2 menu_state++;
152 2 if(menu_state>2)menu_state=0;
153 2 }
154 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 388 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -