资源简介

简单的单片机交通灯
包含程序+proteus仿真
系统实现的功能:系统电路上电后
(一)东西方向显示绿灯时,南北方向显示红灯,持续20秒钟后,绿灯变为黄灯并持续3秒钟;
(二)然后东西方向显示红灯,南北方向显示绿灯,持续20秒钟后,绿灯变黄灯并持续3秒钟,然后循环反复。

资源截图

代码片段和文件信息

#include
#include
#define uint unsigned int
#define uchar unsigned char   //定义数据类型
uchar aa;
uint a;
  sbit GREEN_dx=P1^1;          //定义红绿灯
  sbit YELLOW_dx=P1^2;
  sbit RED_dx=P1^3;
  sbit GREEN_nb=P1^5;
  sbit YELLOW_nb=P1^6;
sbit RED_nb=P1^7;               
sbit shi=P3^6;                //十位个位
sbit ge=P3^7;                            
bit flag=0;

uchar code table[]={
0x3f0x060x5b0x4f
0x660x6d0x7d0x07
0x7f0x6f0x770x7c
0x390x5e0x790x71};         //共阴极数码管显示1-16

void delay(uint z);
void disp(uint n);
void nb_flash(void);
void dx_flash(void);
void nanbei();
void dongxi(); 

void main()
{
uint num;
num=0;
aa=0;
TMOD=0x01;           //定时器T0为方式一
TH0=(65536-50000)/256; //设置定时器初值,高八位
TL0=(65536-50000)%256; //低八位
EA=1;          //总中断允许
ET0=1;         //定时器T0允许溢出中断
TR0=1;         //启动定时器计数
    
while(1)        //循环等待
{
dongxi();  //东西绿灯,南北红灯
      dx_flash();//东西黄灯,南北红灯
nanbei(); //东西红灯,南北绿灯
nb_flash();//东西红灯,南北黄灯
        }
}

void delay(uint z)                //延时函数  
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void timer0() interrupt 1   //定时器T0         
{
TH0=(65536-50000)/256; //方式一重新赋初值
TL0=(65536-50000)%256;
aa++;//中断次数加一
if(aa==20)
{
aa=0;
flag=1;
}
TR0=1;         //启动定时器计数
}
void disp(uint n)             //    数码管显示函数  共阴极
{
  while(!flag)
  {
  ge=0;              //打开位选
  P0=table[n%10];    //个位
  delay(50);         //延时
  shi=1;ge=1;        //关闭位选
  shi=0;
  P0=table[n/10];
  delay(50);
  shi=1;
   }
  if(flag==1)
     flag=0;

}

void nanbei()          //南北显示函数
{ uint num;
  num=20;           //赋初值
while(num<=20&&num>0)
{   
disp(num);     //显示num
num--;         
RED_dx=1;YELLOW_dx=0; GREEN_dx=0;RED_nb=0;YELLOW_nb=0; GREEN_nb=1;//东西红南北绿
}
}
void dongxi()          
{ uint num;
  num=20;
while(num<=20&&num>0)
{   
disp(num);
num--;
RED_dx=0;YELLOW_dx=0; GREEN_dx=1;RED_nb=1;YELLOW_nb=0; GREEN_nb=0;//东西绿南北红

}
}
void nb_flash(void)            
{
uint a;
for(a=3;a>0;a--)//南北黄灯倒计时3s
{ RED_dx=1;YELLOW_dx=0; GREEN_dx=0;RED_nb=0;YELLOW_nb=1; GREEN_nb=0;//南北黄
 disp(a);
}
}
void dx_flash(void)              
{
uint a;
for(a=3;a>0;a--)//东西黄灯倒计时3s
{  
RED_dx=0;YELLOW_dx=1; GREEN_dx=0;RED_nb=1;YELLOW_nb=0; GREEN_nb=0;//东西黄
 disp(a);
}
}
















 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       20581  2020-03-04 21:12  Backup Of jtd.pdsbak
     文件        2769  2020-03-04 21:12  cx507.c
     文件        5932  2020-03-04 21:12  cx507.LST
     文件        7664  2020-03-04 21:12  cx507.OBJ
     文件         933  2020-03-04 21:12  jtd.build_log.htm
     文件        1945  2020-03-04 21:12  jtd.hex
     文件          25  2020-03-04 21:12  jtd.lnp
     文件        9899  2020-03-04 21:12  jtd.M51
     文件       20737  2020-03-04 21:12  jtd.pdsprj
     文件        2243  2020-03-05 16:05  jtd.pdsprj.DESKTOP-3DCG46F.dell.workspace
     文件        1183  2020-03-04 21:12  jtd.plg
     文件           0  2020-03-04 21:12  jtd.uv2.bak
     文件      137737  2020-03-05 16:13  jtd.uvgui.dell
     文件        9845  2020-03-05 16:13  jtd.uvopt
     文件       13839  2020-03-05 16:13  jtd.uvproj

评论

共有 条评论