功能
1、本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机
2、数码管倒计时显示时间。
3、东西和南北方向各有两个数码管,分别显示时间,东西和南北的时间是不一样的哦,要相差黄灯的时间才是正确的。
4、可以分别设置主干道和支干道的通行时间。
5、有紧急模式,可以特种车辆优先通行或交通事故应急处理。
操作说明
按键依次功能:黄灯长亮(深夜模式)、红灯长亮(禁行)、确定调时时间、时间加、时间减、切换调时方向(东西和南北均可以分别设置通行时间)。单独的是复位按键。
参考论文
原理图
程序源代码
//主程序 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 logo(); //开机初始化 P2=0Xc3; // 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5; //默认南北通行时间比东西多5秒 while(1) //主循环 { key(); //调用按键扫描程序 display(); //调用显示程序 } } //函数的定义部分 void key(void) //按键扫描子程序 { if(k1!=1) //当K1(时间加)按下时 { display(); //调用显示,用于延时消抖 if(k1!=1) //如果确定按下 { TR0=0; //关定时器 shanruo=0; //闪烁标志位关 P2=0x00; //灭显示 TR1=0; //启动定时1 if(set==0) //设置键按下 set_timedx++; //南北加1S else set_timenb++; //东西加1S if(set_timenb==100) set_timenb=1; if( set_timedx==100) set_timedx=1; //加到100置1 sec_nb=set_timenb ; //设置的数值赋给东西南北 sec_dx=set_timedx; do { display(); //调用显示,用于延时 } while(k1!=1); //等待按键释放 } } if(k2!=1) //当K2(时间减)按键按下时 { display(); //调用显示,用于延时消抖 if(k2!=1) //如果确定按下 { TR0=0; //关定时器0 shanruo=0; //闪烁标志位关 P2=0x00; //灭显示 TR1=0; //关定时器1 if(set==0) set_timedx--; //南北减1S else set_timenb--; //东西减1S if(set_timenb==0) set_timenb=99; if( set_timedx==0 ) set_timedx=99; //减到1重置99 sec_nb=set_timenb ; //设置的数值赋给东西南北 sec_dx=set_timedx; do { display(); //调用显示,用于延时 } while(k2!=1); //等待按键释放 } } if(k3!=1) //当K3(确认)键按下时 { display(); //调用显示,用于延时消抖 if(k3!=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; } } } if(k4!=1) //当K4(切换)键按下 { display(); //调用显示,用于延时消抖 if(k4!=1) //如果确定按下 { TR0=0; //关定时器0 set=!set; //取反set标志位,以切换调节方向 TR1=0; //关定时器1 dx_nb=set; do { display(); //调用显示,用于延时 } while(k4!=1); //等待按键释放 } } if(k5!=1) //当K5(禁止)键按下时 { display(); //调用显示,用于延时消抖 if(k5!=1) //如果确定按下 { TR0=0; //关定时器 P2=0x00; //灭显示 Red_dx=1; Red_nb=1; //全部置红灯 TR1=0; sec_dx=00; //四个方向的时间都为00 sec_nb=00; do { display(); //调用显示,用于延时 } while(k5!=1); //等待按键释放 } } if(k6!=1) //当K6(夜间模式)按下 { display(); //调用显示,用于延时消抖 if(k6!=1) //如果确定按下 { TR0=0; //关定时器 P2=0x00; TR1=1; sec_dx=00; //四个方向的时间都为00 sec_nb=00; do { display(); //调用显示,用于延时 } while(k6!=1); //等待按键释放 } } }
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6035文章
44554浏览量
634583 -
STC89C52
+关注
关注
41文章
330浏览量
82041 -
数码管
+关注
关注
32文章
1882浏览量
91060 -
智能交通灯
+关注
关注
0文章
15浏览量
9575
原文标题:【毕业设计004】-基于STC89C52的智能交通灯(程序、原理图、视频讲解、操作说明、参考lunwen)
文章出处:【微信号:精通单片机与嵌入式,微信公众号:精通单片机与嵌入式】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
怎样去设计基于STC89C52单片机的霓虹灯
基于STC89C52单片机的霓虹灯1、设计要求使用PWM驱动8个LED灯 人眼不能观察到灯光全灭 灯光要有动画效果2、设计概述 本实验所用芯片为ST
发表于 12-02 07:03
STC89C52单片机
STC89C52单片机,STC89C52STC89C52看到涛哥这篇文章了,纪念一下还在搞嵌入式的我们!硬件实物图实物抽象化的图为:这个STC89C52名字是什么意思呢?
发表于 11-23 17:06
•111次下载
STC89C52_51单片机_例程4_交通灯_C语言代码
STC89C52_51单片机_例程3_交通灯_C语言代码代码及文件下载链接审核通过后挂上交通灯需要设置一个flag标志位,当到达1s时调用d
发表于 11-23 17:06
•22次下载
基于STC89C52单片机的霓虹灯
基于STC89C52单片机的霓虹灯1、设计要求 使用PWM驱动8个LED灯 人眼不能观察到灯光全灭 灯光要有动画效果2、设计概述 本实验所用芯片为
发表于 11-23 17:21
•29次下载
STC89C52单片机器件手册
STC89C52系列单片机的内部结构框图如下图所示。STC89C52单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、I/
发表于 09-05 10:41
•8次下载
评论