找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1481|回复: 1
打印 上一主题 下一主题
收起左侧

单片机交通灯怎么在黄灯的时候加上报警灯(就是提示音)

[复制链接]
跳转到指定楼层
楼主
ID:824472 发表于 2020-11-3 08:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码如下
#include <reg52.h>
#define uchar  unsigned char
#define uint   unsigned int
//数码管共阳极/*0,1,2,3,4,5,6,7,8,9,A,b,C,*/
uchar code SEG7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//数码管位码
sbit      q1=P3^0;
sbit      q2=P3^1;
sbit      q3=P3^4;
sbit      q4=P3^5;
//红绿黄灯端口定义--------东西红灯
sbit      hong=P2^0;
//红绿黄灯端口定义--------东西黄灯
sbit      huang=P2^1;
//红绿黄灯端口定义--------东西绿灯
sbit      lv=P2^2;
//红绿黄灯端口定义--------南北红灯
sbit      hong1=P2^3;
//红绿黄灯端口定义--------南北黄灯
sbit      huang1=P2^4;
//红绿黄灯端口定义--------南北绿灯
sbit      lv1=P2^5;
//定义变量------倒计时变量
uint t1=15;
//定义变量------南北延时时间
uint time=15;
uint time1=15;
//定义变量------定时器计时变量
uint jishu1=0;
//定义变量------执行步骤标志位
uchar bz=0;
//定义变量------运行标志
uchar yunxing=1;
//定义变量------显示倒计时时间变量
uint  jishu3=0;
//延时函数ms
void _delay_ms(uint i)
{
  uchar j;
  for(;i>0;i--)
  {
   for(j=0;j<120;j++);
  }
}
//显示倒计时函数-----倒计时秒显示
void dispaly()
{   
  //显示倒计时十位--东西  
  P1=SEG7[t1%100/10];q1=1;_delay_ms(2);q1=0;
  //显示倒计时个位--东西  
  P1=SEG7[t1%10];q2=1;_delay_ms(2);q2=0;

  //显示倒计时十位--南北  
  P1=SEG7[t1%100/10];q3=1;_delay_ms(2);q3=0;
  //显示倒计时个位--南北  
  P1=SEG7[t1%10];q4=1;_delay_ms(2);q4=0;
}
//主函数
void main()   
{ //-------定时器0配置
  TMOD=0x01;        //方式1
  //使能定时器0
  ET0=1;
  //定时器的初值
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  //停止开启定时器0
  TR0=1;
  //使能中断  
  EA=1;
  while(1)
  {         
    //显示交通灯运行
    if(yunxing==1)
         {
          dispaly();
          //东西红灭  黄灭 绿亮
          //南北红亮  黄灭 绿灭
          if(bz==0)
          {
            hong=1; huang=1;  lv=0;
            hong1=0;huang1=1;lv1=1;
            if(t1==0){bz=1;t1=3;}
          }
          //东西红灭  黄闪 绿灭
          //南北红亮  黄灭 绿灭
          if(bz==1)
          {
           if(jishu1<10){hong=1;  huang=0; lv=1;}         
           if(jishu1>10){hong=1;  huang=1; lv=1;}         
           hong1=0; huang1=1;lv1=1;
           if(t1==0){bz=2; t1=time1; }
          }
          //东西红亮  黄灭 绿灭
          //南北红灭  黄灭 绿亮
          if(bz==2)
          {
           hong=0;   huang=1;lv=1;  
           hong1=1;  huang1=1;lv1=0;         
           if(t1==3){bz=3;t1=3;}
          }
          //东西红亮  黄灭 绿灭
          //南北红灭  黄闪 绿灭         
          if(bz==3)
          {
           hong=0;huang=1;lv=1;           
           if(jishu1<10){hong1=1; huang1=0;lv1=1;}
           if(jishu1>10){hong1=1; huang1=1;lv1=1;}
           if(t1==0){bz=0; t1=time1; }
          }
        }
   }
}


//定时器0中断服务函数用于倒计时变量减去1--到达1s后倒计时减去1                 
void  Time0() interrupt 1
{
  //重装初值50ms;
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;
  //时间缓冲+1;
  jishu1=jishu1+1;
  if(jishu1>19)
  {jishu1=0;if(t1>0)t1=t1-1;}

}

交通灯倒计时.rar

20.55 KB, 下载次数: 11

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2020-11-3 14:37 | 只看该作者
这个很简单,加一个蜂鸣器,然后在黄灯闪的程序后面置1就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表