找回密码
 立即注册

QQ登录

只需一步,快速开始

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

两位数码管显示器控制交通灯,c语言

[复制链接]
跳转到指定楼层
楼主
ID:151605 发表于 2016-12-2 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
bit flag;
sbit red1_1=P1^0;   //南北红灯D1
sbit yel1_1=P1^1; //南北黄灯D2
sbit gre1_1=P1^2; //南北绿灯D3
sbit red1_2=P1^3; //南北红灯D4
sbit yel1_2=P1^4; //南北黄灯D5
sbit gre1_2=P1^5; //南北绿灯D6

sbit red2_1=P1^6; //东西红灯D7
sbit yel2_1=P1^7; //东西黄灯D8
sbit gre2_1=P0^0; //东西绿灯D9
sbit red2_2=P0^1; //东西红灯D10
sbit yel2_2=P0^2; //东西黄灯D11
sbit gre2_2=P0^3; //东西绿灯D12

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
uchar n,n1,aa=0,shi,ge,shi1,ge1;
void init();
void xianshi1(uchar shi,uchar ge);
void xianshi2(uchar shi1,uchar ge1);
void delay(uchar z)
{
  uchar x,y;
  for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}
main()
{
   n=30;
     shi=n/10;
  ge=n;
     n1=30;
     shi1=n1/10;
  ge1=n1;

    init();
   while(1)
      {
      if(flag!=1)
       xianshi1(shi,ge);
    else
            xianshi2(shi1,ge1);

   }
}

void xianshi1(uchar shi,uchar ge)
{
     P3=0x02;
     P2=tab[ge];
     delay(200);
     P3=0x01;
     P2=tab[shi];
     delay(200);
}


void xianshi2(uchar shi1,uchar ge1)
{
  P3=0x08;
  P2=tab[ge1];
     delay(200);
     P3=0x04;
     P2=tab[shi1];
     delay(200);

}

void init()
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%6;
  EA=1;
  ET0=1;
  TR0=1;
}

void timer0() interrupt 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%6;
  aa++;
     if(flag!=1)
       {
    if(aa==20)
       {
          aa=0;
                      red1_1=0;red1_2=0;
                      gre2_1=0;gre2_2=0; //启动南北红灯1和东西绿灯2   

         n--;
                   shi=n/10;
          ge=n;

                if(n<=3)
                    {
       red1_1=0;red1_2=0;
       gre2_1=1;gre2_2=1;
                      yel2_1=0;yel2_2=0;//启动南北红灯1和东西黄灯2

                     if(n<=0)
            {
                        n=30;         
                           red1_1=1;red1_2=1;
         gre1_1=0;gre1_2=0;
         yel2_1=1;yel2_2=1;
         red2_1=0;red2_2=0;//启动南北绿灯1和东西红灯2

                        TR0=0;
                           TH0=(65536-50000)/256;
                        TL0=(65536-50000)%6;
            TR0=1;
                           aa++;
            flag=1;

                 }
                     }
                 }
       }
     else
     {
        if(flag==1)
          {  
            //   TH0=(65536-50000)/256;
         //   TL0=(65536-50000)%6;
         //   TR0=1;
            //   aa++;
            if(aa==20)
       {
             aa=0;                     
                   n1--;
                   shi1=n1/10;
                    ge1=n1;
          if(n1<=3)
           {
    gre1_1=1;gre1_2=1;
              yel1_1=0;yel1_2=0;
             red2_1=0;red2_2=0;//启动南北黄灯1和东西红灯2

                 if(n1<=0)
         {
            n1=30;
                           yel1_1=1;yel1_2=1;
                           red2_1=1;red2_2=1;

                 TR0=0;
                TH0=(65536-50000)/256;
                TL0=(65536-50000)%6;
                TR0=1;
                  flag=0;
                }
                    }
                 }
          }
      }
}


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

使用道具 举报

沙发
ID:254193 发表于 2017-11-27 15:24 来自手机 | 只看该作者
有原理图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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