?? 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 + -