




免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机课程设计交通灯控制系统微机原理与接口技术长安大学课程设计实验报告题目:交通灯控制功能设计指导老师: 专业:班级: 日期目录一、设计思想和实施方案论述,硬件原理图及分析 1.1、课程设计名称 1.2、课程设计要求1.3、课程设计目的二、设计思想和实施方案论述,硬件原理图及分析 2.1、设计思想和实施方案2.2、硬件原理图三、典型模块以及典型编程技巧分析 3.1、8086典型模块分析3.2、编程技巧分析四、设计中遇到的问题及解决方法五、程序清单和程序注释,相关流程图 5.1程序清单和注释5.2、实验室及流程图六、收获与体会七、参考文献一、 设计课程名称及要求1.1、课程设计名称:交通灯控制功能设计。1.2、课程设计要求:(1)、分别用C语言和汇编语言编程完成硬件接口功能设计;(2)、硬件电路基于80x86微机接口;(3)、程序功能要求:小键盘给定、数码管(屏幕)显示;(4)、同时具备急救车应急响应功能和时间倒计时显示功能。 1.3、课程设计目的:微机应用系统设计与综合实验(实践)课程设计是自动化专业本科生必修的一门技术基础课。通过本课程设计,让学生对微机系统有一个较全面的理解,对典型数字接口电路的应用技术有一个较深入的掌握,并对应用系统进行硬件原理和软件编程进行分析、设计和调试,达到基本掌握简单微型计算机应用系统软硬件的设计方法,提高项目开发能力的目的。要求同学独立完成课题,写出课程设计说明书,画出电路原理图,说明工作原理,画出电路印制板图, 编写设计程序及程序流程图。二、设计思想和实施方案论述,硬件原理图及分析2.1、设计思想和实施方案: 采用单片机来实现的,达到的效果和上述方案相同。单片机采用定时器T0和T1来触发中断,根据中断优先级的不同,从而可以处理不同的情况,交通灯也是采用红绿两种发光二极管,主干道亮45s,支干道亮30s,计数的最后5s中绿灯闪烁,用数码管倒计时显示时间,在发生紧急情况时,可以认为用开关控制主干道和支干道红灯均亮,禁止任何车通行,在故障清除后,断开开关可以使红绿灯和数码管回到原来的状态继续正常工作。2.2、硬件原理图:(b)图是基于单片机的设计。在(b)图中,P0口用于接数码管,P1口用于控制红绿灯的亮暗,P2口用于选通数码管,P32为定时器T0的控制端,当P32口为高电平时,定时器T0才会工作,并且T0的中断优先级高于T1,所以可以用于控制紧急情况。P37口接扬声器,在计数器T0工作时扬声器就会响。三、典型模块以及典型编程技巧分析3.1、单片机典型模块分析:基于单片机的设计主要是以51单片机为核心,通过变成开放T0和T1的中断,但T0要在INT0为高电平时计数器T0才会工作。计数器T1每50ms产生一次中断,每产生20次中断就令数码管的计数减1,当计数减到0时,重新设置数码管的计数初值,这样就可以依次循环工作了。当P32接高电平时,计数器T0开始工作,此时红灯都亮,扬声器发音,中断结束后还原原来的状态。3.2、编程技巧分析:基于单片机的编程语言是C语言,它主要有数码管显示程序和中断服务子程序。数码管的显示和上面汇编语言的原理一样,它的程序如下:void display(unsigned char t)/显示数码管函数 P2=0xf5;选通两个高位数码管 P0=tabt/10;取t的十位送到P0口显示 delay(); P2=0xF0;开通所有的数码管,避免闪烁 P2=0xfa;选通低位两个数码管 P0=tabt%10;取t的个位送到P0口显示 delay(); P2=0xF0;中断服务子程序有计数器T0和计数器T1的子程序。T1的优先级低,它主要用于控制正常工作状态的红绿灯和数码管计数,而T0的优先级高,可以处理紧急情况,并且在处理紧急情况以后能返回原正常运行状态,这在汇编里面用的是栈保护,而在C语言中可以设置一个变量也存储原来的数据,可以达到同样保护数据的效果,这一点的实现代码如下:void Time0(void) interrupt 1 using 0 t=0;count1=count;/寄存中断前count的值,以便中断结束后恢复 while(t!=125) t+; sound=sound; P10=0;/紧急情况绿灯全熄 P12=0; P11=1;/紧急情况红灯全亮 P13=1; P2=0xF0;/点亮两个数码管 count=88; display(count); TH0=(65535-921)/256; TL0=(65535-921)%256; count=count1;/恢复原来count的值 if(a%2=0) P10=1; P11=0; P12=0; P13=1;/返回主干道通行 else P10=0; P11=1; P12=1; P13=0;/返回主干道通行 四、设计中遇到的问题及解决方法 1.数码管的计数每秒钟减1,当时不熟练8254的应用,就想用软件延时来实现这个功能,最后查资料的时候知道了计时器的级联应用,很容易的就解决了这个问题。 2.对于数码管的显示,最开始感觉很模糊,查阅资料的时候找到了XLAT表转换指令的应用,首先定义十进制的七段显示码,将表格首地址送入BX,数字的七段码在表格中的偏移量送入,然后执行XLAT就可以实现这个功能了。 3.对于要求中的紧急响应功能,开始时只想利用8254来实现,结果失败了,所以我就想到了用两级中断,产生高级中断时就开启紧急响应功能,触发蜂鸣器,点亮红灯。 4.在执行中断程序的过程中,寄存器中的变量好多都改变了,开始时束手无策,最后查资料时想到了栈的运用,利用入栈和出栈来保护寄存器中的初值。 5.在用C语言编程时,用PROTUES软件进行仿真时,数码管显示错误,一会显示一会停止,闪烁感太明显了。想想后,我就把显示函数从中断子程序中改放到主函数中,放在while(1)无限循环语句中,最后很好的解决了这个问题。查阅资料后才明白,执行中断子程序是很快的事,执行完了后就会返回到主函数中继续执行,所以显示函数放在中断子程序中只有在产生中断的时候才会工作,所以数码管很多时候就处于熄灭的状态,而显示函数放在主函数中就放好解决了这个问题。 6.要做到可以人为设置通行时间,在单片机中,我不熟练键盘扫描,所以就想到了另外一个办法,给P1的高四位赋不同的初值,这样可以得到16种组合,故可以设置16中初值,为了简化程序,我只设置了4种初值,不过同样可以达到设置初值的效果。 7.用单片机产生两级中断的时候,我不知道该选定时器中断还是外部中断,查资料后知道定时器0和定时器1的中断优先级不一样,定时器T0的优先级高,所以可以让定时器T1控制正常工作状态的灯显示和数码管计数,而定时器T0则控制突发情况。 五、程序清单和程序注释,相关流程图 5.1程序清单和注释: 基于单片机的C语言程序清单及注释如下所示: #include unsigned char tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char time;unsigned char t;unsigned char count;/储存通行时间unsigned char main1;/主干道通行时间unsigned char cross;/支干道通行时间unsigned char count1;unsigned char a;/测试主干道工作还是支干道工作 sbit P10=P10;/控制主干道绿灯 sbit P11=P11;/主干道红灯sbit P12=P12;/控制支干道绿灯sbit P13=P13;/支干道红灯sbit P14=P14;/以下端口辅助拨码开关设置时间sbit P15=P15;sbit P16=P16;sbit P17=P17;sbit sound=P37;/发声音void delay()/延时20ms unsigned char i; for(i=0;i200;i+) ;void display(unsigned char t)/显示数码管函数 P2=0xf5; P0=tabt/10; delay(); P2=0xF0; P2=0xfa; P0=tabt%10; delay(); P2=0xF0;void main() EA=1; /开总中断 ET0=1; /开定时器0的中断 ET1=1; /开定时器1的中断 TMOD=0X19;/计数器1工作于方式1,计数器0工作于方式1,TR0为1且INT0为高电平启动工作 TH0=(65535-921)/256; TL0=(65535-921)%256; /定时器0赋初值 TH1=(65535-46083)/256; /定时50ms TL1=(65535-46083)/256; TR0=1; TR1=1; P10=1; P11=0; P12=0; P13=1;/初始化主干道通行 a=0;/初始化主干道工作 time=0; count=30;/初始化主干道时间 while(1) display(count); if(P14=1&P15=0&P16=0&P17=0) main1=20;cross=10; else if(P14=0&P15=1&P16=0&P17=0) main1=30;cross=15; else if(P14=0&P15=0&P16=1&P17=0) main1=40;cross=25; else if(P14=0&P15=0&P16=0&P17=1) main1=50;cross=35; else main1=60;cross=45;/*通过拨码开关设置主支干道的通行时间,相当于键盘扫描的效果*/ void Time1(void) interrupt 3 using 0/定时器T1,较低级中断 time+; if(time=20) /50*20=1000ms=1s,计数1s后count减1 count-; if(count0) /最后5s设置绿灯闪烁 if(a%2=0) P10=P10;/主干道绿灯闪烁 else P12=P12;/支干道绿灯闪烁 else if(count=0) a+; P10=P10;/主干道工作完后灯取反 P11=P11; P12=P12; P13=P13; if(a%2=0) count=main1; /主干道时间 else count=cross; /支干道时间 time=0; TH1=(65535-46083)/256; /重新给定时器1赋初值 TL1=(65535-46083)/256;/*INT0为高电平时出发定时器0计数,高级中断 */ void Time0(void) interrupt 1 using 0 t=0;count1=count;/寄存中断前count的值,以便中断结束后恢复 while(t!=125) t+; sound=sound; /产生方波,触发蜂鸣器响 P10=0;/紧急情况绿灯全熄 P12=0; P11=1;/紧急情况红灯全亮 P13=1; P2=0xF0;/点亮两个数码管 count=88; display(count); TH0=(65535-921)/256; TL0=(65535-921)%256; count=count1;/恢复原来count的值 if(a%2=0) P10=1; P11=0; P12=0; P13=1;/返回主干道通行 else P10=0; P11=1; P12=1; P13=0;/返回主干道通行 5.2、实验室及流程图:两种设计方案的思想完全一致,故它们的流程图基本相同,可以用下面的图来表示:返回到DOS恢复PCI_INTCSR INTR中断矢量和中断屏蔽字开中断开始关中断初始化PCI_INTCSR,替换INTR中断矢量,打开屏蔽位初始化实验中8259的ICW1、ICW2、ICW4、OCW1开中断是否有键按下显示,关中断结束向试验系统中8259发中断结束命令清PCI_INTCSR INTR标志位,向内发中断结束命令中断返回入口向8259OCW3发查询命令读出查询字是否IR0请求是否IR1请求执行IR处理执行IR处理是否否是否否是IR1的流程图:置主干道通行时间Count等于0Flag+,Flag为偶数置主干道通行时间IR1入口Count减1Count等于3置主干道绿灯闪烁Flag是否为偶数置支干道绿灯闪烁否是否是否是否恢复主干道通行状况恢复支干道通行状况返回主函数IR0入口点亮红灯,置数码管为88,启动蜂鸣器Flag是否为偶数中断是否结束IR0流程图:否是是是否 按照流程图和相关的模块,就可以设计程序了。汇编语言和单片机C语言达到一样的效果,流程图代表了整个设计的核心思想,所以它们的流程图思想是一样的。主题思想就是定时器计数,计数满后就产生中断,中断子程序改变数码管的显示值,数码管显示后就在下一次中断时改变灯的状态,另外重新给数码管一个新的计数初值,另外一个高级中断就处理异常事故,它的中断子程序要改变灯的状态,改变数码管的显示值,触发蜂鸣器响,中断执行完后就要恢复原来的状态,按照这样的工作方式不断的进行,就是一个完整的交通灯控制系统了。六、收获与体会这次课程设计,总体来说让我增加了很多知识,动手实践比上课有意思多了,但在设计的过程中我发现理论知识也同样重要,各种寻址方式以及的指令系统,还有各种寄存器的应用,掌握了这些基本知识,汇编就变得轻松多了。这次课程设计,我学会了和的应用,初步了解了中断的应用,把理论知识和实践相结合,从而提高了自己的同手能力和独立思考的能力。在听课的过程中,我对微机的工作原理不是很清楚,对计数器和外围接口芯片的用法也不熟悉,更不清楚中断的用法了,通过这次课程设计,我知道了状态控制字来工作这些芯片的工作模式,同时,我了解了中断的过程,产生中断时,系统会转去执行中断服务子程序,执行完子程序后又会返回到主函数中继续执行程序。虽然我的收获很多,但在这次的课程设计中,我还有很多地方做的不好,我对中断子程序的调用还没有完全掌握,还不会使用键盘接口的编程,我也不会用语言编程控制8086工作,所以我选择用单片机做这个设计以实现相同的功能。单片机与8086相比,它把中断器,输入输出设备,定时器/计数器都集成在一起,所以在设计小的系统上面显得容易很多。单片机的输入输出口很多,有P0,P1,P2,P3共32个端口,扩展系统也比较容易,它内部的定时器/计数器也简化了外部电路的设计。单片机的中断功能没有8086强大,但我设计的交通的控制系统只需要用到两个中断,并且是两个计数器中断,它们之间也有中断的优先级,所以正好用于控制不同的功能。我以前也学过一些单片机,但这次是我第一次完成靠自己思考完成的,确实感到很高兴。在这次设计中,我先设计一个最简单的交通灯系统,然后不断的扩展功能,先用软件仿真,然后在设计,这样的流程感觉很顺利。在用单片机设计的过程中,我也有了很大的收获。对于定时器计数器的应用,中断的应用以及中断优先级的运用,我慢慢尝试着运用,也就有点熟练了。多动手设计就会更快的掌握知识,实践就是最好的老师。在以后的时间里,我一定会再接再厉,争取更大的进步!七、参考文献、微型计算机原理与接口技术周荷琴,吴秀清。中国科学技术大学出版社、单片机C语言应用100例.王东峰,王会良。电子工业出版社3、32位微机原理与实验教程/*此交通灯实现的功能更多一些*/*现代交通灯的设计*/ #include/*位定义P1口,控制灯和数码管 */ sbit P10=P10;sbit P11=P11;sbit P12=P12;sbit P13=P13;sbit P14=P14;sbit P15=P15;sbit P16=P16;sbit P17=P17;sbit P20=P20;sbit P21=P21;sbit P22=P22;sbit P23=P23;sbit P37=P37;/控制扬声器发音 /*共阳数码管显示09的段码表*/ unsigned char code number10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*/unsigned char t1;/直道绿灯亮的时间 unsigned char t2;/直道黄灯亮的时间 unsigned char t3;/左转道绿灯亮的时间 unsigned char t4;/左转道黄灯亮的时间 unsigned char t5;/红灯亮的时间 unsigned char t10,t20,t30,t40,t50;unsigned char count;/存储中断次数的变量 unsigned char flag;/判断通行情况 unsigned char f;/调节高频波形和低频波形的依次出现 ,便于产生救护车声音 unsigned int h;/高频波形unsigned int l;/低频波形 unsigned char t;/调节高频波形和低频波形出现的时间 /*延时函数:延时30ms */void delay(void) unsigned char i,j; for(i=0;i100;i+) for(j=0;j100;j+) ;/*显示函数:显示数码管 */void display(unsigned char x) P16=1;P17=0; P0=numberx/10;/显示十位 delay(); P16=0;P17=1; P0=numberx%10;/显示个位 delay(); P16=0;P17=0;/*主函数 */main() EA=1; ET1=1;/启动定时器T1的中断 EX0=1;/启动外部中断INTR0 TMOD=0x10; TH1=(65535-46083)/256; TL1=(65535-46083)%256;/50ms中断一次 t10=30; t20=4; t30=16; t40=4; t1=t10; /初始化通行时间 P1=0x1e;/初始化灯的状态 count=0; flag=1;/初始化直道通行 f=0; l=0; h=0; t=0; TR1=1;/开定时器T1的中断 IT0=0;/INTR0为低电平触发外部中断INTR0 while(1) if(P23=0&P22=0&P21=0&P20=1) t10=20;t30=11; if(P23=0&P22=0&P21=1&P20=0) t10=30;t30=16; if(P23=0&P22=1&P21=0&P20=0) t10=45;t30=26; if(P23=1&P22=0&P21=0&P20=0) t10=60;t30=31; switch(flag) case 1:display(t1);P1=0x1e;break; case 2:display(t2);P1=0x1d;break; case 3:display(t3);P1=0x17;break; case 4:display(t4);P1=0x0f;break; case 5:display(t5);P1=0x1b;break; default:break; /*定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二手车交易合同范文二手车交易合同6篇
- 和田强夯施工方案
- 房顶防雷安全施工方案
- 电梯的维保施工方案
- 建筑混凝土大厦施工方案
- 钢筋安全施工施工方案
- 青兰高速平定段施工方案
- 盘龙区飘窗防水施工方案
- 委托贷款合同书7篇
- 创业融资咨询服务居间合同5篇
- 五年级上册英语英语试题 Unit1-Unit2单元测试卷(无答案)译林版
- 2025中国铁路北京局集团有限公司招聘高校毕业生76人(三)笔试参考题库附带答案详解(10套)
- 浙教版2025-2026学年八年级上科学第1章 对环境的察觉 单元测试卷
- 基底细胞癌护理查房
- 2025保密观知识竞赛题库(试题附答案25个)
- 2025-2026学年人教版(2024)初中生物八年级上册(全册)教学设计(附目录)
- 煤矿监管培训方案
- 企业反腐倡廉培训课件
- 湿疮湿疹中医护理查房
- 2025年6月新《中华人民共和国治安管理处罚法》全文+修订宣贯解读课件(原创内容丰富且全)
- DB31/T 1377.4-2022实验鸡和鸭第4部分:设施及环境
评论
0/150
提交评论