接口课程设计交通灯Word文档下载推荐.docx
《接口课程设计交通灯Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《接口课程设计交通灯Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
利用延时程序控制每秒时间,从而控制RXD送数的时间间隔。
(2)AT89C511AT89C51单片机简介AT89C51是美国ATMEL公司推出的系列单片机,将多种功能的8位CPU与FPEROM(快闪可编程/擦除只读存储器)结合在一个芯片上,是一种低功耗、高性能的CMOS控制器,为很多嵌入式控制应用提供了非常灵活而又价格适宜的方案,其性能价格比远高于同类芯片。
它与MCS-51指令系统兼容,片内FPEROM允许对程序存储器在线重复编程,也可用常规的EPROM编程器编程,可循环写入/擦除1000次。
89C51内含4KB的FPEROM,一般的EEPROM的字节擦除时间和写入时间基本上均为10ms,对于任一个实时控制系统来说,这样长的时间是不可能在线修改程序的。
图2289C51内部结构图与EEPROM相比较,FPEROM大大缩短了存储内容擦除和写入的时间,为在线改写程序提供了极大的方便,而且价格也比带EPROM87C系列单片机便宜,这更显示出了89C系列的优越性。
它还有128*8Bit的片内RAM;
32根I/O线;
2个16位定时/计数器;
5个中断源;
一个全双工的异步串行口;
间歇和掉电工作模式;
三级程序存储器加密;
全静态工作,晶振工作范围:
0Hz24MHz。
2管脚功能AT89C51单片机为40引脚芯片如图23所示。
I/O口线:
P0、P1、P2、P3共四个八位P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读写操作。
P0口也用以输出外部存储器的低8位地址。
由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存信号用ALE。
P1口是专门供用户使用的I/O口,是准双向口。
P2口是从系统扩展时作高8位地址线用。
不扩展外部存储器时,P口也可P2口也是准双向口。
P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二I/O功能。
作为第一功能使用时操作同P1口。
P3口的第二功能如表21。
图2-389C51引脚图控制口线:
PSEN(片外取控制)、ALE(地址锁存控制)、EA(片外储器选择)、RE2SET(复位控制);
电源及时钟:
CCC、VSS;
XTAL1,XTAL2表2-1引脚功能表(3)74LS16474LS164引脚定义如图2-5所示,其真值表如表2-2所示,其功能是将外部输入的串行数据转化为8位的并行数据输出具有锁寸功能。
A、B端为串行数据输入端,QAQH为数据输出端,CLK为外部时钟输入端,CLR为清零端。
图2-574LS164引脚图表2-274LS164真值表输入输出CLEARCLOCKABQAQBQHLXXXLLLHLXXQA0QB0QH0HHHHQAnQGnHLXLQAnQGnHXLLQAnQGn(3)LED数码管显示电路在单片机应用系统中,数码管显示常用两种方法:
静态显示和动态扫描显示。
所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。
这样单片机只要把要显示的字形代码发送到接口电路,就不用管它了,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小,可以提供单独锁存的I/O接口电路很多。
所以本设计采用串并转换电路74LS164的静态显示电路。
其电路图如图3-4所示。
图3-4数码管显示静态驱动电路四、程序流程图(包括各个子系统和子过程的程序流程)主程序框图五、程序清单,要有适当的注释SECOND1EQU30H;
东西路口计时寄存器SECOND2EQU31H;
南北路口计时寄存器DBUFEQU40H;
显示码缓冲区1TEMPEQU44H;
显示码缓冲区2LED_G1BITP2.1;
东西路口绿灯LED_Y1BITP2.2;
东西路口黄灯LED_R1BITP2.3;
东西路口红灯LED_G2BITP2.4;
南北路口绿灯LED_Y2BITP2.5;
南北路口黄灯LED_R2BITP2.6;
南北路口红灯ORG0000HLJMPSTARTORG0100HSTART:
MOVTMOD,#01H;
置T0为工作方式1MOVTH0,#3CH;
置T0定时初值50msMOVTL0,#0B0HCLRTF0SETBTR0;
启动T0CLRAMOVP1,A;
关闭不相关的LEDLOOP:
MOVR2,#20;
置1S计数初值,50ms*20=1sMOVR3,#20;
红灯亮20SMOVSECOND1,#25;
东西路口计时显示初值25sMOVSECOND2,#25;
南北路口计时显示初值25sLCALLDISPLAYLCALLSTATE1;
调用状态1WAIT1:
JNBTF0,WAIT1;
查询50ms到否CLRTF0MOVTH0,#3CH;
回复T0定时初值50msMOVTL0,#0B0HDJNZR2,WAIT1;
判断1S到否未到继续状态1MOVR2,#20;
置50MS计数初值DECSECOND1;
东西路口显示时间减1sDECSECOND2;
南北路口显示时间减1sLCALLDISPLAYDJNZR3,WAIT1;
状态1维持20sMOVR2,#5;
置50MS计时初值5*4=20MOVR3,#3;
路灯闪3sMOVR4,#4;
闪烁间隔200msMOVSECOND1,#5;
东西路口计时显示初值5sMOVSECOND2,#5;
南北路口计时显示初值5sLCALLDISPLAY;
WAIT2:
LCALLSTATE2;
调用状态2JNBTF0,WAIT2;
查询50ms到否CLRTF0;
MOVTH0,#3CH;
恢复T0定时初值50msMOVTL0,#0B0HDJNZR4,WAIT2;
判断200MS到否未到继续状态2CPLLED_G1;
东西绿灯闪MOVR4,#4;
闪烁间隔200MSDJNZR2,WAIT2;
判1S到否未到继续状态2MOVR2,#5;
东西路口显示时间减1SDECSECOND2;
南北路口显示时间减1SLCALLDISPLAYDJNZR3,WAIT2;
状态2维持3SMOVR2,#20;
置50MS计数初值MOVR3,#2;
黄灯闪2SMOVSECOND1,#2;
东西路口计时显示初值2SMOVSECOND2,#2;
南北路口计时显示初值2SLCALLDISPLAYWAIT3:
LCALLSTATE3;
调用状态3JNBTF0,WAIT3;
查询100MS到否CLRTF0MOVTH0,#3CH;
恢复T0定时初值100MSMOVTL0,#0B0HDJNZR2,WAIT3;
判断1S到否未到继续状态3MOVR2,#20;
置100MS计数初值DECSECOND1;
南北路口显示时间减1SLCALLDISPLAYDJNZR3,WAIT3;
状态3维持2SMOVR2,#20;
置50MS计数初值MOVR3,#20;
红灯闪20SMOVSECOND1,#25;
东西路口计时显示初值25SMOVSECOND2,#25;
南北路口计时显示初值25SLCALLDISPLAYWAIT4:
LCALLSTATE4;
调用状态4JNBTF0,WAIT4;
查询100ms到否CLRTF0MOVTH0,#3CH;
恢复T0定时初值100msMOVTL0,#0B0HDJNZR2,WAIT4;
判断1S是否未到继续状态4MOVR2,#20;
南北路口显示时间减1SLCALLDISPLAYDJNZR3,WAIT4;
状态4维持20SMOVR2,#5;
置50MS计数初值MOVR4,#4;
红灯闪20SMOVR3,#3;
绿灯闪3SMOVSECOND1,#5;
东西路口计时显示初值5SMOVSECOND2,#5;
南北路口计时显示初值5SLCALLDISPLAYWAIT5:
LCALLSTATE5;
调用状态5JNBTF0,WAIT5;
恢复T0定时初值100MSMOVTL0,#0B0HDJNZR4,WAIT5;
判断200MS到否?
未到继续状态5CPLLED_G2;
南北绿灯闪MOVR4,#4;
闪烁200MSDJNZR2,WAIT5;
判断1S到否?
未到继续状态5MOVR2,#5;
置100MS计时初值DECSECOND1;
南北路口显示时间减1SLCALLDISPLAYDJNZR3,WAIT5;
状态5维持3SMOVR2,#20;
红灯闪2SMOVSECOND1,#2;
南北路口计时显示初值2SLCALLDISPLAYWAIT6:
LCALLSTATE6;
调用状态6JNBTF0,WAIT6;
恢复T0定时初值100MSMOVTL0,#0B0HDJNZR2,WAIT6;
判断1S到否未到继续状态6MOVR2,#20H;
南北路口显示时间减1SLCALLDISPLAYDJNZR3,WAIT6;
状态6维持2SLJMPLOOP;
大循环STATE1:
;
状态1SETBLED_G1;
东西路口绿灯亮CLRLED_Y1CLRLED_R1CLRLED_G2CLRLED_Y2SETBLED_R2;
南北路口红灯亮RETSTATE2:
状态2CLRLED_Y1CLRLED_R1CLRLED_G2CLRLED_Y2SETBLED_R2;
南北路口红灯亮RETSTATE3:
状态3CLRLED_G1CLRLED_R1CLRLED_G2CLRLED_Y2SETBLED_R2;
南北路口红灯亮SETBLED_Y1;
东西路口绿灯亮RETSTATE4:
状态4CLRLED_G1CLRLED_Y1SETBLED_R1;
东西路口红灯亮SETBLED_G2;
南北路口红灯亮CLRLED_Y2CLRLED_R2RETSTATE5:
状态5CLRLED_G1CLRLED_Y1SETBLED_R1;
东西路口红灯亮CLRLED_Y2CLRLED_R2RETSTATE6:
状态6CLRLED_G1CLRLED_Y1SETBLED_R1;
东西路口红灯亮CLRLED_G2CLRLED_R2SETBLED_Y2;
南北路口黄灯亮RETDISPLAY:
数码显示MOVA,SECOND1;
东西路口计时寄存器MOVB,#10;
十六进制数拆成两个十进制数DIVABMOVDBUF+3,AMOVA,BMOVDBUF+2,AMOVA,SECOND2MOVB,#10DIVABMOVDBUF+1,AMOVA,BMOVDBUF,AMOVR0,#DBUFMOVR1,#TEMPMOVR7,#4DP10:
MOVDPTR,#LEDMAPMOVA,R0MOVCA,A+DPTRMOVR1,AINCR0INCR1DJNZR7,DP10MOVR0,#TEMPMOVR1,#4DP12:
MOVR7,#8MOVA,R0DP13:
RLCAMOVP3.0,CCLRP3.1SETBP3.1DJNZR7,DP13INCR0DJNZR1,DP12RETLEDMAP:
DB3FH,06H,5BH,4FH,66H,6DH;
0,1,2,3,4,5DB7DH,07H,7FH,6FH,77H,7CH;
6,7,8,9,a,bDB58H,5EH,7BH,0,40H;
s,d,e,f,-END六、心得体会作为一名计算机专业的学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的课程设计就为我们提供了良好的实践平台。
要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;
要有一个清晰的思路和一个完整的的软件流程图;
在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;
在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们的成长的历程,常有一些不如意,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名计算机专业的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的协助下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合相处,以及自身的动脑和努力,都是以后工作中需要的。