该交通灯能够实现对复杂路口交通灯的控制,每个方向都包括直行、左转、右转方向以及人行横道红、黄、绿三色指示灯,每个方向均设有两位数数码管显示倒计时的功能。通过中断设置有四个按键,分别行使时间加、时间减、东西方向强制通行、南北方向强制通行的功能。
部分单片机源程序:- /***************************************************
- 项目:复杂路口交通灯
- 功能:本程序能够实现对复杂路口交通灯的控制,每个方向
- 都包括直行、左转、右转方向以及人行横道红、黄、
- 绿三色指示灯,每个方向均设有两位数数码管显示倒
- 计时的功能。通过中断设置有四个按键,分别行使时
- 间加、时间减、东西方向强制通行、南北方向强制通
- 行的功能。
- 姓名:醉清风
- 注意:各端口意义详见注释!
- ***************************************************/
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- /*****定义控制位**********************/
- sbit EW_LED2=P2^3; //EW_LED2控制位
- sbit EW_LED1=P2^2; //EW_LED1控制位
- sbit SN_LED2=P2^1; //SN_LED2控制位
- sbit SN_LED1=P2^0; //SN_LED1控制位
- sbit SNstraight_Green=P1^3; //南北直行绿灯
- sbit EWstraight_Green=P1^0; //东西直行绿灯
- sbit SNstraight_Yellow=P1^4; //南北直行黄灯
- sbit EWstraight_Yellow=P1^1; //东西直行黄灯
- sbit SNstraight_Red=P1^5; //南北直行红灯
- sbit EWstraight_Red=P1^2; //东西直行红灯
- sbit SNright_Green=P2^7; //南北右拐绿灯
- sbit EWright_Green=P1^6; //东西右拐绿灯
- sbit SNright_Red=P3^4; //南北右拐红灯
- sbit EWright_Red=P2^4; //东西右拐红灯
- sbit SNleft_Green=P3^5; //南北左拐绿灯
- sbit EWleft_Green=P2^5; //东西左拐绿灯
- sbit SNleft_Red=P3^7; //南北左拐红灯
- sbit EWleft_Red=P2^6; //东西左拐红灯
- sbit SNturn_Yellow=P3^6; //南北转向黄灯
- sbit EWturn_Yellow=P1^7; //东西转向黄灯
-
- sbit Time_Button=P3^0; //时间加减按钮判断输入端
- sbit QZ_Button=P3^1; //强制通行方向判断输入端
- bit Flag_SNstraight_Yellow; //SN直行黄灯标志位
- bit Flag_EWstraight_Yellow; //EW直行黄灯标志位
- bit Flag_SNturn_Yellow; //SN转向黄灯标志位
- bit Flag_EWturn_Yellow; //EW转向黄灯标志位
- bit QZ_EW; //EW强制通行标志
- bit QZ_SN; //SN强制通行标志
- bit QZ_flag; //数码管强制标志
- char Time_EW; //东西方向倒计时单元
- char Time_SN; //南北方向倒计时单元
- uchar EW=30,SN=30,EWL=60,SNL=60; //倒计时时长</div><div>uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0~~~~9段选码
- /*********************延时函数**********************/
- void Delay(uchar a)
- {
- while(a--);
- }
- /*******************显示函数,显示倒计时的值**********************/
- void Display(void)
- {
- char h,l;
- h=Time_EW/10; //EW方向计时的十位数
- l=Time_EW%10; //EW方向计时的个位数
- P0=table[l]; //显示EW计时时间的低位
- EW_LED2=1;
- Delay(2);
- EW_LED2=0;
- P0=table[h]; //显示EW计时时间的高位
- EW_LED1=1;
- Delay(2);
- EW_LED1=0;</div><div> h=Time_SN/10; //SN方向计时的十位数
- l=Time_SN%10; //SN方向计时的个位数
- P0=table[l]; //显示SN计时时间的低位
- SN_LED2=1;
- Delay(2);
- SN_LED2=0;
- P0=table[h]; //显示SN计时时间的高位
- SN_LED1=1;
- Delay(2);
- SN_LED1=0;
-
- }
- /*******************显示函数,强制通行的值**********************/
- void Display1(void)
- {
- P0=table[8];
- if(QZ_flag==1)
- {
- EW_LED2=1;
- EW_LED1=1;
- SN_LED2=1;
- SN_LED1=1;
-
- }
- else
- {
- EW_LED2=0;
- EW_LED1=0;
- SN_LED2=0;
- SN_LED1=0;
- }
-
-
复制代码
全部资料51hei下载地址:
复杂路口交通灯设计.zip
(100.61 KB, 下载次数: 141)
|