?? 2051.lst
字號:
C51 COMPILER V9.01 2051 09/19/2012 10:47:35 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE 2051
OBJECT MODULE PLACED IN 2051.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 2051.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //目標(biāo)器件AT89C2051晶振12M
2 //單鍵操作實現(xiàn)校時和每天任意兩個時間點定鬧
3
4 //在有鬧鈴響時按鍵則停鬧
5 //在正常模式時按鍵則開啟或關(guān)閉鬧鈴功能
6
7 //查看鬧鈴時間:在正常模式時第1次按鍵顯示第1鬧鈴時間,第2次按鍵顯示第2鬧鈴時間,3秒后返回正常模式
8
9 //設(shè)置鬧鈴時間:在正常模式時在3秒內(nèi)連按3次鍵進(jìn)入鬧鐘設(shè)定模式,此時若不按鍵5秒后返回正常模式
10 //繼續(xù)按鍵則時數(shù)跳變,再按鍵分?jǐn)?shù)跳變,再按鍵完成第1鬧鈴時間設(shè)置等待確認(rèn)
11 //繼續(xù)按鍵則進(jìn)入第2鬧鈴時間設(shè)置否則5秒后返回正常模式
12
13 //設(shè)置時鐘時間:在正常模式時長按鍵5秒則進(jìn)入校時模式,設(shè)置過程與鬧鈴模式相似,設(shè)置完成后返回正常模式
14 //2008年10月12日 I2C
15
16 //頭文件包含
17 #include <reg52.h>
18 #define uchar unsigned char
19 #define uint unsigned int
20 #define CYCLE0 50240 //每隔CYCLE0微秒T0產(chǎn)生中斷
21 #define CYCLE1 20000 //每隔CYCLE1微秒T1產(chǎn)生中斷
22 #define num 400 //顯示掃描延時量
23
24 #define Second 0 //時鐘秒單元
25 #define Minute 1 //時鐘分單元
26 #define Hour 2 //時鐘時單元
27 #define Minute_n1 3 //鬧鈴時單元
28 #define Hour_n1 4 //鬧鈴分單元
29 #define Minute_n2 5 //鬧鈴時單元
30 #define Hour_n2 6 //鬧鈴分單元
31
32 #define DispOut P3 //字符碼由P3輸出
33 //#define DisScan P1 //位掃描碼由P1輸出
34
35 //數(shù)據(jù)緩沖區(qū)
36 uchar TimeData[7]; //時間數(shù)據(jù)緩沖區(qū)
37 uchar DispData[4]; //顯示緩沖區(qū)
38
39 //共陽數(shù)碼管0~9字符表
40 uchar code Disp[10]={0xc0,0xf9,0x64,0x70,0x59,0x52,0x42,0xf8,0x40,0x50};
41
42 //全局變量定義
43 uchar KeyVal,f; //鍵值單元
44
45 //內(nèi)部可尋址位定義
46 bit SecondFlag; //時鐘秒信號位
47 bit SecondFlashFlag; //時鐘秒閃信號位
48 bit AddFlag; //設(shè)定模式增量信號位
49
50 bit TimeSetFlag; //校時模式標(biāo)志位
51 bit TimingSetFlag; //鬧鈴模式標(biāo)志位
52 bit SetModeFlag; //設(shè)置模式標(biāo)志位
53
54 bit TimingFunFlag; //鬧鈴功能的標(biāo)志位
55 bit TimingSuitedFlag; //鬧鈴時間匹配標(biāo)志位
C51 COMPILER V9.01 2051 09/19/2012 10:47:35 PAGE 2
56 bit BeeNopFlag; //鬧鈴輸出反相信號位
57 bit BeeMusicFlag; //鬧鈴聲次數(shù)信號位
58 bit BeeSpaceFlag; //鬧鈴聲間隔信號位
59 bit TimingDisSelectFlag; //鬧鈴時間顯示選取擇控制位
60
61 bit KeyTimeOutFlag; //連續(xù)擊鍵超時計數(shù)控制位
62 bit UnpressKeyTimeFlag; //無按鍵計時控制位
63
64 //輸出連接定義
65 sbit Hour_SWei= P1^5; //時十位驅(qū)動
66 sbit Hour_GWei= P1^4; //時個位驅(qū)動
67 sbit Min_SWei= P1^3; //分十位驅(qū)動
68 sbit Min_GWei= P1^2; //分個位驅(qū)動
69 //sbit Timing_LED= P3^4; //模式指示長亮?xí)r表示鬧鐘功能啟動
70 sbit Button_S1= P1^7; //按鍵S1
71 sbit Bee_Out= P1^6; //鬧鈴輸出
72
73 //函數(shù)聲明
74 void Delay(uint i); //延時函數(shù)
75 void System_init(void); //系統(tǒng)初始化函數(shù)
76 void TimerMake(void); //計時函數(shù)
77 void Display(void); //顯示函數(shù)
78 void KeyScan(void); //鍵值產(chǎn)生函數(shù)
79 void KeyFunction(void); //鍵功能處理函數(shù)
80 void TimeCompate(void); //時間比較函數(shù)
81 void ChangeData(uchar *x); //設(shè)置模式自動增量函數(shù)
82 void TimeDisData(void); //時鐘數(shù)據(jù)顯示處理函數(shù)
83 void TimingDisData(void); //鬧鈴數(shù)據(jù)顯示處理函數(shù)
84 void ClearFlag(void);
85 void StartBuzze(void);
86 void T0_intermit(void); //T0中斷函數(shù)
87 void T1_intermit(void); //T1中斷函數(shù)
88
89 //主函數(shù)
90 void main(void)
91 {
92 1 uchar DispScanTime;
93 1 uchar KeyTimeOut;
94 1 uchar UnpressKeyTime;
95 1
96 1 System_init();
97 1
98 1 while(1)
99 1 {
100 2 DispScanTime++;
101 2 //顯示掃描
102 2 if(DispScanTime%25==0)
103 2 Display();
104 2 //鍵盤掃描
105 2 if(DispScanTime>250)
106 2 {
107 3 DispScanTime=0;
108 3 Bee_Out=1; //關(guān)閉蜂鳴聲
109 3 KeyScan();
110 3 KeyFunction();
111 3 }
112 2 //計時
113 2 if(SecondFlag)
114 2 {
115 3 SecondFlag=0;
116 3 //時鐘計時
117 3 TimerMake();
C51 COMPILER V9.01 2051 09/19/2012 10:47:35 PAGE 3
118 3 //連續(xù)擊鍵超時計時
119 3 if(KeyTimeOutFlag)
120 3 {
121 4 if(++KeyTimeOut>=3)
122 4 ClearFlag(); //返回正常模式
123 4 }
124 3 else
125 3 KeyTimeOut=0;
126 3 //無按鍵計時
127 3 if(UnpressKeyTimeFlag)
128 3 {
129 4 if(++UnpressKeyTime>=5)
130 4 ClearFlag();
131 4 }
132 3 else
133 3 UnpressKeyTime=0;
134 3 }
135 2 //鬧鈴啟動
136 2 if(TimingFunFlag&&!SetModeFlag&&!TimingSuitedFlag)
137 2 {
138 3 TimeCompate(); //時間比較
139 3 // Timing_LED=0; //LED亮表示鬧鈴功能生效
140 3 }
141 2 //聲光鬧鈴輸出
142 2 else if(TimingSuitedFlag&&BeeSpaceFlag)
143 2 {
144 3 BeeNopFlag=BeeMusicFlag;
145 3 Bee_Out=!BeeNopFlag; //取反再輸出
146 3 // Timing_LED=!BeeSpaceFlag; //鬧鈴輸出時LED閃爍
147 3 }
148 2 // else
149 2 // Timing_LED=1;
150 2 }
151 1 }
152
153 //初始化函數(shù)
154 void System_init(void)
155 {
156 1 //置顯示初值
157 1 TimeData[Hour]=12; //時間初值
158 1 TimeData[Minute]=58;
159 1
160 1 TimeData[Hour_n1]=6; //第一組鬧鈴初值
161 1 TimeData[Minute_n1]=36;
162 1
163 1 TimeData[Hour_n2]=7; //第二組鬧鈴初值
164 1 TimeData[Minute_n2]=15;
165 1 //初始化P3口
166 1 P1=0xff;
167 1 //設(shè)T0,T1為方式1
168 1 TMOD=0x11;
169 1 //裝T0初值
170 1 TH0=(-CYCLE0)/256;
171 1 TL0=(-CYCLE0)%256;
172 1 //裝T1初值
173 1 TH1=(-CYCLE1)/256;
174 1 TL1=(-CYCLE1)%256;
175 1 //開中斷及啟動T0
176 1 EA =1;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -