1、单片机课程设计交通灯一,设计任务( 按下时依次红灯全亮,同时数码管显示15S的到计时;东西绿灯亮,南北红灯亮,同时数码管显示30S的到计时;计闪次数8次。)2汇编程序MIAOEQU 30HORG 0000HLJMP STARTORG 000BHLJMP INTET0START: LACALL JS1MOV P1,#0F6H;点亮四个红灯MOV P3,#0DEHLCALLDE15S ;延时15SLLL: MOV P1,#0DBH ;东西绿灯亮,南北红灯亮MOV P3,#0DEHLCALLDE30S ;延时30SMOV P1,#0FFH ;东西绿灯灭,南北红灯亮MOV P3,#0DEHMOV R1
2、,#08H; 计闪次数8次DDD: MOV P1,#0EDH ; 东西黄灯亮,南北红灯亮MOV P3,#0DEHACALL DE02SMOV P1,#0FFH ; 东西黄灯灭,南北红灯亮DE6S: MOV R5,#60 ;延时6SSJMP DE1DE02S: MOV R5,#02H ; 延时0.2SDE1: MOV R6,#200DE2: MOV R7,#126DE3: DJNZ R7,DE3DJNZ R6,DE2DJNZ R5,DE1RETJS1: MOV TMOD,#01H ; 50MS定时常数MOV TH0,#3CHMOV TL0,#0B0HMOV R0,#20 ; 1S定时常数SETB
3、 EASETB ET0RETDE30S: MOV MIAO,#00HNEXT: MOV A,MIAOMOV B,#10DIV ABMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,BMOVC A,A+DPTRMOV P2,ALCALL DELY1SINC MIAOMOV A,MIAODEC MIAOMOVA,MIAOCJNE A,#30,NEXTLJMP DE30SDE15S: MOV MIAO,#00HNEXT: MOV A,MIAOMOV B,#10DIV ABMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,BMOVC
4、A,A+DPTRMOV P2,ALCALL DELY1SINC MIAOMOV A,MIAODEC MIAOMOVA,MIAOCJNE A,#15,NEXTLJMP DE15SDELY1S: MOV R5,#100D2: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND二89C51单片机交通灯程序(按下时依次红灯全亮,同时数码管显示15S的到计时;东西绿灯亮,南北红灯亮,同时数码管显示30S的到计时;计闪次数8次。) 2汇编程
5、序 MIAOEQU30H ORG0000H LJMPSTART ORG000BH LJMPINTET0 START:LACALLJS1 MOVP1,#0F6H;点亮四个红灯 MOVP3,#0DEH LCALLDE15S;延时15S LLL:MOVP1,#0DBH;东西绿灯亮,南北红灯亮 MOVP3,#0DEH LCALLDE30S;延时30S MOVP1,#0FFH;东西绿灯灭,南北红灯亮 MOVP3,#0DEH MOVR1,#08H;计闪次数8次 DDD:MOVP1,#0EDH;东西黄灯亮,南北红灯亮 MOVP3,#0DEH ACALLDE02S MOVP1,#0FFH;东西黄灯灭,南北红灯
6、亮 DE6S:MOVR5,#60;延时6S SJMPDE1 DE02S:MOVR5,#02H;延时0.2S DE1:MOVR6,#200 DE2:MOVR7,#126 DE3:DJNZR7,DE3 DJNZR6,DE2 DJNZR5,DE1 RET JS1:MOVTMOD,#01H;50MS定时常数 MOVTH0,#3CH MOVTL0,#0B0H MOVR0,#20;1S定时常数 SETBEA SETBET0 RET DE30S:MOVMIAO,#00H NEXT:MOVA,MIAO MOVB,#10 DIVAB MOVDPTR,#TABLE MOVCA,A+DPTR MOVP0,A MOV
7、A,B MOVCA,A+DPTR MOVP2,A LCALLDELY1S INCMIAO MOVA,MIAO DECMIAO MOVA,MIAO CJNEA,#30,NEXT LJMPDE30S DE15S:MOVMIAO,#00H NEXT:MOVA,MIAO MOVB,#10 DIVAB MOVDPTR,#TABLE MOVCA,A+DPTR MOVP0,A MOVA,B MOVCA,A+DPTR MOVP2,A LCALLDELY1S INCMIAO MOVA,MIAO DECMIAO MOVA,MIAO CJNEA,#15,NEXT LJMPDE15S DELY1S:MOVR5,#10
8、0 D2:MOVR6,#20 D1:MOVR7,#248 DJNZR7,$ DJNZR6,D1 DJNZR5,D2 RET TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 三、单片机控制交通灯说明书运行成功一、设计思路 如何使主干道通车时间 ,可任意设置;次干道通车时间 ,可任意设置;黄灯亮时间 ,可任意设置;怎样采用倒计时的方式,用两位十进制数字显示红、绿、黄色信号灯的倒计时时间。二、电路图 二、 使用材料1、单片机89c51 两片2、CD4072 一片3、LED七段吗数码管 四个4、CD4511 四片5、红,绿,黄发光二极管 各两个三
9、、元器件结构与工作原理1、单片机89c51 89C51包含了运算器、控制器、片内存储器、四个I/O 接口,串行接口、定时器和计数器、中断系统、振荡器。 1)主电源引脚Vcc接+5V电源正端Vss接+5V电源地端 2)外接晶体引脚XTAL1:片内反相放大器输入端XTAL2:片内反相放大器输出端。外接晶体时,XTAL1与XTAL2各接晶体的一端,接外接晶体与片内反相器构成振荡器。3)输入输出引脚 本电路运用了P1.0-P1.7:P1口的8个引脚。可作为准双向I/O接口使用。P2.0P2.7:P2口的8个引脚。一般可作为准双向I/O接口;在接有片外存储器或扩展I/O接口且寻址范围超过256个字节时,
10、P2口用 的为高8位地址总线。P3.0P3.7:P3口的8个引脚。除作为准双向I/O接口使用外,还具有第二功能。4)RST是复位端。单片机的振荡器工作时,该引脚上出现两个机器周期的高电平就可实现复位操作,使单片机回复道初始状态。2. CD 40511 CD4511是一个用于驱动共阴极LED(数码管)显示器的BCD码-七段码译码器,特点如下:具有BCD转换,消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。可直接驱动LED显示器。 BI:4脚是测试消隐输入控制端,当BI=0时,不管其它输入端状态如何,七段码均处熄灭状态,不显示数字。 LT:3脚是测试输入端,当BI=1,LT=0
11、时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否损坏。 &四、实验原理采用两片51系列单片机芯片AT89C51,完成交通信号控制系统。该系统的技术指标:主干道通车时间 ,可任意设置;次干道通车时间 ,可任意设置;黄灯亮时间 ,可任意设置;采用倒计时的方式,用两位十进制数字显示红、绿、黄色信号灯的倒计时时间。备注: org 0000h mov sp,#70h sjmp main org 0023h ljmp sentmain: mov a,#00h mov p2,a lcall del1 mov a,p2 mov r1,a lcall del1
12、mov a,#00h mov p2,a mov a,p2 xrl a,r1 cjne a,#00h,error ;绿灯时间储入r1 缺一错误跳转 mov a,#00h mov p0,a mov a,p0 anl a,#00fh mov r2,a ;黄灯时间储入r2 lcall del1 mov a,#00h mov p0,a mov a,p0 anl a,#00fh xrl a,r2 cjne a,#00h,error ; mov a,r1 add a,r2 mov r3,a ;黄灯加红灯时间存入r3 mov a,#66h add a,r3 ;判断r3是否大于99大于99则出错 jc erro
13、rcus: mov scon, #90h ;设置串行口为方式2 setb ea ;开中断 setb es ;允许串行口中断 lcall sout ;先发送红灯数据 mov r0,#02h cjne r0,#00,$ ;等待两次中断start: mov a, r1 mov 30h, a ;将绿灯时间存入30h单元 mov a, r2 mov 31h, a ;将黄灯时间存入31h单元 mov a, r3 mov 32h, a ;将绿灯加红灯时间存入32h单元 mov a, r4 mov 33h, a ;将红灯时间存入33h单元main0: mov a, 32h ;取红灯加黄灯时间 mov 2ah,
14、 a ;存入2ah 倒计时显示时间 mov r3, #0bfh ;数码管控制码 绿灯亮其他灭 mov a, 30h mov r7, a ;取延时时间存入r7,即绿灯亮时间main1: lcall del ;调用一秒延时子程序 并显示倒计时时间 djnz r7,main1 ;判断延时时间是否到 没到则 转main1循环 mov r3,#0dfh ;数码管控制码 黄灯亮其他灭 mov a, 31h mov r7, a ;取延时时间存入r7, 即黄灯亮时间main2: lcall del djnz r7,main2 ;判断时间到否 没到则循环 mov r3,#7fh ;数码管控制码 红灯亮其他灭 m
15、ov a,33h ;取红灯时间 mov 2ah,a ;存入 2ah 倒计时显示时间 mov a,33h mov r7,a ;取延时时间存入r7,即红灯亮时间 main3: lcall del ;调用一秒延时 并显示倒计时时间 djnz r7,main3 ;判断时间是否到没到循环 ajmp main0 ;跳转到main循环执行程序error: sjmp errordel: dec 2ah ;倒计时时间减1 mov dptr , # table ;1秒延时加到计时显示 子程序 取表头地址存入dptr mov a,2ah ; 取倒计时显示时间到a中 mov b,#0ah ;数字10存入b中 div
16、ab ;a除以b 十位数存入a中 个位数存入b中 movc a,a+dptr ;代码装换 mov r1,a ;代码存入r1 mov a,b ;个位数存入a中 add a,r1 ;代码与个位相加 得显示码 存入a mov r2,a ;显示码存入r2disp: mov a,r2 ;显示码存入r2 mov p1,a ;送出显示码 显示 mov a,r3 mov p0,a ;输出信号灯控制码控制灯亮t2: mov r6,#10 ;延时程序 0.999秒 12mHZ时为0.99秒d1: mov r5,#200 ;6mHz时为1.98秒 可改r6=#5d2: mov r4,#248 djnz r4,$ d
17、jnz r5,d2 djnz r6,d1 ret ;子程序返回table: db 00h,10h,20h,30h,40h, db 50h,60h,70h,80h,90hsent: jnb ri,send ;不是接收,转向发送 lcall sin ;接收,调用接收子程序 reti ;中断返回send: clr ti ;清发送中断标志 dec r0 ;r0减1变为1 reti ;中断返回sout: push psw push acc ;保存 psw acc装状态 mov a,r3 ;取黄灯加红灯时间放入a中 mov c,p mov tb8,c ;取奇偶效验为存入tb8 mov sbuf,a ;发送
18、数据 pop a pop psw ;恢复 psw acc状态 ret ;子程序返回sin: push psw push a ;保存 psw acc状态 clr ri ;清接收中断标志 mov a,sbuf ;读入缓存区内容 mov c,p ;取奇偶效验位 jnc s1 ;p=c=0转移到s1 jnb rb8,error ;若两次效验位不一样,则出错 ljmp s2 ;正确则转s2s1: jb rb8,error ;若双方效验位不一样,则出错s2: mov r4,a ;接收到的红灯时间存入r4 dec r0 ; r0减1 pop a pop psw ;恢复 psw acc状态 ret ;子程序返回del1 : nop ; 15毫秒延时子程序 12m赫兹时 ;30毫秒延时子程序 6m赫兹时del2 : mov r6, #50del3 : mov r7, #150del4 : djnz r7, del4del5 : djnz r6, del3 ret