找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6553|回复: 14
收起左侧

51单片机控制模拟交通信号灯源代码原理图PCB工程文件

  [复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
ID:719754 发表于 2020-10-30 20:04 | 显示全部楼层 |阅读模式
采用单片机的I/O口PO口通过上拉电阻和交通灯相连接,P3.0、P3.1口接到数码管控制位上,控制数码管的显示,程序放在STC89C52RC单片机的ROM中,在十字路口的四组红、黄、绿交通灯中,由单片机的 P1.0-P1.2 、P1.5-P1.7、P2.0-P2.2、P2.5-P2.7控制,由于交通灯为发光二极管且阳极通过限流电阻和电源正极相连,因此I/0口输出低电平时,与之相连的指示灯会亮,并通过数码管显示时间倒计时。I/0口输出高电平时,相应指示灯会灭。当交通出现障碍需要恢复到初始状态时,按下复位键即可,此键由单片机的9脚RST键控制。

制作出来的实物图如下:
1604058595971.jpg

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

主函数:
//主程序
void main()
{
        TMOD=0X11;                                           //定时器设置
        TH1=0X3C;               
        TL1=0XB0;
        TH0=0X3C;                                        //定时器0置初值 0.05S
        TL0=0XB0;
        EA=1;                                                //开总中断
        ET0=1;                                                //定时器0中断开启
        ET1=1;                                           //定时器1中断开启
        TR0=1;                                                //启动定时0
        TR1=0;                                                         //关闭定时1
        EX0=1;                                                //开外部中断0
        EX1=1;                                                //开外部中断1

        P1=0X21;                                        // 开始默认状态,东西绿灯,南北黄灯   
    sec_nb=sec_dx+5;                         //默认南北通行时间比东西多5秒
        while(1)                                          //主循环
        {         
                key();                                         //调用按键扫描程序
                display();                                 //调用显示程序
        }        
}
//函数的定义部分
void key(void)        //按键扫描子程序
{         
        
if(k1!=1)                                                        //当K1(禁止)键按下时
        {
                   display();                                       //调用显示,用于延时消抖
                   if(k1!=1)                                                //如果确定按下
                   {         
                    TR0=0;                                                //关定时器
                        P1=0X00;
                        Red_dx=1;
                        Red_nb=1;                                        //全部置红灯
                        TR1=0;
                        sec_dx=00;                                        //四个方向的时间都为00
                        sec_nb=00;
                        do
                        {
                                display();                                 //调用显示,用于延时
                        }        
                        while(k1!=1);                        //等待按键释放        
                   }
        }
        if(k2!=1)                                                        //当K2(确认)键按下时
        {        
                display();                                       //调用显示,用于延时消抖
                if(k2!=1)                                                //如果确定按下
                {
                        TR0=1;                                                  //启动定时器0
                        sec_nb=set_timenb;                                //从中断回复,仍显示设置过的数值
                        sec_dx=set_timedx;                                //显示设置过的时间
                        TR1=0;                                                          //关定时器1        
                        if(set==0)                                                //时间倒时到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;
                        }
                }
        }        
}
51hei.png

全部资料51hei下载地址:
交通灯.zip (16.79 MB, 下载次数: 128)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:719754 发表于 2020-10-30 20:05 | 显示全部楼层
完整程序代码,仿真图,电路图及pcb图都在压缩包里
回复

使用道具 举报

ID:836287 发表于 2020-11-3 14:47 | 显示全部楼层
黄灯不显示么
回复

使用道具 举报

ID:838284 发表于 2020-11-3 15:31 | 显示全部楼层
试试黄灯
回复

使用道具 举报

ID:825397 发表于 2020-11-3 21:04 | 显示全部楼层
厉害,做工漂亮,赞一个
回复

使用道具 举报

ID:840329 发表于 2020-11-7 21:20 | 显示全部楼层
黄灯去哪里了
回复

使用道具 举报

ID:841235 发表于 2020-11-9 21:08 | 显示全部楼层
黄灯没有吗?
回复

使用道具 举报

ID:582903 发表于 2020-11-13 10:14 | 显示全部楼层
黄灯跑哪里了?
回复

使用道具 举报

ID:843212 发表于 2020-11-13 18:55 | 显示全部楼层
今天刚学到,还看不大懂
回复

使用道具 举报

ID:828858 发表于 2020-11-26 09:43 | 显示全部楼层
包里有源码吗?
回复

使用道具 举报

ID:851698 发表于 2020-12-1 08:49 | 显示全部楼层
没有黄灯吗
回复

使用道具 举报

ID:924305 发表于 2021-5-27 09:20 | 显示全部楼层
这个功能挺全的哈
回复

使用道具 举报

ID:933744 发表于 2021-6-6 16:14 | 显示全部楼层

怎么打开啊,我下载了打不开
回复

使用道具 举报

ID:328014 发表于 2021-6-6 16:52 | 显示全部楼层
djdjjdjdjj 发表于 2021-6-6 16:14
怎么打开啊,我下载了打不开

先安装Proteus8.8,双击就打开了 如图
51hei.png
回复

使用道具 举报

ID:754395 发表于 2021-6-29 02:22 | 显示全部楼层
准备做一个玩了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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