单片机实验——改进型交通信号灯设计,交通信号系统是保障交通安全高效的重要设施,为了利于司机更好的判断,很多交通信号灯系统在原来的系统基础上设置了倒计时显示器。本实验利用7段数码管作倒计时显示器

  • 实验内容及要求

交通信号系统是保障交通安全高效的重要设施,为了利于司机更好的判断,很多交通信号灯系统在原来的系统基础上设置了倒计时显示器。本实验利用7段数码管作倒计时显示器,设计一个改进型的交通信号灯系统,要求如下:

  1. 本设计用于南北、东西向交叉的十字路口,每组信号灯由红、黄、绿三个信号灯组成,倒计时为10秒以内,信号灯的显示规则参照真实的交通信号灯,如图所示:

  1. 信号灯有三种工作模式,分别是:正常工作模式、全黄闪模式、全红模式。正常模式工作过程为:两个方向的信号灯依次:绿高亮10s—>黄灯闪3次,每次1sà红灯亮10s,两个方向的信号交替进行;全黄闪模式工作过程为两个方向的黄灯同时闪烁,为慢行状态;全红模式为两个方向的红灯同时亮,为禁止通行模式。注意:延时用定时器实现。
  2. 模式切换通过设计按扭进行。
  3. 在keil中利用C51进行程序设计,利用ptotues设计电路并进行仿真。
  • 涉及的主要知识点

  1. C51程序设计。
  2. 7段数据管的编码与显示原理。
  3. Keil及protues软件的使用。
  4. 定时器/计数器原理。
  • 提示及预备知识

  1. 以LED灯作为信号灯,以IO口进行驱动。
  2. 输入对应IO的电平判断按钮的状态。
  3. 定时器的方式进行延时,可参考书上的例子,如实例1。
  4. 参考流程图如下:

实物图如下:

 

部分代码:

#include <REGX51.H>

	char arr[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//½«0~9µÄÊý×Ö´æÈëarrÊý×éÖÐ

    //ÑÓʱ1msµÄ´úÂë
void Delay(unsigned int time)
{
	  unsigned int j=0;
	 for ( ;time;time--)
	for(j=0;j<125;j++);
}
	
     //ÓÉÄÏÏò±±µÄaÃëµÄµ¹¼Æʱ
void Time1(unsigned int a){
		   char i;
			 for(i=a;i>=0;i--){
			 P3=arr[i];
			 Delay(1000);
			 }
		}
				//ÓÉÎ÷Ïò¶«µÄbÃëµ¹¼Æʱ
void Time2(unsigned int b){
		   char i;
			 for(i=b;i>=0;i--){
			 P1=arr[i];
			 Delay(1000);
			 }
		}
	
void main(){
		unsigned int i;
		//ÏÈÈÃËùÓеĵÆϨÃð
		P2_0=0;
		P2_1=0;
		P2_2=0;
		P2_3=0;
		P2_4=0;
		P2_5=0;
		P3=0;
		P1=0;
	while(1){
	//»ÆµÆÉÁ˸
	if(P2_6==0)//P2_6¿ØÖƻƵÆÉÁ˸µÄ¿ª¹Ø±ÕºÏ 
				{
				P2_3=0;
				while(1)
				{
				 
				 P2_1=1;
				 P2_4=1;
				 Delay(1000);//ÑÓʱ1S 
				 P2_1=0;
				 P2_4=0;
				 Delay(1000);//ÑÓʱ1S 
				 if(P2_6!=0)
				 break;
				}
				}
				//È«ºì
				if(P2_7==0){//P2_7¿ØÖƺìµÆµÄ¿ª¹Ø±ÕºÏ 
				while(1){
				  P3=arr[0];   //ָʾµÆÁÁ0
					P1=arr[0];
				  P2_0=1;
					P2_3=1;
					if(P2_7!=0){
					P2_0=0;
					P2_3=0;
					break;}
					}
				}
				P2_3=1;//ʹÓÉÎ÷¶«µÄ·¿ÚÏòÁÁºì
		  P2_2=1;
			Time1(9);
			P2_2=0;
			for(i=0;i<3;i++){
					P2_1=1;
					P3=arr[3-i];
					Delay(1000);//»ÆµÆÿ1sÉÁÒ»´Î 
					P2_1=0;
					P3=0;
					Delay(1000);
			}
			P2_0=1;   //ÓÉÄÏÏò±±µÄºìµÆ¿ªÊ¼ÁÁ  
			
			//ÓÉÎ÷Ïò¶«µÄÐźŵÆ
			P2_3=0;
			P2_5=1;
			Time2(9);  //Â̵ÆÁÁµ¹¼Æʱ10s
			P2_5=0;
			//»ÆµÆÉÁÈý´Î
			for(i=0;i<3;i++){
					P2_4=1;
					P1=arr[3-i];
					Delay(1000);//ÑÓʱ1s 
					P2_4=0;
					P1=0;
					Delay(1000);
			}
			P2_3=1;
			P2_0=0;
		}
}


运行结果:

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杪商柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值