?? controler.lst
字號:
C51 COMPILER V7.06 CONTROLER 04/11/2006 18:30:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CONTROLER
OBJECT MODULE PLACED IN controler.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE controler.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #define LEDLen 3
3
4
5 sbit OUT0 = P1^0;
6 sbit OUT1 = P1^1;
7 sbit OUT2 = P1^2;
8 sbit OUT3 = P1^3;
9 sbit OUT4 = P1^4;
10 sbit OUT5 = P1^5;
11 sbit OUT6 = P1^6;
12 sbit OUT7 = P1^7;
13
14 int bdata Second;
15 sbit TURN0 = Second^8;
16 sbit TURN1 = Second^9;
17 sbit TURN2 = Second^10;
18
19 int bdata flag;
20
21 sbit I_test = flag^0; //電流測試標志
22
23
24
25 unsigned char Sec,Time;
26
27 unsigned int w;
28
29 unsigned char LEDBuf[LEDLen]; //顯示緩沖區
30 unsigned char Buf0[LEDLen];
31 unsigned char Buf1[LEDLen];
32
33 code unsigned char LEDMAP[] = {
34
35 0x80, 0xb9, 0x24, 0x30, 0x19, 0x12, 0x02, 0xb8, 0x00, 0x10
36 };
37
38 void delay1() {
39 1 unsigned int j;
40 1 for (j=0;j<30000; j++){}
41 1 }
42
43
44
45 void Delay(unsigned char CNT) { //延時函數
46 1 unsigned int i;
47 1 while (CNT-- !=0)
48 1 for (i=100; i !=0; i--);
49 1
50 1
51 1 }
52
53
54 void DisplayLED() { //顯示函數
55 1 unsigned char i;
C51 COMPILER V7.06 CONTROLER 04/11/2006 18:30:05 PAGE 2
56 1
57 1
58 1 for (i = 0; i < LEDLen; i++) {
59 2
60 2 P3 = LEDBuf[i];
61 2 if (i == 0) {
62 3 OUT4 = 1;
63 3 OUT3 = 1;
64 3 OUT2 = 0;
65 3
66 3 }
67 2 else if (i == 1) {
68 3 OUT4 = 1;
69 3 OUT3 = 0;
70 3 OUT2 = 1;
71 3 }
72 2 else {
73 3 OUT4 = 0;
74 3 OUT3 = 1;
75 3 OUT2 = 1;
76 3 }
77 2
78 2 Delay(1);
79 2
80 2 }
81 1 }
82
83 //中斷函數
84 #define Tick 4000 //4000x250us=1s
85 #define T250us (256-230) //250us 時間常數(fosc11.0592
86 unsigned char Hour, Minute;
87
88 unsigned int C250us; //250us 計數單元
89
90
91
92 void T0Int() interrupt 1 { //T0 中斷服務函數
93 1 C250us--;
94 1 if (C250us == 0) {
95 2 C250us = Tick/8; //250us 計數器為0,重置計數器
96 2
97 2
98 2 Second++; //秒進位
99 2
100 2 if (Time == 8){ //點位處理
101 3 OUT5 = TURN2;
102 3
103 3 }
104 2 else {
105 3 OUT5 = TURN0;
106 3
107 3 }
108 2
109 2
110 2 if (Second == 480) {
111 3
112 3 Second = 0; //秒清零
113 3
114 3
115 3 Minute++;
116 3 if (Minute == 60) {
117 4 Minute = 0;
C51 COMPILER V7.06 CONTROLER 04/11/2006 18:30:05 PAGE 3
118 4 Hour++;
119 4 if (Hour == Time){
120 5
121 5 OUT5 = 1;
122 5 TURN0 = 1;
123 5 TR0 = 0;
124 5 }
125 4 }
126 3 }
127 2 }
128 1 }
129
130
131 void main() { //主函數
132 1
133 1
134 1
135 1 Time = 8; //
136 1 TMOD = 0X02; //設置T0工作方式與處置
137 1 TH0 = T250us;
138 1 TL0 = T250us;
139 1 IE = 0x82; //開中斷
140 1 Hour = 0;
141 1 Minute = 0;
142 1 Second = 0;
143 1 C250us = Tick;
144 1 TR0 = 1; //啟動定時器 0
145 1
146 1
147 1 I_test = 0; //啟動程序
148 1
149 1
150 1 P3 = 0x00;
151 1 if (P3 == 0x00 ){ //啟動檢測電流
152 2
153 2 OUT6 = 0;
154 2
155 2 delay1();
156 2 OUT6 = 1;
157 2 delay1();
158 2 if (P3 == 0x00){ //確認電流
159 3 OUT6 = 0;
160 3 delay1();
161 3 OUT6 = 1;
162 3 delay1();
163 3
164 3 while (1) { //循環函數
165 4
166 4 LEDBuf[0] = LEDMAP[Hour%10];
167 4 LEDBuf[1] = LEDMAP[Minute/10];
168 4 LEDBuf[2] = LEDMAP[Minute%10];
169 4
170 4 DisplayLED();
171 4 if (Hour == Time){
172 5 OUT7 = 0;
173 5 TURN0 = 1;
174 5 OUT5 = 1;
175 5 }
176 4
177 4 if (Time == 8){ //轉浮沖的翻轉函數
178 5 P3 = 0x00;
179 5 if (P3 != 0x00){ //檢測電流是否反轉
C51 COMPILER V7.06 CONTROLER 04/11/2006 18:30:05 PAGE 4
180 6 Buf0[0]=LEDBuf[0];
181 6 Buf0[1]=LEDBuf[1];
182 6 Buf0[2]=LEDBuf[2];
183 6 Second=0x00;
184 6 Minute=0x00;
185 6 Hour=0x00;
186 6 Time = 2;
187 6 }
188 5 }
189 4 else //如果已經進入浮充
190 4 if (TURN0 == 1) //翻看函數
191 4
192 4 if (OUT5 == 0){
193 5
194 5 w=600; //翻看時間
195 5 while (w){
196 6 w--;
197 6 LEDBuf[0]=Buf0[0];
198 6 LEDBuf[1]=Buf0[1];
199 6 LEDBuf[2]=Buf0[2];
200 6 DisplayLED();
201 6
202 6 }
203 5 }
204 4
205 4
206 4 }
207 3
208 3 }
209 2
210 2 }
211 1
212 1 }
213
214
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 362 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 ----
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 + -