📄 +
字号:
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(直行时间显示)控制位
9 sbit Time_Show_LED1=P2^4; //Time_Show_LED1(直行时间显示)控制位
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黄灯标志位
32 bit Flag_EW_Yellow; //EW黄灯标志位
33 char Time_EW; //东西方向倒计时单元
34 char Time_SN; //南北方向倒计时单元
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 //交通信号灯控制代码
40 /**********************延时子程序**************************/
41 void Delay(uchar a)
42 {
43 1 uchar i;
44 1 i=a;
45 1 while(i--){;}
46 1 }
47
48 /*****************显示子函数******************************/
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; //点亮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; //点亮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; //点亮SN_LED2
67 1 Delay(2);
68 1 SN_LED2=0;
69 1 P0=table[h];
70 1 SN_LED1=1; //点亮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; //点亮Time_Show_LED1
78 1 Delay(2);
79 1 Time_Show_LED1=0;
80 1 P0=table[h];
81 1 Time_Show_LED2=1; //点亮Time_Show_LED2
82 1 Delay(2);
83 1 Time_Show_LED2=0;
84 1 }
85 /**********************外部0中断服务程序******************/
86
87 void INT0_srv(void)interrupt 0 using 1
88 {
89 1 EX0=0; //关中断
90 1
91 1 if(Nomor_Button==0) //测试按键是否按下,按下为正常状态
92 1 {
93 2 EW1=60;
94 2 SN1=40;
95 2 EWL1=19;
96 2 SNL1=19;
97 2 Busy_LED=0; //关繁忙信号灯
98 2 Special_LED =0; //关特殊信号灯
99 2 }
100 1 if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态
101 1 {
102 2 EW1=45;
103 2 SN1=30;
104 2 EWL1=14;
105 2 SNL1=14;
106 2 Special_LED=0; //关特殊信号灯
107 2 Busy_LED=1; //开繁忙信号灯
108 2
109 2 }
110 1 if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
111 1 {
112 2 EW1=75;
113 2 SN1=55;
114 2 EWL1=19;
115 2 SNL1=19;
116 2 Busy_LED=0; //关繁忙信号灯
117 2 Special_LED =1;//开特殊信号灯
C51 COMPILER V8.05a BIYESHEJI1 10/31/2012 22:36:56 PAGE 3
118 2 }
119 1 EX0=1; //开中断
120 1 }
121 /**********************T0中断服务程序*******************/
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) //测试南北黄灯标志位
132 2 {SN_Yellow=~SN_Yellow;}
133 2 if(Flag_EW_Yellow==1) //测试东西黄灯标志位
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) //测试南北黄灯标志位
141 2 {SN_Yellow=~SN_Yellow;}
142 2 if(Flag_EW_Yellow==1) //测试东西黄灯标志位
143 2 {EW_Yellow=~EW_Yellow;}
144 2 count=0;
145 2 }
146 1 }
147 /*********************主程序开始***********************/
148 void main(void)
149 {
150 1 Busy_LED=0;
151 1 Special_LED=0;
152 1 IT0=1; //INT0负跳变触发
153 1 TMOD=0x01; //定时器工作于方式1
154 1 TH0=(65536-50000)/256; //定时器赋初值
155 1 TL0=(65536-50000)%256;
156 1 EA=1; //CPU开中断总允许
157 1 ET0=1; //开定时中断
158 1 EX0=1; //开外部INTO中断
159 1 TR0=1; //启动定时
160 1
161 1 while(1)
162 1 {
163 2 /*******S0状态**********/
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关黄灯显示信号
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状态**********/
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开黄灯信号位
182 3 x=1;
183 3 y=1;
184 3 P1=P1|0xA0; //保持EW红灯
185 3 Display();
186 3 }
187 2
188 2 /*******S2状态**********/
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关黄灯显示信号
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状态**********/
202 2 P1=0x00;
203 2 while(Time_SN>=0)
204 2 {
205 3 Flag_SN_Yellow=1; //SN开黄灯信号位
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状态**********/
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关黄灯显示信号
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状态**********/
234 2 P1=0X00;
235 2 while(Time_EW>=0)
236 2 {
237 3 //Flag_EW_Yellow=1;//EW开黄灯信号位
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状态**********/
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关黄灯显示信号
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状态**********/
257 2 P1=0X00;
258 2 while(Time_EW>=0)
259 2 {
260 3 Flag_EW_Yellow=1; //EN开黄灯信号位
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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -