×
单片机 > 单片机程序设计 > 详情

一款简洁的单片机交通灯程序

发布时间:2020-06-22 发布时间:
|
这是一款简洁的单片机交通灯程序,用了两只数码管进行倒计时显示,实现的:首先东西方向红灯50秒,此时南北绿灯50秒,并且数码管显示倒计时从49到00;然后所有方向的黄灯闪烁5秒,并且数码管显示5秒倒计时;接着东西绿灯35秒,此时南北红灯35秒,数码管显示35秒倒计时;再接着所有黄灯在闪烁5秒,数码管5秒倒计时;循环第1到第4步。程序源码:

#include
#define uint unsigned int
#define uchar unsigned char
sbit shiw=P3^0; //显示十位引脚声明
sbit gew=P3^1; //显示个位引脚声明
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//数码管显示编码
uint t0,shu,shi,ge,aa;
void display(uint shi,uint ge); //显示程序声明
void delay(uint z)//延时子程序http://www.5imcu.net/
{
   uint x,y;
   for(x=110;x>0;x--)
   for(y=z;y>0;y--);
}
void flicker()//黄灯闪烁子程序
{
  P0=0x1b;
  delay(10);
  P0=0xff;
  delay(10);
}
void init()//定时器初始化程序
{

   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)MOD256;
   EA=1;
   ET0=1;
   EX0=1;
   TR0=1;
}
void main()
{
   init();
   while(1)
   {
      P0=0x2e;
      shu=50;
      do  display(shi,ge); 
      while(aa<20*50);//东西红灯50S
      aa=0;TR0=1;

      shu=5;
      do {flicker();
      display(shi,ge);}
      while(aa<100);//黄灯闪烁5S
      aa=0;TR0=1;

      P0=0x35;
      shu=35;
      do  display(shi,ge);
      while(aa<20*35);//南北红灯35S
      aa=0;TR0=1;
      shu=5; 
      do {flicker();
      display(shi,ge);}
      while(aa<100);
      aa=0;TR0=1;//黄灯闪烁5S
   }
}
void timer0()interrupt 1 //定时器0中断子程序http://www.5imcu.net/
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)R56;
   t0++;
   aa++;
   if(t0==20)
   {
     t0=0;
     shu--;
     shi=shu/10;
     ge=shu;
     if(shu==0)
     {
       TR0=0;
     }
  }
}
void display(uint shi,uint ge)//显示子程序http://www.duankudp.com/
{
    P2=0x00;
    shiw=0;
    P2=table[shi];
    delay(1);
    shiw=1;

    P2=0x00;
    gew=0;
    P2=table[ge];
    delay(1);
    gew=1;

 

}

关键字:单片机  交通灯程序

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式