?? +
字號(hào):
C51 COMPILER V8.05a BIYESHEJI1 10/31/2012 22:36:56 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE BIYESHEJI1
OBJECT MODULE PLACED IN .\biyesheji1.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\biyesheji1.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\biyesheji1.obj)
line level source
1 /***********************************************************
2 十字路口交通燈控制 C 程序
3 ***********************************************************/
4 #include <reg51.h>
5 #define uchar unsigned char
6 #define uint unsigned int
7 /*****定義控制位*******************************************/
8 sbit Time_Show_LED2=P2^5; //Time_Show_LED2(直行時(shí)間顯示)控制位
9 sbit Time_Show_LED1=P2^4; //Time_Show_LED1(直行時(shí)間顯示)控制位
10 sbit EW_LED2=P2^3; //EW_LED2控制位
11 sbit EW_LED1=P2^2; //EW_LED1控制位
12 sbit SN_LED2=P2^1; //SN_LED2控制位
13 sbit SN_LED1=P2^0; //SN_LED1控制位
14 sbit SN_Yellow=P1^6; //SN黃燈
15 sbit EW_Yellow=P1^2; //EW黃燈
16 sbit EW_ManGreen=P3^0; //EW人行道綠燈
17 sbit x=P1^5;
18 sbit y=P1^7;
19 sbit a=P1^0;
20 sbit b=P1^1;
21 sbit c=P1^3;
22 sbit d=P1^4;
23 sbit SN_ManGreen=P3^1; //SN人行道綠燈
24 sbit Special_LED=P2^6; //交通特殊指示燈
25 sbit Busy_LED=P2^7; //交通繁忙指示燈
26 sbit Nomor_Button=P3^5; //交通正常按鍵
27 sbit Busy_Btton=P3^6; //交通繁忙按鍵
28 sbit Special_Btton=P3^7; //交通特殊按鍵
29 sbit EW_Green=P3^3; //EW人行道紅燈
30 sbit SN_Green=P3^4; //SN人行道紅燈
31 bit Flag_SN_Yellow; //SN黃燈標(biāo)志位
32 bit Flag_EW_Yellow; //EW黃燈標(biāo)志位
33 char Time_EW; //東西方向倒計(jì)時(shí)單元
34 char Time_SN; //南北方向倒計(jì)時(shí)單元
35 uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化賦值,正常模式
36 uchar EW1=60,SN1=40,EWL1=19,SNL1=19; //用于存放修改值的變量
37 uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9段選碼
38 uchar code S[8]={0xA0,0xA0,0x80,0xC0,0xA0,0xA0,0x20,0x24};
39 //交通信號(hào)燈控制代碼
40 /**********************延時(shí)子程序**************************/
41 void Delay(uchar a)
42 {
43 1 uchar i;
44 1 i=a;
45 1 while(i--){;}
46 1 }
47
48 /*****************顯示子函數(shù)******************************/
49 void Display(void)
50 {
51 1 uchar h,l;
52 1 h=Time_EW/10;
53 1 l=Time_EW%10;
54 1 P0=table[l];
55 1 EW_LED2=1; //點(diǎn)亮EW_LED2
C51 COMPILER V8.05a BIYESHEJI1 10/31/2012 22:36:56 PAGE 2
56 1 Delay(2);
57 1 EW_LED2=0; //熄滅EW_LED2
58 1 P0=table[h];
59 1 EW_LED1=1; //點(diǎn)亮EW_LED1
60 1 Delay(2);
61 1 EW_LED1=0;
62 1
63 1 h=Time_SN/10;
64 1 l=Time_SN%10;
65 1 P0=table[l];
66 1 SN_LED2=1; //點(diǎn)亮SN_LED2
67 1 Delay(2);
68 1 SN_LED2=0;
69 1 P0=table[h];
70 1 SN_LED1=1; //點(diǎn)亮SN_LED1
71 1 Delay(2);
72 1 SN_LED1=0;
73 1
74 1 h= EW1/10;
75 1 l= EW1%10;
76 1 P0=table[l];
77 1 Time_Show_LED1=1; //點(diǎn)亮Time_Show_LED1
78 1 Delay(2);
79 1 Time_Show_LED1=0;
80 1 P0=table[h];
81 1 Time_Show_LED2=1; //點(diǎn)亮Time_Show_LED2
82 1 Delay(2);
83 1 Time_Show_LED2=0;
84 1 }
85 /**********************外部0中斷服務(wù)程序******************/
86
87 void INT0_srv(void)interrupt 0 using 1
88 {
89 1 EX0=0; //關(guān)中斷
90 1
91 1 if(Nomor_Button==0) //測(cè)試按鍵是否按下,按下為正常狀態(tài)
92 1 {
93 2 EW1=60;
94 2 SN1=40;
95 2 EWL1=19;
96 2 SNL1=19;
97 2 Busy_LED=0; //關(guān)繁忙信號(hào)燈
98 2 Special_LED =0; //關(guān)特殊信號(hào)燈
99 2 }
100 1 if(Busy_Btton==0) //測(cè)試按鍵是否按下,按下為繁忙狀態(tài)
101 1 {
102 2 EW1=45;
103 2 SN1=30;
104 2 EWL1=14;
105 2 SNL1=14;
106 2 Special_LED=0; //關(guān)特殊信號(hào)燈
107 2 Busy_LED=1; //開(kāi)繁忙信號(hào)燈
108 2
109 2 }
110 1 if(Special_Btton==0)//測(cè)試按鍵是否按下,按下為特殊狀態(tài)
111 1 {
112 2 EW1=75;
113 2 SN1=55;
114 2 EWL1=19;
115 2 SNL1=19;
116 2 Busy_LED=0; //關(guān)繁忙信號(hào)燈
117 2 Special_LED =1;//開(kāi)特殊信號(hào)燈
C51 COMPILER V8.05a BIYESHEJI1 10/31/2012 22:36:56 PAGE 3
118 2 }
119 1 EX0=1; //開(kāi)中斷
120 1 }
121 /**********************T0中斷服務(wù)程序*******************/
122 void timer0(void)interrupt 1 using 1
123 {
124 1 static uchar count;
125 1 TH0=(65536-50000)/256;
126 1 TL0=(65536-50000)%256;
127 1 count++;
128 1
129 1 if(count==10)
130 1 {
131 2 if(Flag_SN_Yellow==1) //測(cè)試南北黃燈標(biāo)志位
132 2 {SN_Yellow=~SN_Yellow;}
133 2 if(Flag_EW_Yellow==1) //測(cè)試東西黃燈標(biāo)志位
134 2 {EW_Yellow=~EW_Yellow;}
135 2 }
136 1 if(count==20)
137 1 {
138 2 Time_EW--;
139 2 Time_SN--;
140 2 if(Flag_SN_Yellow==1) //測(cè)試南北黃燈標(biāo)志位
141 2 {SN_Yellow=~SN_Yellow;}
142 2 if(Flag_EW_Yellow==1) //測(cè)試東西黃燈標(biāo)志位
143 2 {EW_Yellow=~EW_Yellow;}
144 2 count=0;
145 2 }
146 1 }
147 /*********************主程序開(kāi)始***********************/
148 void main(void)
149 {
150 1 Busy_LED=0;
151 1 Special_LED=0;
152 1 IT0=1; //INT0負(fù)跳變觸發(fā)
153 1 TMOD=0x01; //定時(shí)器工作于方式1
154 1 TH0=(65536-50000)/256; //定時(shí)器賦初值
155 1 TL0=(65536-50000)%256;
156 1 EA=1; //CPU開(kāi)中斷總允許
157 1 ET0=1; //開(kāi)定時(shí)中斷
158 1 EX0=1; //開(kāi)外部INTO中斷
159 1 TR0=1; //啟動(dòng)定時(shí)
160 1
161 1 while(1)
162 1 {
163 2 /*******S0狀態(tài)**********/
164 2 // SN_ManRed=0;
165 2 SN_ManGreen=1; //SN人行道通行
166 2 // EW_ManRed=1; //EW人行道禁止
167 2 EW_ManGreen=0;
168 2 Flag_EW_Yellow=0; //EW關(guān)黃燈顯示信號(hào)
169 2 Time_EW=EW;
170 2 Time_SN=SN;
171 2 while(Time_SN>=5)
172 2 {
173 3 P1=S[0]; //SN綠燈,EW紅燈
174 3 Display();
175 3 }
176 2
177 2 /*******S1狀態(tài)**********/
178 2 P1=0x00;
179 2 while(Time_SN>=0)
C51 COMPILER V8.05a BIYESHEJI1 10/31/2012 22:36:56 PAGE 4
180 2 {
181 3 //Flag_SN_Yellow=1; //SN開(kāi)黃燈信號(hào)位
182 3 x=1;
183 3 y=1;
184 3 P1=P1|0xA0; //保持EW紅燈
185 3 Display();
186 3 }
187 2
188 2 /*******S2狀態(tài)**********/
189 2 //SN_ManRed=1; //SN人行道禁止
190 2 //SN_ManGreen=0;
191 2 //EW_ManRed=1; //EW人行道禁止
192 2 EW_ManGreen=0;
193 2 Flag_SN_Yellow=0; //SN關(guān)黃燈顯示信號(hào)
194 2 Time_SN=SNL;
195 2 while(Time_SN>=5)
196 2 {
197 3 P1=S[2]; //SN左拐綠燈亮,EW紅燈
198 3 Display();
199 3 }
200 2
201 2 /*******S3狀態(tài)**********/
202 2 P1=0x00;
203 2 while(Time_SN>=0)
204 2 {
205 3 Flag_SN_Yellow=1; //SN開(kāi)黃燈信號(hào)位
206 3 y=1;
207 3 //P1=P1|0x08; //保持EW紅燈
208 3 c=0;
209 3 Display();
210 3 }
211 2
212 2 /***********賦值*********/
213 2 EW=EW1;
214 2 SN=SN1;
215 2 EWL=EWL1;
216 2 SNL=SNL1;
217 2 /*******S4狀態(tài)**********/
218 2 //SN_ManRed=1; //SN人行道禁止
219 2 SN_ManGreen=0;
220 2 //EW_ManRed=0;
221 2 EW_ManGreen=1; //EW人行道通行
222 2 Flag_SN_Yellow=0; //SN關(guān)黃燈顯示信號(hào)
223 2 x=1;
224 2 d=0;
225 2 Time_EW=SN;
226 2 Time_SN=EW;
227 2 while(Time_EW>=5)
228 2 {
229 3 P1=S[4]; //EW通行,SN紅燈
230 3 Display();
231 3 }
232 2
233 2 /*******S5狀態(tài)**********/
234 2 P1=0X00;
235 2 while(Time_EW>=0)
236 2 {
237 3 //Flag_EW_Yellow=1;//EW開(kāi)黃燈信號(hào)位
238 3 x=1;
239 3 P1=P1|0x80; //保持SN紅燈
240 3 Display();
241 3 }
C51 COMPILER V8.05a BIYESHEJI1 10/31/2012 22:36:56 PAGE 5
242 2
243 2 /*******S6狀態(tài)**********/
244 2 //SN_ManRed=1; //SN人行道禁止
245 2 SN_ManGreen=0;
246 2 //EW_ManRed=1; //EW人行道禁止
247 2 EW_ManGreen=0;
248 2 Flag_EW_Yellow=0;//EW關(guān)黃燈顯示信號(hào)
249 2 Time_EW=EWL;
250 2 while(Time_EW>=5)
251 2 {
252 3 P1=S[6]; //EW左拐綠燈亮,SN紅燈
253 3 Display();
254 3 }
255 2
256 2 /*******S7狀態(tài)**********/
257 2 P1=0X00;
258 2 while(Time_EW>=0)
259 2 {
260 3 Flag_EW_Yellow=1; //EN開(kāi)黃燈信號(hào)位
261 3 x=1;
262 3 P1=P1|0x20; //保持SN紅燈
263 3 Display();
264 3 }
265 2
266 2 /***********賦值********/
267 2 EW=EW1;
268 2 SN=SN1;
269 2 EWL=EWL1;
270 2 SNL=SNL1;
271 2 }
272 1 }
273
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 522 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -