基于单片机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.引言
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
(完整版)单片机交通灯毕业课程设计

《单片机原理及应用》课程设计题目基于STC89C52单片机的交通灯控制系统设计学生姓名沈邦振学号学院信息与控制学院专业测控技术与仪器指导教师孙伟二O一二年六月五日基于 STC89C52 单片机的交通灯控制系统沈邦振1.项目概述随着我国经济的高速发展,私家车、公家车的增加,无疑会给我国道路交通系统带来沉重的压力,很多大城市都不同程度的受到交通堵塞问题的困扰。
下面以STC89C52单片机为核心,设计出以人性化、智能化为目的的交通信号灯控制系统。
2.项目意义用 STC89C52单片机控制一个交通信号灯系统,晶振采用 12MHz。
设 A 车道与 B 车道交叉组成十字路口, A 是主道, B 是支道。
设计要求如下:(1)用发光二极管模拟交通信号灯,用按键开关模拟车辆检测信号。
(2)正常情况下, A、B 两车道轮流放行, A 车道放行 9s ,其中 3s 用于警告; B 车道放行 6s, 其中 3s 用于警告。
(3)在交通繁忙时,交通信号灯控制系统应有手控开关,可人为的改变信号灯的状态,以缓解交通拥挤状况。
在 B 车道放行期间,若 A 车道有车而 B 车道无车,按下开关 K1 使 A 车道放行 5s;在 A 车道放行期间,若 B 车道有车而 A 车道无车,按下开关 K2 是 B 车道放行 5s。
( 4)有紧急车辆通过时,按下K3 使 A、 B 车道均为红灯,禁行5s。
3系统设计交通控制系统主要控制A、B 两车道的交通,以STC89C52单片机为核心芯片,通过控制三色LED的亮灭来控制各车道的通行;另外通过3 个按键来模拟各车道有无车辆的情况和有紧急车辆的情况。
根据要求,制定总体设计思想如下:(1)正常情况下运行主程序,采用 0.5s 延时子程序的反复调用来实现各种定时时间。
( 2)一车道有车,而另一车道无车时,采用外部中断 1 执行中断服务程序,并设置该中断为低优先级中断。
(3)有紧急车辆通过时,采用外部中断 0 执行中断服务程序,并设置该中断为高优先级中断,实现二级中断嵌套。
基于单片机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;}}}。
单片机红绿灯程序完整版

通灯设计交通灯设计方案:1:实现东西路----南北路红绿灯的交通指示。
2:东西路灯变化----红绿黄一南北路灯变化----绿黄红> T3:红灯延时时间---25S绿灯延时时间---20S黄灯延时时间一3S4:数码管显示:红灯---前20S不显示,只在最后5S开始倒计时显示。
绿灯---前15S不显示,只在最后5S开始倒计时显示。
黄灯---3S倒计时显示(若东西路为黄灯,南北路为红灯,那么南北绿的数码管也显示3S)。
5:交通应急事件处理:利用中断分别实现东西路---南北路的交通应急事件处理。
6:延时程序的使用:用循环延时和定时器计时的方法。
注:P1.0---北路绿灯,P1.1--北路黄灯,P1.2---北路红灯cP1.3--东路绿灯,P1.4---东路黄灯,P1.5----东路红灯。
【交通灯流程图】开始延时20秒5秒倒计时结束其他灯不变南北路绿灯亮,红,黄灯灭东西路红灯亮,绿,黄灯灭南北路绿灯数码管开始倒计时5秒南北路绿灯灭,黄灯亮且数码管开始倒计时3秒东西路红灯——数码管开始倒计时3秒3秒倒计时结束延时25秒5秒倒计时结束东西路绿灯亮,黄灯,红灯灭南北路红灯亮,黄灯,绿灯灭东西路数码管开始倒计时5秒其他灯不变东西路绿灯灭,黄灯亮且数码管开始倒计时3秒南北路红灯一一数码管开始倒计时3秒3秒倒计时结束程序如下:ORG 0000HLJMP LOOPORG 000BHLJMP WZDOORG 0013HLJMP WZD1ORG 0030HLOOP:MOV R3,#5MOV R4,#5MOV R2,#20l=LIfc=ER;定时器0中断,实现交通应急事件;下载可编辑亮 oMOV SP,#70H MOV IE,#85HMOV TMOD,#01H ;置T0为工作方式1MOV TH0,#3CH;置T0定时初值50msMOV TL0,#0B0HCLRTF0SETBTR0;启动定时器T0SETB P1.1 ;东---红灯亮,北---绿灯亮SETB P1.2CLR P1.0SETB P1.3SETB P1.4CLR P1.5ACALL DEL30SACALL Y ELLOW1 ; 北---绿灯转黄灯,东---红灯亮 ACALL DEL3S ;延时后北---黄灯火SETB P1.0;东:红灯火,绿灯亮,北:黄灯火,红灯CLR P1.2SETB P1.4SETB P1.5ACALL DEL55S ; 北---红灯不变,东---绿灯转黄灯ACALL Y ELLOW2ACALL DEL3SSJMP LOOPYELLOW1: ; 北---绿灯转黄灯,东---红灯不变SETB P1.0SETB P1.2CLR P1.1SETB P1.3CLR P1.5SETB P1.4RETYELLOW2: ; 东---绿灯转黄灯,北---红灯不变SETB P1.0SETB P1.1CLR P1.2SETB P1.3CLR P1.4RETWZD0: ;实现南北路交通应急事件CLR P1.0 ;(南北路保持畅通,东西路停止通行)SETB P1.1SETB P1.2SETB P1.3SETB P1.4CLR P1.5JNB P3.2,WZD0RETIWZD1: ;实现东西路交通应急事件CLR P1.3 ;(东西路保持畅通,南北路停止通行)CLR P1.2SETB P1.1SETB P1.0SETB P1.4SETB P1.5JNB P3.3,WZD1RETIDEL30S: J红绿灯延时DEL25S:JNB TF0QEL25S ;查询50ms到否CLR TFOMOV TH0,#3CH ;恢复T0定时初值50msMOV TL0,#0B0HDJNZ R2,DEL25S ;判断1s到否?未到继续状态MOV R2,#20 ;置50ms计数初值DJNZ R4,DEL25S ;状态1维持25s取数延时DEL5S:5MOV R2,#6DEL5:MOV A,R2ACALLST ;取数MOV P0,A ;实现数码管显示ACALL DEL1S ;每隔1S减1DJNZ R2,DEL5RETDEL3S:MOV R2,#4HDEL3:MOV A,R2ACALL ST ;取数MOV P2,AMOV P0,A ;数码管显示ACALL DEL1SDJNZ R2,DEL3RETDEL55S:ACALL DEL20SMOV R2,#6 ;倒计时5S DEL55:ACALL DEL1SMOV A,R2ACALLSTMOV P2,A ;数码管显示DJNZ R2QEL55RETDEL1S: ;1S 延时子程序MOV R5,#0BHST1:MOV R6,#0DAH下载可编辑ST2:MOV R7,#0CFHDJNZ R7,$DJNZ R6,ST2DJNZ R5,ST1RETDEL20S: ;20S延时子程序MOV R5,#0BH;#0DCHST3:MOV R6,#0DAHST4:MOV R7,#0CFHDJNZ R7,$DJNZ R6,ST4DJNZ R5,ST3RETST: ;取数MOV DPTR,#TABMOVC A,@A+DPTRRETTAB:DB 0FFH,0FFH,0F9H,0A4H,0B0H,99H,92HEnd.专业.整理.。
(完整版)基于单片机的交通灯控制电路设计毕业设计

毕业论文(设计)论文题目:基于单片机的交通灯控制电路设计学生:董仁龙学号:所在院系:电气信息工程学院专业名称:自动化届次: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口相连。
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)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* 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.,灭*/
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--)
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};
{ 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();
delay500ms();
disp();
}
}
P3=0xFF;
}
}
}
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;
}
/**************************紧急函数**************************/
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;
TL0=0XB0;
TR0=1;
PT0=1;
do{disp();} while(time!=20&&S3&&S4); //有条件转移
TR0=0;
time=0;
}
void time_() interrupt 1 //中断程序
{
tiቤተ መጻሕፍቲ ባይዱe++;
TH0=0x3C;
TL0=0XB0;
}
/********************500ms函数********************************/
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;
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();
}
}
/**********************主函数******************************/
k=find_code[i];
P0=dis_code[k];
DelayX1ms(1);
}
}
/********************1s延时********************************/
void delay1s()
{
TMOD=0X01;
EA=1;
ET0=1;
TH0=0x3C;//定时器定时50Ms
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;
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];