?? timer1.lst
字號(hào):
C51 COMPILER V9.01 TIMER1 05/06/2012 20:40:06 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE TIMER1
OBJECT MODULE PLACED IN timer1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE timer1.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <stc90.h>
2 #include <hardware.h>
3 #include <intrins.h>
4 #include <eeprom.h>
5
6 unsigned char BeepTimes;
7 unsigned char KeyCode ;
8 //按鍵值
9 unsigned char KeyPressing1,KeyPressed1,KeyPressing2,KeyPressed2 ;
10 //按鍵持續(xù)按下的鍵盤碼 按鍵點(diǎn)按的鍵盤碼
11
12 unsigned char Key1PressingTime ,Key2PressingTime;
13 //按鍵持續(xù)按下的時(shí)間
14 bit IsKeyPressed ;
15 bit IsScanKeyTime ;
16 void keyScan(void);
17 void KeyProgram(void);
18
19
20 #define BLACK 0xff
21 //段碼送BLACK 就是熄滅
22 code unsigned char Led7Code[]=
23 {
24 // 0 - - -9 //- //- // ~ //~ //_//_
25 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xbf, 0xbf, 0xbf,0xbf,0xbf
26 };
27 //共陽(yáng) 低電平點(diǎn)亮
28 code unsigned char LedBIt[4]=
29 {
30 0x7F,0XBF,0xDF,0xEF
31 }
32 ;
33 //位碼口數(shù)據(jù)
34 unsigned char BitNum ;
35 //當(dāng)前點(diǎn)亮第幾個(gè)數(shù)碼管
36 unsigned char DisplayData[4]=
37 {
38 0x00,0x00,0x00,0x00
39 }
40 ;
41 //4個(gè)數(shù)碼管分別要顯示的數(shù)據(jù)值
42 unsigned char IsFlash[4]=
43 {
44 0x00,0x00,0x00,0x00
45 }
46 ;
47 //4個(gè)數(shù)碼管是否要閃爍 00表示不閃爍 01表示要閃爍
48 unsigned char Time5ms ;
49 //用于閃爍的5ms
50 bit IsFlashTime ;
51 //當(dāng)前是否為閃爍時(shí)間。
52 bit IsDisplay1BitTime ;
53 //當(dāng)前是否到了1bit的顯示時(shí)間 就是5ms的時(shí)間
54 bit IsTime1s;
55 //bit IsGo;//時(shí)間是否跑。
C51 COMPILER V9.01 TIMER1 05/06/2012 20:40:06 PAGE 2
56 //unsigned char Time300ms ;
57
58 void Display(void);
59 unsigned char IsRun[6];
60 unsigned char TimeSave[6]=
61 {
62 0,0,0,0,0,0
63 };
64 unsigned char TimeDelay[6]=
65 {
66 0,0,0,0,0,0
67 };
68 //00-99表示秒為單位 100-199表示分為單位 范圍為00-99
69 //6個(gè)延時(shí)控制引腳延時(shí)時(shí)間,0或者100則不需要延時(shí)或者已經(jīng)到了延時(shí)時(shí)間 非0則需要延時(shí)控制。
70 unsigned char CurrLed;//當(dāng)前顯示第幾路led開關(guān)的數(shù)據(jù)。
71 //unsigned char Time1000ms;
72 bit IsSetFirst;
73 #define SET1 1
74 #define SET2 2
75 #define SET3 3
76 #define SET4 4
77 #define SET5 5
78 #define SET6 6
79
80 #define WORK 0
81
82 unsigned char MachineState ;
83 //機(jī)器狀態(tài) 倒計(jì)時(shí)狀態(tài) 設(shè)置狀態(tài)
84 ///開機(jī)為正常倒計(jì)時(shí)狀態(tài),全部數(shù)據(jù)為0 ,
85 //按下任何一個(gè)顏色按鍵 進(jìn)入設(shè)置狀態(tài),屏幕顯示相關(guān)設(shè)置值或者該顏色端口的當(dāng)前倒計(jì)時(shí)的時(shí)間。
86 //10s后沒有繼續(xù)按鍵,則退出到正常顯示。
87 //設(shè)置結(jié)束 則退出到正常顯示 , 循環(huán)顯示各個(gè)端口的倒計(jì)時(shí)時(shí)間。
88 //后臺(tái)進(jìn)行時(shí)間檢測(cè) 時(shí)間到則自動(dòng)修改輸出電平。
89
90 void funUp(void);
91 void funDown(void);
92 void funLeft(void);
93 void funRight(void);
94 void funOk(void) ;
95 unsigned char Time60s;
96
97
98
99 main()
100 {
101 1 unsigned char i ;
102 1
103 1 PLed0=1 ;
104 1 PLed1=1 ;
105 1 PLed2=1 ;
106 1 PLed3=1 ;
107 1 PLed4=1 ;
108 1 PLed5=1 ;
109 1 //開機(jī)所有電路都是低電平。
110 1 TMOD=0X01 ;
111 1
112 1 TH0=0XeC ;
113 1 //5ms定時(shí)中斷 4個(gè)數(shù)碼管 所以每個(gè)數(shù)碼管20ms刷新一次。
114 1 TL0=0X78 ;
115 1 ET0=1 ;
116 1 PT0=0 ;
117 1 //定時(shí)器0作為顯示用 低優(yōu)先級(jí)。
C51 COMPILER V9.01 TIMER1 05/06/2012 20:40:06 PAGE 3
118 1 TR0=1 ;
119 1
120 1 EA=1 ;
121 1
122 1
123 1
124 1 delay(60000);
125 1 for(i=0;i<6;i++)
126 1 {
127 2 TimeSave[i]=byte_read(0x4000+i);
128 2 TimeDelay[i]=TimeSave[i];
129 2 IsRun[i]=0 ;
130 2 }
131 1 MachineState=WORK ;
132 1 //開機(jī)后處于正常工作狀態(tài)。
133 1 //但是時(shí)間不運(yùn)行。
134 1
135 1 BeepTimes=2;//上電短響1次。
136 1 //開機(jī)顯示4個(gè)0 直到按下任意按鍵。
137 1
138 1
139 1
140 1
141 1
142 1 while(1)
143 1 {
144 2 if(IsDisplay1BitTime==1)
145 2 {
146 3 IsDisplay1BitTime=0 ;
147 3 Display();
148 3 }
149 2 if((PKeyPort1!=0xff)||(PKeyPort2&0x0e)!=0x0e)
150 2 break ;
151 2 }
152 1
153 1
154 1 while(1)
155 1 {
156 2 //到了顯示時(shí)間 執(zhí)行顯示子程序
157 2 if(IsDisplay1BitTime==1)
158 2 {
159 3 IsDisplay1BitTime=0 ;
160 3 Display();
161 3 }
162 2
163 2 // 50ms時(shí)間到 則檢測(cè)一次按鍵 帶消抖
164 2 if(IsScanKeyTime==1)
165 2 {
166 3 IsScanKeyTime=0 ;
167 3 KeyProgram();
168 3 }
169 2 //每一路時(shí)間-1,并檢查 是否到了
170 2 if(MachineState==WORK)
171 2 {
172 3 //工作狀態(tài)下 每秒鐘執(zhí)行一次這個(gè)代碼 修改并檢查每個(gè)時(shí)間是否到位。
173 3 unsigned char i ;
174 3 if((IsTime1s==1))
175 3 {
176 4 IsTime1s=0 ;
177 4 //每分鐘以分為單位的線路自減1
178 4 if(++Time60s>=60)
179 4 {
C51 COMPILER V9.01 TIMER1 05/06/2012 20:40:06 PAGE 4
180 5 Time60s=0 ;
181 5 for(i=0;i<6;i++)
182 5 {
183 6 if(IsRun[i])
184 6 if((TimeDelay[i]>100))
185 6 TimeDelay[i]--;
186 6 }
187 5 }
188 4
189 4 //每秒鐘以秒為單位的線路自減1
190 4 for(i=0;i<6;i++)
191 4 {
192 5 if(IsRun[i])
193 5 if((TimeDelay[i]>0)&&(TimeDelay[i]<100))
194 5 TimeDelay[i]--;
195 5 }
196 4
197 4 //倒計(jì)時(shí)部分代碼
198 4 if(IsRun[0]==1)
199 4 {
200 5 if((TimeDelay[0]==0)||(TimeDelay[0]==100))
201 5 {
202 6 PLed0=1 ;
203 6 IsRun[0]=0 ;
204 6 if(TimeSave[0]!=0)
205 6 BeepTimes=2;
206 6 }
207 5 else
208 5 PLed0=0 ;
209 5 }
210 4 else
211 4 PLed0=1 ;
212 4 if(IsRun[1]==1)
213 4 {
214 5 if((TimeDelay[1]==0)||(TimeDelay[1]==100))
215 5 {
216 6 PLed1=1 ;
217 6 IsRun[1]=0 ;
218 6 if(TimeSave[1]!=0)
219 6 BeepTimes=4;
220 6
221 6 }
222 5 else PLed1=0 ;
223 5 }
224 4 else
225 4 PLed1=1 ;
226 4 if(IsRun[2]==1)
227 4 {
228 5 if((TimeDelay[2]==0)||(TimeDelay[2]==100))
229 5 {
230 6 PLed2=1 ;
231 6 IsRun[2]=0 ;
232 6 if(TimeSave[2]!=0)
233 6 BeepTimes=6;
234 6 }
235 5 else PLed2=0 ;
236 5 }
237 4 else
238 4 PLed2=1 ;
239 4 if(IsRun[3]==1)
240 4 {
241 5 if((TimeDelay[3]==0)||(TimeDelay[3]==100))
C51 COMPILER V9.01 TIMER1 05/06/2012 20:40:06 PAGE 5
242 5 {
243 6 PLed3=1 ;
244 6 IsRun[3]=0 ;
245 6 if(TimeSave[3]!=0)
246 6 BeepTimes=8;
247 6 }
248 5 else PLed3=0 ;
249 5 }
250 4 else
251 4 PLed3=1 ;
252 4 if(IsRun[4]==1)
253 4 {
254 5 if((TimeDelay[4]==0)||(TimeDelay[4]==100))
255 5 {
256 6 PLed4=1 ;
257 6 IsRun[4]=0 ;
258 6 if(TimeSave[4]!=0)
259 6 BeepTimes=10;
260 6 }
261 5 else PLed4=0 ;
262 5 }
263 4 else
264 4 PLed4=1 ;
265 4 if(IsRun[5]==1)
266 4 {
267 5 if((TimeDelay[5]==0)||(TimeDelay[5]==100))
268 5 {
269 6 PLed5=1 ;
270 6 IsRun[5]=0 ;
271 6 if(TimeSave[5]!=0)
272 6 BeepTimes=12;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -