📄 +
字号:
C51 COMPILER V8.05a BIYESHEJI 10/31/2012 22:38:17 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE BIYESHEJI
OBJECT MODULE PLACED IN .\biyesheji.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\biyesheji.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\biyesheji.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 SN_ManGreen=P3^1; //SN人行道绿灯
18 sbit Special_LED=P2^6; //交通特殊指示灯
19 sbit Busy_LED=P2^7; //交通繁忙指示灯
20 sbit Nomor_Button=P3^5; //交通正常按键
21 sbit Busy_Btton=P3^6; //交通繁忙按键
22 sbit Special_Btton=P3^7; //交通特殊按键
23 sbit EW_ManRed=P3^3; //EW人行道红灯
24 sbit SN_ManRed=P3^4; //SN人行道红灯
25 sbit x=P1^7;
26 sbit y=P1^3;
27 bit Flag_SN_Yellow; //SN黄灯标志位
28 bit Flag_EW_Yellow; //EW黄灯标志位
29 char Time_EW; //东西方向倒计时单元
30 char Time_SN; //南北方向倒计时单元
31 uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式
32 uchar EW1=60,SN1=40,EWL1=19,SNL1=19; //用于存放修改值的变量
33 uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9段选码
34 uchar code S[8]={0x28,0x48,0x98,0x88,0x82,0x84,0x89,0x88};
35 //交通信号灯控制代码
36 /**********************延时子程序**************************/
37 void Delay(uchar a)
38 {
39 1 uchar i;
40 1 i=a;
41 1 while(i--){;}
42 1 }
43
44 /*****************显示子函数******************************/
45 void Display(void)
46 {
47 1 uchar h,l;
48 1 h=Time_EW/10;
49 1 l=Time_EW%10;
50 1 P0=table[l];
51 1 EW_LED2=1; //点亮EW_LED2
52 1 Delay(2);
53 1 EW_LED2=0; //熄灭EW_LED2
54 1 P0=table[h];
55 1 EW_LED1=1; //点亮EW_LED1
C51 COMPILER V8.05a BIYESHEJI 10/31/2012 22:38:17 PAGE 2
56 1 Delay(2);
57 1 EW_LED1=0;
58 1
59 1 h=Time_SN/10;
60 1 l=Time_SN%10;
61 1 P0=table[l];
62 1 SN_LED2=1; //点亮SN_LED2
63 1 Delay(2);
64 1 SN_LED2=0;
65 1 P0=table[h];
66 1 SN_LED1=1; //点亮SN_LED1
67 1 Delay(2);
68 1 SN_LED1=0;
69 1
70 1 h= EW1/10;
71 1 l= EW1%10;
72 1 P0=table[l];
73 1 Time_Show_LED1=1; //点亮Time_Show_LED1
74 1 Delay(2);
75 1 Time_Show_LED1=0;
76 1 P0=table[h];
77 1 Time_Show_LED2=1; //点亮Time_Show_LED2
78 1 Delay(2);
79 1 Time_Show_LED2=0;
80 1 }
81 /**********************外部0中断服务程序******************/
82
83 void INT0_srv(void)interrupt 0 using 1
84 {
85 1 EX0=0; //关中断
86 1
87 1 if(Nomor_Button==0) //测试按键是否按下,按下为正常状态
88 1 {
89 2 EW1=60;
90 2 SN1=40;
91 2 EWL1=19;
92 2 SNL1=19;
93 2 Busy_LED=0; //关繁忙信号灯
94 2 Special_LED =0; //关特殊信号灯
95 2 }
96 1 if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态
97 1 {
98 2 EW1=45;
99 2 SN1=30;
100 2 EWL1=14;
101 2 SNL1=14;
102 2 Special_LED=0; //关特殊信号灯
103 2 Busy_LED=1; //开繁忙信号灯
104 2
105 2 }
106 1 if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
107 1 {
108 2 EW1=75;
109 2 SN1=55;
110 2 EWL1=19;
111 2 SNL1=19;
112 2 Busy_LED=0; //关繁忙信号灯
113 2 Special_LED =1;//开特殊信号灯
114 2 }
115 1 EX0=1; //开中断
116 1 }
117 /**********************T0中断服务程序*******************/
C51 COMPILER V8.05a BIYESHEJI 10/31/2012 22:38:17 PAGE 3
118 void timer0(void)interrupt 1 using 1
119 {
120 1 static uchar count;
121 1 TH0=(65536-50000)/256;
122 1 TL0=(65536-50000)%256;
123 1 count++;
124 1
125 1 if(count==10)
126 1 {
127 2 if(Flag_SN_Yellow==1) //测试南北黄灯标志位
128 2 {SN_Yellow=~SN_Yellow;}
129 2 if(Flag_EW_Yellow==1) //测试东西黄灯标志位
130 2 {EW_Yellow=~EW_Yellow;}
131 2 }
132 1 if(count==20)
133 1 {
134 2 Time_EW--;
135 2 Time_SN--;
136 2 if(Flag_SN_Yellow==1) //测试南北黄灯标志位
137 2 {SN_Yellow=~SN_Yellow;}
138 2 if(Flag_EW_Yellow==1) //测试东西黄灯标志位
139 2 {EW_Yellow=~EW_Yellow;}
140 2 count=0;
141 2 }
142 1 }
143 /*********************主程序开始***********************/
144 void main(void)
145 {
146 1 Busy_LED=0;
147 1 Special_LED=0;
148 1 IT0=1; //INT0负跳变触发
149 1 TMOD=0x01; //定时器工作于方式1
150 1 TH0=(65536-50000)/256; //定时器赋初值
151 1 TL0=(65536-50000)%256;
152 1 EA=1; //CPU开中断总允许
153 1 ET0=1; //开定时中断
154 1 EX0=1; //开外部INTO中断
155 1 TR0=1; //启动定时
156 1
157 1 while(1)
158 1 {
159 2 /*******S0状态**********/
160 2 SN_ManRed=0;
161 2 SN_ManGreen=1; //SN人行道通行
162 2 EW_ManRed=1; //EW人行道禁止
163 2 EW_ManGreen=0;
164 2 Flag_EW_Yellow=0; //EW关黄灯显示信号
165 2 Time_EW=EW;
166 2 Time_SN=SN;
167 2 while(Time_SN>=5)
168 2 {
169 3 P1=S[0]; //SN绿灯,EW红灯
170 3 Display();
171 3 }
172 2
173 2 /*******S1状态**********/
174 2 P1=0x00;
175 2 while(Time_SN>=0)
176 2 {
177 3 Flag_SN_Yellow=1; //SN开黄灯信号位
178 3 P1=P1|0x08; //保持EW红灯
179 3 Display();
C51 COMPILER V8.05a BIYESHEJI 10/31/2012 22:38:17 PAGE 4
180 3 }
181 2
182 2 /*******S2状态**********/
183 2 SN_ManRed=1; //SN人行道禁止
184 2 SN_ManGreen=0;
185 2 EW_ManRed=1; //EW人行道禁止
186 2 EW_ManGreen=0;
187 2 Flag_SN_Yellow=0; //SN关黄灯显示信号
188 2 Time_SN=SNL;
189 2 while(Time_SN>=5)
190 2 {
191 3 P1=S[2]; //SN左拐绿灯亮,EW红灯
192 3 Display();
193 3 }
194 2
195 2 /*******S3状态**********/
196 2 P1=0x00;
197 2 while(Time_SN>=0)
198 2 {
199 3 //Flag_SN_Yellow=0; //SN开黄灯信号位
200 3 x=1;
201 3 P1=P1|0x08; //保持EW红灯
202 3 Display();
203 3 }
204 2
205 2 /***********赋值*********/
206 2 EW=EW1;
207 2 SN=SN1;
208 2 EWL=EWL1;
209 2 SNL=SNL1;
210 2 /*******S4状态**********/
211 2 SN_ManRed=1; //SN人行道禁止
212 2 SN_ManGreen=0;
213 2 EW_ManRed=0;
214 2 EW_ManGreen=1; //EW人行道通行
215 2 Flag_SN_Yellow=0; //SN关黄灯显示信号
216 2 Time_EW=SN;
217 2 Time_SN=EW;
218 2 while(Time_EW>=5)
219 2 {
220 3 P1=S[4]; //EW通行,SN红灯
221 3 Display();
222 3 }
223 2
224 2 /*******S5状态**********/
225 2 P1=0X00;
226 2 while(Time_EW>=0)
227 2 {
228 3 Flag_EW_Yellow=1;//EW开黄灯信号位
229 3 P1=P1|0x80; //保持SN红灯
230 3 Display();
231 3 }
232 2
233 2 /*******S6状态**********/
234 2 SN_ManRed=1; //SN人行道禁止
235 2 SN_ManGreen=0;
236 2 EW_ManRed=1; //EW人行道禁止
237 2 EW_ManGreen=0;
238 2 Flag_EW_Yellow=0;//EW关黄灯显示信号
239 2 Time_EW=EWL;
240 2 while(Time_EW>=5)
241 2 {
C51 COMPILER V8.05a BIYESHEJI 10/31/2012 22:38:17 PAGE 5
242 3 P1=S[6]; //EW左拐绿灯亮,SN红灯
243 3 Display();
244 3 }
245 2
246 2 /*******S7状态**********/
247 2 P1=0X00;
248 2 while(Time_EW>=0)
249 2 {
250 3 //Flag_EW_Yellow=0; //EN开黄灯信号位
251 3 y=1;
252 3 P1=P1|0x80; //保持SN红灯
253 3 Display();
254 3 }
255 2
256 2 /***********赋值********/
257 2 EW=EW1;
258 2 SN=SN1;
259 2 EWL=EWL1;
260 2 SNL=SNL1;
261 2 }
262 1 }
263
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 531 ----
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 + -