找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机交通灯原理图加pcb工程文件+源程序

查看数: 7330 | 评论数: 7 | 收藏 7
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-10-14 20:55

正文摘要:

Altium Designer画的交通灯原理图和PCB图如下:(51hei附件中可下载工程文件)

回复

ID:1059607 发表于 2022-12-29 14:38
楼主有封装跟库没
ID:961087 发表于 2021-9-14 17:12
王披风 发表于 2021-9-14 14:16
你好,借鉴你的程序,我发现我烧到板子上之后发现数码管显示有问题,有时候好像显示不出来,有时候乱码。不 ...

已经解决了,我用数组显示的位选,成功了,感谢。
ID:961087 发表于 2021-9-14 14:16
你好,借鉴你的程序,我发现我烧到板子上之后发现数码管显示有问题,有时候好像显示不出来,有时候乱码。不知道什么原因。
#include <REGX52.H>
#define uchar  unsigned char
#define uint  unsigned int
#define ON   0
#define OFF  1
sbit dula=P2^6;
sbit wela=P2^7;
sbit NS_GRE = P1^5;     
sbit NS_YEL = P1^4;
sbit NS_RED = P1^3;   
sbit EW_GRE = P1^2;  
sbit EW_YEL = P1^1;  
sbit EW_RED = P1^0;
uchar flag=1;
#define YELTime 4   
#define EWTime  28+YELTime  
#define NSTime  16+YELTime  
uchar t=EWTime;
uchar tt=0;
sbit Key1=P3^4;  
sbit Key2=P3^5;
uchar keyflag=0;  
uchar table[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
#define EW_RED_ON()   do { EW_RED=ON;EW_GRE=OFF;EW_YEL=OFF; } while (0)
#define EW_YEL_ON()   do { EW_RED=OFF;EW_GRE=OFF;EW_YEL=ON; } while (0)
#define EW_GRE_ON()   do { EW_RED=OFF;EW_GRE=ON;EW_YEL=OFF; } while (0)
#define NS_RED_ON()   do { NS_RED=ON;NS_GRE=OFF;NS_YEL=OFF; } while (0)
#define NS_YEL_ON()   do { NS_RED=OFF;NS_GRE=OFF;NS_YEL=ON; } while (0)
#define NS_GRE_ON()   do { NS_RED=OFF;NS_GRE=ON;NS_YEL=OFF; } while (0)
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}
void display1(uchar num1,uchar num2)
{     
                P0=0xff;
                wela=1;
                P0=0xfc;
                wela=0;
               
                P0=0x00;
                dula=1;
                P0=table[num1];
                dula=0;
                delayms(3);
               
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
               
                P0=0x00;
                dula=1;
                P0=table[num2];
                dula=0;
                delayms(3);
}

void display2(uchar num3,uchar num4)
{   
         P0=0xff;
         wela=1;
         P0=0xef;
         wela=0;
         
         P0=0x00;
         dula=1;
         P0=table[num3];
         dula=0;
         delayms(3);
         
         P0=0xff;
         wela=1;
         P0=0xdf;
         wela=0;
         
         P0=0x00;
         dula=1;
         P0=table[num4];
         dula=0;
         delayms(3);
}

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

void KeyScan()
{        
        if (Key1==0)               
        {
                delayms(10);         
                if (Key1==0)      
                {
                        keyflag=1;      
                }
        }
        if (Key2==0)//¸′λ°′¼ü »Øμ½3õê¼×′쬠  
        {
                delayms(10);
                if (Key2==0)
                {
                        keyflag=0;        
                        flag=1;               
                        t=EWTime;
                }
        }
}

void main()                  
{
        INIT();      
        EA=1;               
        NS_GRE = OFF;        
        NS_YEL = OFF;
        NS_RED = OFF;   
        EW_GRE = OFF;  
        EW_YEL = OFF;  
        EW_RED = OFF;   
        P0 = 0xFF;      
  while(1)
  {
                KeyScan();
                if(flag==1)         
                {
                        display1(t/10, t%10);      
                        display2(t/10, t%10);      
                        EW_RED_ON();
                        NS_GRE_ON();
                if(t>4)        
                {
                        NS_GRE_ON();                    
                }
                if(t>=0&&t<5)    NS_YEL_ON();   
                if(t==0)        
                {
                        flag=0;        
                        t=NSTime;  
                }
                }
                if(flag==0)
                {
                        display1(t/10, t%10);      
                        display2(t/10, t%10);      
                        NS_RED_ON();               
                        if(t>4)
                        {
                                EW_GRE_ON();                  
                        }
                        if(t>=0&&t<5)        EW_YEL_ON();
                        if(t==0)
                        {
                                flag=1;
                                t=EWTime;         
                        }
                }
                if(keyflag == 1)
                {      
                        P0 = 0xFF;           
                        EW_RED_ON();        
                        NS_RED_ON();         
                        flag=2;                              
                }
        }
}
void timer1(void) interrupt 1
{               
        TH0=(65536-50000)/256;  
        TL0=(65536-50000)%256;
        tt++;
        if(tt==20)        
        {
                tt=0;
                t--;         
        }   
}           
ID:964399 发表于 2021-9-6 16:29
麻烦问一下,这个是单层板还是双层板
ID:320566 发表于 2019-10-28 19:27
感谢分享            
ID:426861 发表于 2019-10-28 10:24
感谢分享            
ID:624872 发表于 2019-10-28 08:10
这个正是我需要的 感谢楼主的共享

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

Powered by 单片机教程网

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