登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 245驱动交通灯

[复制链接]
发表于 2022-2-19 12:04:16 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 51单片机
学习安排: 制作交通灯
开始时间: 2022-02-09
结束时间: 2022-02-18
这个交通灯是在姐姐的帮助下完成的,因为我用的一直是电开发的单片机嘛,所以对这个交通灯所用的STC89C51RC不是很熟悉。首先是购买元件,在网上购买了一套交通灯的元件,店家还赠送了原理图,然后就是根据原理图焊接(老费眼了),焊接部分花了很多时间。最后是程序方面,我找了很多博主的程序进行参考,然后在姐姐的帮助下完善程序。这个交通灯可以通过按键调整红绿灯时间,进入禁止通行状态(全红灯),切换红绿灯方向等。

实物




程序(一部分)

#include <reg51.h>                               
#define uchar unsigned char
#define uint  unsigned int               

uchar data buf[4];                                       
uchar data sec_dx=20;                         
uchar data sec_nb=30;                       
uchar data set_timedx=20;               
uchar data set_timenb=30;               
int n;
uchar data countt0,countt1;

sbit  k4=P3^7;      
sbit  k1=P3^5;               
sbit  k2=P3^6;               
sbit  k3=P3^4;               
sbit  k5=P3^1;               
sbit  k6=P1^5;               


sbit Red_nb=P2^6;               
sbit Yellow_nb=P2^5;       
sbit Green_nb=P2^4;   

sbit Red_dx=P2^3;               
sbit Yellow_dx=P2^2;       
sbit Green_dx=P2^1;               
               
bit set=0;                       
bit dx_nb=0;                       
bit shanruo=0;                       
bit yejian=0;                       

uchar code table[11]={       
        0x3f,  
        0x06,
        0x5b,  
        0x4f,  
        0x66,
        0x6d,  
        0x7d,  
        0x07,  
        0x7f,  
        0x6f,  
        0x00  
};


void delay(int ms);                       
void key();                                       
void key_to1();                       
void key_to2();
void key_to3();
void display();               
void Buzzer();

void main()
{
        TMOD=0X11;                          
        TH1=0X3C;               
        TL1=0XB0;
        TH0=0X3C;                       
        TL0=0XB0;
        EA=1;                               
        ET0=1;                       
        ET1=1;                               
        TR0=1;                                       
        TR1=0;                                       
        EX0=1;                               
        EX1=1;                                               
        P2=0Xc3;                               
        sec_nb=sec_dx+5;                
        while(1)                               
        {         
                key();                        
                display();                        
        }       
}


void key(void)       
{         
        if(k1!=1)               
        {
                display();              
                if(k1!=1)                                               
                {
                          TR0=0;                                      
                        shanruo=0;                               
                        P2=0x00;                                       
                        TR1=0;                                               
                        if(set==0)                               
                                set_timedx++;          
                        else
                                set_timenb++;           
                        if(set_timenb==100)
                                set_timenb=1;
                        if(        set_timedx==100)
                                set_timedx=1;          
                        sec_nb=set_timenb ;        
                        sec_dx=set_timedx;                       
                          do
                         {
                                display();                               
                        }
                        while(k1!=1);               
                }
        }

        if(k2!=1)                                               
        {               
                display();                              
                if(k2!=1)                                       
                {       
                         TR0=0;                                
                        shanruo=0;                               
                        P2=0x00;                       
                        TR1=0;                       
                        if(set==0)
                                set_timedx--;                 
                        else
                                set_timenb--;                 
                        if(set_timenb==0)
                                set_timenb=99;       
                        if(        set_timedx==0 )
                                set_timedx=99;          
                        sec_nb=set_timenb ;       
                        sec_dx=set_timedx;
                          do       
                    {
                                display();              
                        }
                        while(k2!=1);               
                }
        }

        if(k3!=1)                       
        {       
                display();                              
                if(k3!=1)                               
                {
                        TR0=1;                                 
                        sec_nb=set_timenb;                       
                        sec_dx=set_timedx;                       
                        TR1=0;                                       
                        if(set==0)                               
                        {
                                P2=0X00;                               
                                Green_dx=1;                               
                                Red_nb=1;                               
                                sec_nb=sec_dx+5;                
                        }
                        else
                        {
                                P2=0x00;                       
                                Green_nb=1;
                                Red_dx=1;
                                sec_dx=sec_nb+5;
                        }
                }
        }
         
        if(k4!=1)       
        {                               
                display();                              
                if(k4!=1)                               
                {  
                         TR0=0;                                       
                        set=!set;                               
                        TR1=0;                               
                        dx_nb=set;
                        do
                        {
                                display();                        
                        }                               
                        while(k4!=1);               
                }
        }       

        if(k5!=1)                                       
        {
                   display();                      
                   if(k5!=1)                               
                   {        
                    TR0=0;                               
                        P2=0x00;                       
                        Red_dx=1;
                        Red_nb=1;                       
                        TR1=0;
                        sec_dx=00;                       
                        sec_nb=00;
                        do
                        {
                                display();                
                        }       
                        while(k5!=1);               
                   }
        }
        if(k6!=1)                               
        {
                   display();                              
                   if(k6!=1)                               
                   {        
                    TR0=0;                               
                        P2=0x00;
                        TR1=1;
                        sec_dx=00;                       
                        sec_nb=00;
                        do
                        {
                                display();                
                        }       
                        while(k6!=1);               
                   }
        }
}

void display(void)
{               
        buf[1]=sec_nb/10;        
        buf[2]=sec_nb%10;        
        buf[3]=sec_dx/10;                
        buf[0]=sec_dx%10;                        
        P1=0xff;                 
        P0=0x00;                       
        P1=0xfe;                          
        P0=table[buf[1]];                               
        delay(1);                       
        P1=0xff;                       
        P0=0x00;                       
                                                  
        P1=0xfd;         
        P0=table[buf[2]];               
        delay(1);                       
        P1=0xff;                       
        P0=0x00;               
        P1=0Xfb;                  
        P0=table[buf[3]];       
        delay(1);                       
        P1=0xff;               
        P0=0x00;                       
        P1=0Xf7;                       
        P0=table[buf[0]];       
        delay(1);               
}

QQ图片20220219120304.jpg
QQ图片20220219120309.jpg
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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