基于单片机C语言交通灯数码管显示的设计完整版
单片机课程设计交通灯(完整版)
门控串行数据输入
异步中央复位
符合 JEDEC 标准 no.7A
静电放电 (ESD) 保护:
·HBM EIA/JESD22-A114-B 超过 2000 V
·MM EIA/JESD22-A115-A 超过 200 V 。
多种封装形式
额定从-40 °C至 +85 °C和-40 °C至 +125 °C。
设计思想基于完成以上任务分析结合所学有关知识尤其是本学期所学关于单片机的中断系统和定时计数器的相关知识及应用我们知道对于15红绿黄四组各三盏灯的控制可以通过把这十二盏灯分别接到单片机的六个输出引脚若用p1口进行输出则分配如下at89c51l1l2l3l4l5l6东西红东西黄东西绿南北红南北黄南北绿led显示分布1642
亮灯规律:东西绿灯亮25s,南北红灯亮25s
东西绿灯闪5s,南北红灯亮5s
东西黄灯亮2s,南北红灯亮2s
东西红灯亮25s,南北绿灯亮25s
东西红灯亮5s,南北绿灯闪5s
东西红灯亮2s,南北黄灯亮2s
2.2.
(1)加强对单片机和汇编语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。
3.2.LED
3.2.1.七段数码显示器:
七段发光线段分别用a、b、c、d、e、f、g七个小写字母表示。
3.2.2.LED数码管:
半导体数码管又称LED数码管,是一种广泛使用的显示器件。LED有两种:共阳极型和共阴极型。
LED优点:亮度高、字形清晰,工作电压低(1.5~3V)、体积小、可靠性高、寿命长,响应速度极快。
1.引言
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
基于c语言单片机十字交通灯课程设计
课程设计报告课程名称:单片机课程设计报告题目:十字路口交通灯控制学生姓名:所在学院:专业班级:学生学号:指导教师:2013年12月25 日课程设计任务书交通灯控制系统的原理框图。
它主要由控制器、定时器、译码器和秒脉冲信号发生器等部分组成。
秒脉冲发生器是该系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制定时器和译码器的工作。
本系统采用单片机AT89C51为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。
本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。
本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、复位电路等几大部分组成。
系统除基本的交通灯功能外,还具有倒计时等功能,较好的模拟实现了十字路口可能出现的状况。
软件上采用C51编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序等。
经过整机调试,实现了对十字路口交通灯的模拟。
关键词:单片机AT89C51;运算器;控制器;译码器一、概述 (1)二、设计要求与原理器件介绍 (1)2.1、设计要求 (1)2.2、工作原理 (1)2.3、电路分析 (2)三、器件选择 (2)3.1、单片机选择 (2)3.2、编码器选择 (3)四、程序设计及总原理图 (4)4.1、程序设计 (4)4.2、总原理图 (6)五、结论与心得 (6)六、参考文献 (7)一、概述随着科学技术的发展,特别是计算机控制和电子技术以及大规模集成电路的迅速发展,使得现代电子设备得到广泛的应用。
其中,单片机作为微型计算机的一个重要的分支,受到人们的重视和关注,发展快速。
由于单片机具有抗干扰能力强,可靠性高,灵活性好,环境要求不高,价格低廉,开发容易等特点,它已经广泛地应用在工业自动化控制、自动检测、家用电器、电力电子等各个方面。
当然,在十字路口交通灯的控制系统中,也应用的非常的广泛。
基于单片机C语言交通灯数码管显示的设计完整版
基于单片机C语言交通灯数码管显示的设计完整版/* P2口位控口,P0口段控口, P1口按键,P3口发光二极管*/#include<reg52.h>#define uchar unsigned char#define uint unsigned int/*共阳数码管字型码数组*//*0,1,2,3,4,5,6,7,8,9,P.,灭*/char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x21,0xff};/*共阳数码管位控码数组〔从右往左点亮,反向驱动〕*/char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};char find_code[8];sbit S2=P1^0; //S1键启动交通灯控制器sbit S3=P1^1; //S2键回归“P.”状态sbit S4=P1^2; //S3键处理紧急状况uchar time;void DelayX1ms(uint count) //1ms延时函数{uint j;while(count--!=0){for(j=0;j<80;j++);}}/*********************显示函数*****************************/void disp(){char i;char k;for(i=0;i<8;i++){P2=weikong_code[i];k=find_code[i];P0=dis_code[k];DelayX1ms(1);}}/********************1s延时********************************/void delay1s(){TMOD=0X01;EA=1;ET0=1;TH0=0x3C; //定时器定时50MsTL0=0XB0;TR0=1;PT0=1;do{disp();} while(time!=20&&S3&&S4); //有条件转移TR0=0;time=0;}void time_() interrupt 1 //中断程序{time++;TH0=0x3C;TL0=0XB0;}/********************500ms函数********************************/ void delay500ms(){ TMOD=0X01;EA=1;ET0=1;TH0=0x3C;TL0=0XB0;TR0=1;PT0=1;do{disp();} while(time!=10); //有条件转移TR0=0;time=0;}/**************************紧急函数**************************/ void jinji(){uchar f;for(f=10;f>0;f--){P3=0x6F;find_code[1]=f/10;find_code[0]=f%10;delay500ms();delay500ms();disp();}}/**********************主函数******************************/ void main(){while(1){ char m,a; //上电显示“班级、学号”状态find_code[0]=9;find_code[1]=0;find_code[2]=10;find_code[3]=4;find_code[4]=0;find_code[5]=0;find_code[6]=1;find_code[7]=11;disp();while(!S2){while(S3){P3=0XAF;for(m=60;m>0&&(S3);m--){if(!S4)jinji();find_code[1]=m/10;find_code[0]=m%10;delay1s();disp();}for(a=3;a>0&&S3;a--){ if(!S4)jinji();find_code[1]=a/10;find_code[0]=a%10;P3=0xeF;delay500ms();P3=0xcF;delay500ms();disp();}P3=0X77;for(m=30;m>0&&(S3);m--){if(!S4)jinji();find_code[1]=m/10;find_code[0]=m%10;disp();delay1s();}for(a=3;a>0&&S3;a--)学习文档仅供参考{ if(!S4)jinji();find_code[1]=a/10;find_code[0]=a%10;P3=0X7F;delay500ms();P3=0X7B;delay500ms();disp();}}P3=0xFF;}}}。
单片机C语言交通灯设计
单片机C语言交通灯设计#include<reg52.h>/****************初始变量设定*****************/sbit p1_0=P1^0; //定义P0口的8位sbit p1_1=P1^1;sbit p1_2=P1^2;sbit p1_3=P1^3;sbit p1_4=P1^4;sbit p1_5=P1^5;sbit p0_0=P1^6;bit flag=0; //定义显示状态操纵位int ns_time; //定义东西,南北红黄绿各自的时刻初值分别为20,15,5秒int ew_time;int ns_time_red=20;int ns_time_green=15;int ns_time_yellow=5;int ew_time_red=20;int ew_time_green=15;int ew_time_yellow=5;char point=20; //定时的操纵次数初值设定int a=0; //南北,东西两方向切换状态标志初值设定/**************延时子函数**************/delay(int t) //延时子函数{while(t--);}/*************显示子函数***************/display(int ew_time,int ns_time) //显示子函数{char table[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //共阳极数码显示0-9对应的字型码char i,a[4];a[2]=ns_time%10; //南北时刻个位数赋值给a[2]a[3]=ns_time/10; //南北时刻十位数赋值给a[3]a[0]=ew_time%10; //东西时刻个位数赋值给a[0]a[1]=ew_time/10; //东西时刻个位数赋值给a[1]SM1=0;SM0=0; //串行口工作方式0设定for(i=3;i>=0;i--) //分别将4位数送到SBUF区域{SBUF=table[a[i]];while(!TI) ; //判定是否发送完一个数据TI=0; //假设发送完,0赋给TI}/*************主函数*************/void main(void){TMOD=0x01; //设置定时方式1TH0=0x3c; //定时初值50MSTL0=0xb0;TR0=1; //T0溢出中断要求开启EA=1; //总中断开启ET0=1; //T0中断开启EX0=1; //外部中断INT0开启IT0=1; //设置开关下降沿有效EX1=1; //外部中断INT0开启IT1=1; //设置开关下降沿有效ns_time=ns_time_green; //东西南北红黄绿灯时刻赋值ew_time=ew_time_red;ew_time_red=ns_time_green+ns_time_yellow;if(!a) //a=0,东西显示19开始倒计时,南北14开始倒计时{ns_time=ew_time_red;ew_time=ns_time_green+ns_time_yellow;}while(!a) //a=0,进入循环{if(ew_time-5>0){while(!flag);display(ew_time,ew_time-5); //flag=1,显示东西19,南北14P1=0xdd; //南北绿灯,东西红灯flag=0;}if(ew_time<=5) //东西时刻<=5时,南北黄灯闪耀,东西红灯{while(!flag);flag=0;display(ns_time,ns_time); //东西,南北均从5开始倒计时显示P1=0xdf; //东西红灯,南北黄灯一亮一灭显示/*p1_4=0;*/delay(5000);p1_0=~p1_0; //南北黄灯所在位,对应取反,实现亮灭delay(5000);}if(ew_time==0) //假如东西时刻为0,赋值a为1,以实现方向转变a=1;}if(a) //a=1,南北显示19开始倒计时,东西14开始倒计时{ns_time=ew_time_red;ew_time=ns_time_green+ns_time_yellow;}while(a) //a=1,进入循环{if(ns_time-5>0) //南北红灯,东西绿灯{while(!flag);display(ns_time-5,ns_time); //flag=0,显示南北19,东西14delay(5000); //延时子函数调用P1=0xeb; //南北红扥个,东西绿灯显示}if(ns_time-5<=0) //南北时刻<=5时南北红灯,东西黄灯闪耀{while(!flag); //flag=0南北显示19开始倒计时,东西14开始倒计时flag=0;display(ns_time,ns_time); //东西,南北均从5开始倒计时显示P1=0xfb; //南北红灯,东西黄灯一亮一灭显示p1_3=~p1_3; //东西黄灯P1.3位取反,以实现黄灯亮灭变化显示delay(5000); //延时函数调用}if(ns_time==0) //假如南北时刻为0赋值a为0a=0;}}/**************t0中确信时子函数*****************/int t0int()interrupt 1 //t0中断〔定时器0中断〕子函数{TH0=0x3c; //定时50ms初值设定TL0=0xb0;point--; //20次T0定时次数操纵if(point==0) //假如20次到了,改变显示的东西南北方向的时刻{flag=1;point=20;if(ns_time!=0)ns_time--;if(ew_time!=0)ew_time--;}}/***************int0中断紧急情形处理子函数***************/void int0(void) interrupt 0 //int0中断子函数,当紧急情形〔抢救车等〕发生时,对应INT0按键调用此函数{ int i,j;display(00,00); //显示器显示0000,不再进行倒计时delay(5000);for(i=0;i<10;i++) //利用flag实现东西南北方向红灯均显示亮,对应东西南北方向车流均停止,处理紧急情形{for(j=0;j<10;j++){delay(50000);while(!flag){ P1=0xdb;}}}flag=0;}/***************int1中断流量处理子函数***************/void int1(void) interrupt 2 //int1中断子函数,当紧急情形〔抢救车等〕发生时,对应INT1按键调用此函数{ int i,j;display(00,00); //显示器显示0000,不再进行倒计时for(i=0;i<10;i++){for(j=0;j<10;j++) //利用flag实现主干道东西方向绿灯南北方向红灯{while(!flag){ P1=0xeb;}}}flag=0;}系统总硬件电路仿真图系统硬件电路总图包括复位电路,时钟电路,按键紧急处理电路,LED显示电路,数码管显示电路模块,对应各自电路功能如前面硬件电路设计部分进行说明。
基于80C51单片机的交通灯C语言源程序
#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit SH_CP=P2^0;sbit DS=P2^1;sbit ST_CP=P2^2;uchar temp;uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void NB_tong();void DX_tong();void NBY_show();void DXY_show();sbit RED_A=P1^0;//A代表NB南北sbit YELLOW_A=P1^1;sbit GREEN_A=P1^2;sbit RED_B=P1^3;//B代表DX东西sbit YELLOW_B=P1^4;sbit GREEN_B=P1^5;sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^3;sbit SPK=P3^7;//蜂鸣器uchar time=0,Count=0;//--------------------------------//延时//--------------------------------void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//---------------------------------------//74HC595的驱动//---------------------------------------void In_595(){uchar i;for(i=0;i<8;i++){temp<<=1;DS=CY;SH_CP=1;_nop_();_nop_();SH_CP=0;}void Out_595(){ST_CP=0;_nop_();ST_CP=1;_nop_();ST_CP=0;}//---------------------------------------//T0定时器定时及各种情况下灯亮的调用//---------------------------------------void Timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;Count++;time=time%60;if(Count==20){time++;Count=0;}if(time<=30) NB_tong();if((time>30)&&(time<=35)) NBY_show();if((time>35)&&(time<=55)) DX_tong();if((time>55)&&(time<=60)) DXY_show();}//------------------------------------//按键处理//------------------------------------void EX_INT0() interrupt 0{if(K1==0) //K1按下强制NB南北通行,倒计时黑屏暂停;断开继续以前动作。
(完整版)基于单片机的交通灯控制电路设计毕业设计
毕业论文(设计)论文题目:基于单片机的交通灯控制电路设计学生:董仁龙学号:所在院系:电气信息工程学院专业名称:自动化届次:2011 届指导教师:井田目录摘要: (1)1.设计任务要求及目的 (2)1.1设计任务 (2)1.2基本要求 (2)1.3设计目的 (2)2.设计思路 (3)2.1设计原理: (3)2.2设计方案及其总体设计框图 (3)3.交通灯控制系统的硬件设计 (4)3.1系统硬件电路构成及外部硬件件的选取 (4)3.2系统工作原理 (5)3.3单片机小系统的基本组成及硬件图 (8)3.4外围电路工作原理及系统硬件图 (8)4.系统软件程序的设计 (14)5.课程设计心得体会 (15)6.参考文献 (13)7.附录: (14)8.致谢 (19)基于单片机的交通灯控制电路设计学生:董仁龙(指导老师:井田)(淮南师范学院电气信息工程学院)摘要:实现这井然秩序靠的是交通信号灯的自动指挥系统的交通信号灯控制方式很多。
本系统采用MSC-51系列单片机ATSC51和可编程并行IO接口芯片80C51为中心器件来设计交通灯控制器,完成对A 、B道上均有车辆要求通过时各自顺时放行;在一道有车而另一道无车和有紧急车辆要求通过时,系统做出正确应急控制。
本系统实用性强、操作简单、扩展功能强。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,本系统还应根据具体硬件结构软硬件结合加以完善。
关键词: MSC-51系列单片机ATSC51;交通灯控制器;IO接口芯片1.设计任务要求及目的1.1设计任务(1)单片机最小系统的焊制并以其为核心,设计并制作一个交通灯控制系统。
(2)按设计要求学习并使用Proteus软件绘制电路图。
(3)编写相应程序,按要求实现相应的控制。
(4)已编写的程序用Proteus仿真,对程序进行反复测试。
(5)按要求撰写毕业设计报告。
1.2基本要求(1)A 通道和B通道上均有车辆要求通过时,A、B通道轮流放行。
基于单片机控制的交通灯设计(含完整C程序 原理图)
电子与信息工程学院课程设计报告(2010—2011学年第2 学期)课程名称:单片机课程设计班级:学号:姓名:指导教师:2011年03月3.过程(如实际程序开发、电子制作,详细说明有关原理、开发过程、调试过程、结果)一.交通灯芯片介绍SST89E58RD:是8位FLASH FLEX51系列单片机。
FLASH FLEX51是在高级FLASH CMOS半导体工艺下设计和生产出来的单片机产品之一。
单片机有40K片内FLASH EEPROM程序存储器,它利用SST的超级FLASH专利技术,这些都是SST的领先技术。
超级FLASH存储器被分为两个独立的程序存储器块,基本FLASH Block0占用32K字节片内程序存储空间,二级FLASH Block1占用8K字节的片内程序存储器空间;8K字节的二级FLASH块能被映射到32K字节低地址空间它也能从程序计数器中被隐藏掉而用做一个独立的类似EEPROM的数据存储器。
其具有以下特点:兼容80C51系列,内置超级FLASH存储器的单片机;工作电压Vdd=4.5~5.5;1K*8的内部RAM(256Bytes+768Bytes,可以放心使用C语言编程)等。
8155:Intel8155是可编程RAM/IO芯片,为40脚双列直插式封装。
有256*8位静态RAM,2个8位和1个6位可编程并行I/O接口,以及1个14位可编程定时器/计数器。
可直与MCS-51单片机相接,是MCS-51单片机应用系统中应用最多的芯片之一其内部结构图和引脚图如图1所示图1在交通灯系统中,四位数码管是用来显示交通灯倒计时时间的,一路显示放行线时间,一路显示禁止线时间四位数码管的电路如图2:图2四位八段数码管,属共阴逆序,高电平有效,所以不带小数点的0-f的段码如下:{0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH};PROTEUS 仿真图如图3:图3四位数码管的显示使用了并行扩展芯片8155,8155与单片机SST89E58RD的接口如图4图48155的高8位数据地址线与单片机的P0口相连,CE与AD15相连,IO/M与AD8相连数码管的八位段选与PB口相连,四位位选与PA口相连。
单片机控制的交通灯C语言编程
单片机控制的交通灯红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。
四个方向各有一个红、黄、绿显示和两个数码管。
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。
硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。
因此,可加输出锁存器。
在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
四、软件程序(C语言)以下是整个设计的软件程序,直接可以编译成*。
Hex代码。
通过以上电路,下载到单片机,可直接运行。
//*****************************////程序名:十字路口交通灯控制//编写人:黄庭剑//初写时间:2009年1月2日//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.//CPU说明:AT89C51型单片机; 24MHZ晶体振荡器//完成时间:2009年1月6日//*****************************//#include<stdio.h>#include<reg51.h>#include<intrins.h>sfr p0 = 0x80;sfr p1 = 0x90;sfr p2 = 0xA0;sfr p3 = 0xb0; //这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。
51单片机控制交通灯原理图及C语言程序
Proteus仿真原理图:Keil C源程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_DONGXI = P1^0;//南北方向红灯亮sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮sbit RED_NANBEI = P1^3;//东西方向红灯亮sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮sbit DXweixuan1 = P1^6;//南北方向数码管位选1sbit DXweixuan2 = P1^7;//南北方向数码管位选2sbit NBweixuan1 = P3^0;//东西方向数码管位选1sbit NBweixuan2 = P3^1;//东西方向数码管位选2sbit L1=P3^5;sbit L2=P3^6;sbit L3=P3^7;uint aa, bai,shi,ge,bb;uint shi1,ge1,shi2,ge2;uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};void delay(uint z);void init(uint a);void display(uint shi1,uint ge1,uint shi2,uint ge2);void xtimer0();void init1();void init2();void init3();void init4();void init5();void xint1();void xint0();void LED_ON();void LED_OFF();void main(){P0=0xFF;P1=0xFF;P2=0x00;P3=0xFF;EA=1;EX0=1;IT0=0;init1();while(1){init2();//第2个状态init3(); //第3个状态init4(); //第4个状态init5();//第5个状态}}void init1()//第一个状态:东西、南北方向均亮红灯5S {uint temp;temp=5;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0; //第一个状态东西、南北均亮红灯5SRED_NANBEI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;YELLOW_DONGXI=1;YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;}shi1=shi2=temp/10;ge1=ge2=temp%10;if(temp==0){temp=5;break;}display(ge1,shi1,ge2,shi2);}}void init2()//第二个状态:东西亮红灯30S~5S、南北亮绿灯25~0S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=1;RED_NANBEI=0;GREEN_DONGXI=0;GREEN_NANBEI=1;YELLOW_DONGXI=1;//第二个状态:东西亮绿灯25S、南北亮红灯YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;shi1=(temp+5)/10;ge1=(temp+5)%10;shi2=temp/10;ge2=temp%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init3() //第三个状态:东西绿灯变为黄灯闪5次、南北亮红灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=0;GREEN_DONGXI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;YELLOW_DONGXI=~YELLOW_DONGXI;shi1=temp/10;shi2=shi1;ge1=temp%10;ge2=ge1;}if(temp==0){temp=6;break;}display(ge1,shi1,ge2,shi2);}}void init4()//第四个状态:东西亮绿灯25~0S,南北方向亮红灯30~5S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0;RED_NANBEI=1;YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5SGREEN_NANBEI=0;if(aa==20){aa=0;temp--;shi1=temp/10;shi2=(temp+5)/10;ge1=temp%10;ge2=(temp+5)%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init5()//第五个状态:东西亮红灯、南北绿灯闪5次转亮黄灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=1;RED_DONGXI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;if(aa==20){aa=0;temp--;YELLOW_NANBEI=~YELLOW_NANBEI;shi1=temp/10;shi2=shi2;ge1=temp%10;ge2=ge1;if(temp==0){temp=6;break;}}display(ge1,shi1,ge2,shi2);}}void display(uint shi1,uint ge1,uint shi2,uint ge2) {DXweixuan1=0;DXweixuan2=1;NBweixuan1=1;NBweixuan2=1;P0=table[ge1];delay(5);DXweixuan1=1;DXweixuan2=0;NBweixuan1=1;NBweixuan2=1;P0=table[shi1];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=0;NBweixuan2=1;P0=table[ge2];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=1;NBweixuan2=0;P0=table[shi2];delay(5);}void xint0() interrupt 0 {RED_NANBEI=0;RED_DONGXI=0;GREEN_NANBEI=1;GREEN_DONGXI=1;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xint1() interrupt 2 {RED_NANBEI=1;RED_DONGXI=1;GREEN_NANBEI=0;GREEN_DONGXI=0;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xtimer0() interrupt 1 {TH0=(65535-50000)/256;TL0=(65535-50000)%256;aa++;}void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++); }。
(完整word版)基于单片机的交通灯控制系统设计
基于89C51的交通灯控制系统设计目录摘要 01.设计任务与要求 02.系统硬件设计 (1)3.系统软件设计 (4)4. Proteus软件仿真 (4)5.设计心得 (5)6.参考文献 (6)附录 (6)交通灯控制系统设计摘要自从1858年英国人发明了原始的机械扳手交通灯之后,随后的一百多年里,交通灯改变了交通路况,也在人们日常生活中占据了重要地位,随着人们社会活动日益增加,经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通灯更加显示出了它的功能,使得交通得到有效管制,对于交通疏导,提高道路导通能力,减少交通事故有显著的效果。
近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人民的生活当中。
本模拟交通灯系统利用单片机AT89C51作为核心元件,实现了通过信号灯对路面状况的智能控制。
从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。
系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。
本模拟系统由单片机硬/软件系统,两位8段数码管和LED灯显示系统等组成,较好的模拟了交通路面的控制。
关键词:交通灯单片机数码管LED灯1.设计任务与要求东西、南北两干道交于十字路口,各干道有一组红、绿、黄三个指示灯,指挥车辆和行人安全通行。
东西方向为主干道,通行时间为40秒;南北方向为支干道,通行时间为30秒。
通行时间最后3秒,绿灯灭,黄灯闪烁,黄灯闪烁完毕变更通行车道。
通行时间由数字显示器显示,黄灯3秒闪烁不单另计时。
2.系统硬件设计根据上面的功能要求,硬件系统主要有单片机模块、指示灯模块和倒计时显示模块。
各模块选择如下:(1)单片机模块主控芯片采用AT89C51单片机,其管脚图如图1所示。
图1 AT89C51引脚图AT89C51是AT89C5X系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
(完整版)基于单片机的交通信号灯控制系统设计完整版毕业论文
重庆大学网络教育学院毕业设计(论文)题目基于单片机的交通信号灯控制系统设计学生所在校外学习中心四川南充校外学习中心批次层次专业092 专科起点本科电气工程及其自动化学号W学生邓力指导教师黄艳玲起止日期2011年9月 1 日起至2011年11 月30日止摘要随着社会经济的发展,城市交通问题越来越引起人们的关注。
人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
随着当今社会的迅速发展,汽车的销售量有了很大的提高。
大量汽车的出售,给我们的生活带了很大的便利。
但是,它也给城市的交通提出了更加严峻的考验。
在这种情况下,我们除了要修建更加好的道路外,还需要设计出更多更好的交通信号灯控制系统。
在现代,利用单片机来实现交通信号灯的控制成了我们调控交通的主流。
运用单片机控制交通信号灯方便,性能高,易于控制。
所以,我们很必要对这一课题进行一次系统的研究学习。
在本次毕业设计中,我的主要设计任务是在一个十字路口设计一个交通信号灯,并用单片机进行合理的控制。
本系统由AT89C51单片机、键盘、LED显示、交通灯演示系统组成。
系统包括人行道、左转、右转、以及基本的交通信号灯的功能。
系统除基本交通信号灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。
关键词:单片机,交通信号灯目录中文摘要 (Ⅰ)1. 引言 (1)2. 设计任务及思路 (1)3. 单片机·····································································································33.1 单片机简介 (3)3.2 单片机基本结构 (3)3.3 单片机硬件特性 (3)4. 芯片的选择 (4)4.1 74LS373以及74LS07芯片简介 (4)4.2 8255芯片 (5)4.2.1 8255可编程并行接口芯片简介 (5)4.2.2 8255可编程并行接口芯片方式控制字格式说明 (5)4.3 晶闸管 (7)5. 交通灯控制原理分析及方案论证 (8)6. 系统硬件设计 (9)6.1 总体设计 (9)6.2 单片机最小系统 (9)6.2.1 振荡电路 (9)6.2.2 复位电路 (10)6.3 显示及其驱动模块 (11)6.3.1 键盘与状态显示功能 (11)6.3.2 倒计时计数功能 (11)7. 系统软件设计 (12)7.1 延时程序设计 (12)7.1.1 计数器硬件延时 (12)7.1.2 软件延时 (13)7.2 时间及信号灯的显示 (14)7.2.1 8031并行口的扩展 (14)7.2.2 显示原理 (15)7.2.3 8255输出信号的放大 (15)7.2.4 8255输出信号与信号灯的连接 (15)7.2.5 8255与8031的连接 (16)7.3 程序设计 (16)7.3.1 流程图 (16)7.3.2 源程序代码 (19)7.4 调试运行 (23)设计总结 (24)参考文献 (25)致谢 (26)附录1 (27)附录2 (28)1.引言当今,交通信号灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段,这一技术在19世纪就已出现了。
51单片机用C语言实现交通灯(红绿灯)源程序
51单片机用C语言实现交通灯(红绿灯)源程序2009-10-29 23:00交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。
源程序如下:/*1、程序目的:使用定时器学习倒计时红绿灯原理主要程序和倒计时一样2、硬件要求:数码管、晶振12M*/#include <reg52.h>bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管 0-9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main(){TMOD |=0x01;//定时器设置 10ms in 12M crystal定时器0,工作方式1,16位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)TL0=0xf0;IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。
red =1;while(1){P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位P2=0;delay(300);//短暂延时P0=Dis_Gewei; //显示个位,左数,2位P2=1;delay(300);}}/********************************//* 定时中断 *//********************************/void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10毫秒定时TL0=0xf0;count++;if (count==100){count=0;second--;//秒减1if(second==0){ //这里添加定时到0的代码,可以是灯电路,继电器吸合等,或者执行一个程序 if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4秒,黄灯为过渡灯,再根据情况转绿或转红}else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;//绿灯亮25秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1时{red=1;yellow=0;P1=0xFC;//红灯亮60秒second=60;turnred=0; //接下来是转黄,绿。
基于c语言单片机交通灯
1设计课题设计要求及总体方案介绍1.1 设计课题任务设计一个具有特定功能的十字路口交通灯。
该交通灯上电或按键复位后能自动显示系统提示符“d.1004-16”,进入准备工作状态。
按开始键则开始工作,按结束键则返回“d.1004-16”状态。
1.2 功能要求说明要求甲车道和乙车道两条交叉道路上的车辆交替运行,甲车道为主车道,每次通车时间为60秒,乙车道为次车道,每次通车时间为30秒,要求黄灯亮3秒,并且1秒闪烁一次。
有应急车辆出现时,红灯全亮,应急车辆通车时间10秒,同时禁止其他车辆通过。
1.3 交通灯总体方案介绍及工作原理说明1.3.1 电源提供方案为使模块稳定工作,须有可靠电源,采用单片机控制模块提供电源。
此方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
1.3.2 复位方案复位方式有两种:按键复位与软件复位。
由考虑到程序的简洁,避免冗长,本设计采用按键复位,在芯片的复位端口外接复位电路,通过按键对单片机输入一个高电平脉冲,达到复位的目的。
1.3.3 输入方案直接在IO口线上接上按键开关。
因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用2个按键,分别是K1、K2。
由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用1.3.4 显示界面方案该系统要求完成倒计时、状态灯等功能。
采用数码管与点阵LED (点阵式和8段式LED)相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。
这种方案既满足系统功能要求,又减少了系统实现的复杂度。
权衡利弊,第三种方案可互补一二方案的优缺,我们决定采用方案三以实现系统的显示功能。
2交通灯硬件系统的设计2.1 交通灯硬件系统各模块功能简要介绍2.1.1 设计方框图图2-12.1.2 复位电路模块复位方式有多种,本设计采用按键复位,在设定的定时时间内,89S52必须在RST引脚产生一个由高到低的电平变化,以清内部定时器。
单片机-交通灯程序(C语言)
/****************************************************************************** ** 实验名: 动态显示数码管实验* 使用的IO :* 实验效果: 数码管显示76543210。
* 注意:当位选用P1口的时候注意可能会有一位不亮,那么调整J21******************************************************************************* /#include<reg51.h>//--定义使用的IO口--//#define GPIO_DIG P0#define GPIO_PLACE P1#define GPIO_TRAFFIC P2sbit RED10 = P2^0; //上人行道红灯sbit GREEN10 = P2^1; //上人行道绿灯sbit RED11 = P2^2;sbit YELLOW11= P2^3;sbit GREEN11 = P2^4;sbit RED00 = P3^0; //右人行道红灯sbit GREEN00 = P3^1; //右人行道绿灯sbit RED01 = P2^5;sbit YELLOW01= P2^6;sbit GREEN01 = P2^7;//--定义全局变量--//unsigned char code DIG_PLACE[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制查表的方法控制unsigned char code DIG_CODE[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData[8];//用来存放要显示的8位数的值unsigned char Time, Second; //用来存放定时时间//--声明全局函数--//void DigDisplay(); //动态显示函数void Timer0Cofig(void);/****************************************************************************** ** 函数名: main* 函数功能: 主函数* 输入: 无* 输出: 无******************************************************************************* /void main(void){Second = 1;Timer0Cofig();while(1){if(Second == 70){Second = 1;}//--宝田路通行,30秒--//if(Second < 31){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(30 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(30 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--宝田路通行--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;GREEN11 = 0; //宝田路绿灯亮GREEN10 = 0; //宝田路人行道绿灯亮RED01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}//--黄灯等待切换状态,5秒--//else if(Second < 36){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(35 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(35 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; //宝田路黄灯亮RED10 = 0; //宝田路人行道红灯亮YELLOW01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}//--前进路通行--//else if(Second < 66){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(65 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(65 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;RED11 = 0; //宝田路红灯亮RED10 = 0; //宝田路人行道红灯亮GREEN01 = 0; //前进路绿灯亮GREEN00 = 0; //前进路人行道绿灯亮}//--黄灯等待切换状态,5秒--//else{DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(70 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(70 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; //宝田路黄灯亮RED10 = 0; //宝田路人行道红灯亮YELLOW01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}}}/****************************************************************************** ** 函数名: DigDisplay* 输入: 无* 输出: 无******************************************************************************* /void DigDisplay(){unsigned char i;unsigned int j;for(i=0; i<8; i++){GPIO_PLACE = DIG_PLACE[i]; //发送位选GPIO_DIG = DisplayData[i]; //发送段码j = 10; //扫描间隔时间设定while(j--);GPIO_DIG = 0x00; //消隐}}/****************************************************************************** ** 函数名: Timer0Cofig* 函数功能: 配置定时器* 输入: 无* 输出: 无******************************************************************************* /void Timer0Cofig(void){TMOD = 0x01; //定时器0选择工作方式1TH0 = 0x3C; //设置初始值,定时50MSTL0 = 0xB0;EA = 1; //打开总中断ET0 = 1; //打开定时器0中断TR0 = 1; //启动定时器0}/****************************************************************************** ** 函数名: Timer0* 输入: 无* 输出: 无******************************************************************************* /void Timer0() interrupt 1{TH0 = 0x3C; //设置初始值TL0 = 0xB0;Time++;if(Time == 20){Second ++;Time = 0;}}。
交通灯C实现--AT89S51单片机--红黄绿灯
交通灯C语言实现单片机:AT89C51#include<reg52.h>#define uchar unsigned char#define ON 1#define OFF 0sbit NSG=P2^5; //南北绿灯sbit NSY=P2^4; //南北黄灯sbit NSR=P2^3; //南北红灯sbit EWG=P2^2; //东西绿灯sbit EWY=P2^1; //东西黄灯sbit EWR=P2^0; //东西红灯sbit LED_D=P3^7; //南北数码管sbit LED_C=P3^6;sbit LED_B=P3^1; //东西数码管sbit LED_A=P3^0;/*===============倒计时=========================*/uchar EWF=15,NSF=12,X=15,Y=27,Z=30,SHU=30;uchar count;void InitialT1(void){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;}//中断void ISRT1(void) interrupt 1{TMOD=0x01;TH0=(65536-50000)/256; //重装初值TL0=(65536-50000)%256;EA=1;TR0=1;ET0=1;count++;if(count>19) //定时到了1秒{EWF--;NSF--;X--;Y--;Z--;SHU--;count=0;}}/*=================延时=======================*/void Delay10uS(uchar second){uchar x,y;for(x=second;x>0;x--)for(y=110;y>0;y--);}/*==================led控制========================*/ uchar discode[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void display1(uchar num1,uchar num2) //东西方向{P0=discode[num1]; LED_A=ON; Delay10uS(1); LED_A=OFF;P0=discode[num2]; LED_B=ON; Delay10uS(1); LED_B=OFF;}void display2(uchar num3,uchar num4) //南北方向{P0=discode[num3]; LED_C=ON; Delay10uS(1); LED_C=OFF;P0=discode[num4]; LED_D=ON; Delay10uS(1); LED_D=OFF;}main(){int i;/*=============初始状态:东西南北都红灯==================*/ NSR=ON; //南北红灯开NSY=OFF;NSG=OFF;EWR=ON; //东西红灯开EWY=OFF;EWG=OFF;for(i=0;i<500;i++) //~=1s{Delay10uS(20);}NSR=OFF; //南北红灯关EWR=OFF; //东西红灯关while(1){InitialT1(); // 初始化计时器/*=============状态1:东西绿灯(12s) 南北红灯(15s)==================*/ /*=============状态2:东西黄灯(3s) 南北红灯(15s)=================*/ EWG=ON; //东西绿灯开NSR=ON; //南北红灯开while(EWF!=0){display2(EWF/10,EWF%10);// 南北红灯(15s)display1(NSF/10,NSF%10);// 东西绿灯(12s)while(EWF==3){while(X!=0){display2(EWF/10,EWF%10);// 南北红灯(3s)display1(X/10,X%10);// 东西黄灯(3s)EWG=OFF; // 东西绿灯关EWY=ON; //东西黄灯开}}}NSR=OFF; //南北红灯关EWG=OFF; //东西绿灯关EWY=OFF; //东西黄灯关/*=============状态3:东西红灯(15s) 南北绿灯(12s)==================*/ /*=============状态4:东西红灯(15s) 南北黄灯(3s)==================*/ EWR=ON; //东西红灯开NSG=ON; //南北绿灯开while(Z!=0){display1(Z/10,Z%10);// 东西红灯(15s)display2(Y/10,Y%10);// 南北绿灯(12s)while(Z==3){while(SHU!=0){display2(Z/10,Z%10);// 东西红灯(3s)display1(SHU/10,SHU%10);// 南北绿灯(3s)NSG=OFF; //南北绿灯关NSY=ON; //南北黄灯开}}}EWR=OFF; //东西红灯关NSG=OFF; //南北绿灯关NSY=OFF; //南北黄灯关/*=====================重新赋值===============================*/EWF=15,NSF=12,X=15,Y=27,Z=30,SHU=30;}}。
51单片机c语言交通灯设计报告
xxxxxxxxx基于AT89S52交通灯设计学院:电子信息工程专业班级:xxxxxxxxxxxxxx姓名:xx xx学号:xxxxxxxxxxx指导老师:xxxxxxxxxx摘要交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。
交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安全的交通环境,人们的生命和财产安全有了保障。
本设计旨在模拟十字路口的交通灯,以AT89S51单片机为基础,结合按键和数码管等元器件设计出一个简单且完全的交通灯系统。
关键词:交通灯AT89S52 单片机目录一、设计任务 (4)二、AT89S52单片机及其他元器件简介 (4)(1)AT89S52单片机 (4)三、系统硬件电路设计 (6)(1)时钟电路设计 (6)(2)复位电路设计 (6)(3)灯控制电路设计 (7)(4)按键控制电路设计 (7)四、元件清单及实物图 (8)1、程序清单 (8)2、原理图 (9)五、实验心得 (9)附1 源程序代码 (10)附2 原理图 (16)一、设计任务(1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉道路上的车辆交替运行,每次通行时间都设30秒,时间可设置修改。
(2)、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道,且黄灯亮时,要求每秒亮一次。
(3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通行。
二、AT89S52单片机及其他元器件简介(1)AT89S52单片机AT89S52是一种低功耗、高性能CMOS8位微控制器。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。
基于单片机的交通灯设计c语言程序
基于单片机的交通灯设计c语言程序交通信号灯是城市交通中非常常见的设施之一,起到了引导和控制车辆、行人通行的重要作用。
基于单片机的交通信号灯设计是一个非常典型的实际应用案例,通过编写C语言程序,可以实现对交通信号灯状态的控制和调节。
首先,我们需要了解交通信号灯的基本原理和工作流程。
一般而言,交通信号灯包括红灯、黄灯和绿灯三种状态,分别对应停止、准备和通行的指示。
交通信号灯会按照一定的时间间隔,循环地在这三个状态之间切换,以控制车辆和行人的通行。
在基于单片机的交通信号灯设计中,我们可以借助定时器和IO口来实现状态的切换和指示灯的亮灭。
下面是一个简单的C语言程序示例:```c#include <reg52.h>sbit red = P1^0; //红灯控制引脚sbit yellow = P1^1; //黄灯控制引脚sbit green = P1^2; //绿灯控制引脚void delay(unsigned int xms) //延时函数{unsigned int i, j;for(i=xms; i>0; i--){for(j=110; j>0; j--);}}void main(){while(1){red = 1; //红灯亮yellow = 0; //黄灯灭green = 0; //绿灯灭delay(3000); //延时3秒red = 0; //红灯灭yellow = 1; //黄灯亮green = 0; //绿灯灭delay(2000); //延时2秒red = 0; //红灯灭yellow = 0; //黄灯灭green = 1; //绿灯亮delay(5000); //延时5秒}}```上述程序通过P1口的不同引脚控制红灯、黄灯和绿灯的亮灭。
通过循环的方式,定时器每隔一段时间就切换交通信号灯的状态,从而实现交通信号灯的正常工作。
这只是一个简单的交通信号灯设计示例,实际的交通信号灯设计还可能涉及到更多的状态和控制逻辑。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机C语言交通灯数码管显示的设计完整版
基于单片机C语言交通灯数码管显示的设计完整版/* P2口位控口,P0口段控口, P1口按键,P3口发光二极管*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*共阳数码管字型码数组*/
/*0,1,2,3,4,5,6,7,8,9,P.,灭*/
char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8 ,0x80,0x90,0xbf,0x21,0xff};
/*共阳数码管位控码数组(从右往左点亮,反向驱动)*/
char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf, 0x7f};
char find_code[8];
sbit S2=P1^0; //S1键启动交通灯控制器
sbit S3=P1^1; //S2键回归“P.”状态
sbit S4=P1^2; //S3键处理紧急状况
uchar time;
void DelayX1ms(uint count) //1ms延时函数{
uint j;
while(count--!=0)
{
for(j=0;j<80;j++);
}
}
/*********************显示函数*****************************/
void disp()
{
char i;
char k;
for(i=0;i<8;i++)
{
P2=weikong_code[i];
k=find_code[i];
P0=dis_code[k];
DelayX1ms(1);
}
/********************1s延时********************************/
void delay1s()
{
TMOD=0X01;
EA=1;
ET0=1;
TH0=0x3C; //定时器定时50Ms
TL0=0XB0;
TR0=1;
PT0=1;
do{disp();} while(time!=20&&S3&&S4); //有条件转移
TR0=0;
time=0;
}
void time_() interrupt 1 //中断程序
{
time++;
T H0=0x3C;
T L0=0XB0;
/********************500ms函数********************************/
void delay500ms()
{ TMOD=0X01;
EA=1;
ET0=1;
TH0=0x3C;
TL0=0XB0;
TR0=1;
PT0=1;
do{disp();} while(time!=10); //有条件转移
TR0=0;
time=0;
}
/**************************紧急函数**************************/
void jinji()
{
uchar f;
for(f=10;f>0;f--)
{
P3=0x6F;
find_code[1]=f/10;
find_code[0]=f%10;
delay500ms();
delay500ms();
disp();
}
}
/**********************主函数******************************/
void main()
{
while(1)
{ char m,a; //上电显示“班级、学号”状态
find_code[0]=9;
find_code[1]=0;
find_code[2]=10;
find_code[3]=4;
find_code[4]=0;
find_code[5]=0;
find_code[7]=11;
disp();
while(!S2)
{
while(S3)
{
P3=0XAF;
for(m=60;m>0&&(S3);m--) {
if(!S4)
jinji();
find_code[1]=m/10;
find_code[0]=m%10;
delay1s();
disp();
}
for(a=3;a>0&&S3;a--)
{ if(!S4)
jinji();
find_code[1]=a/10;
find_code[0]=a%10;
delay500ms();
P3=0xcF;
delay500ms();
disp();
}
P3=0X77;
for(m=30;m>0&&(S3);m--)
{
if(!S4)
jinji();
find_code[1]=m/10;
find_code[0]=m%10;
disp();
delay1s();
}
for(a=3;a>0&&S3;a--)
{ if(!S4)
jinji();
find_code[1]=a/10;
find_code[0]=a%10;
P3=0X7F;
delay500ms();
P3=0X7B;
delay500ms();
disp();
}
}
P3=0xFF;
}
}
}。