单片机实训报告01
陕西国防工业职业技术学院
单片机课程实训报告
专 业: 电子信息工程技术 班 级: 信息3091 姓 名:学 号:指导老师: 魏晓艳 张喜凤 实训地点:成 绩:
软 件 教 研 室 制
实训题目:带时间显示的交通灯控制
组长:苏军妮
成员:陈月婵 王莹 王肖 刘红颖 解凤 郑建芸 陈迪 崔利军 王琼花 秦洋 分工:写程序:苏军妮 陈月婵 王莹 郑建芸 刘红颖 解凤 调试:苏军妮 刘红颖 陈月婵 王莹 郑建芸 王琼花 崔利军 解凤 焊电路板:苏军妮 陈月婵 刘红颖 王莹 郑建芸 解凤 撰写报告:王琼花
一、实训目的
1.掌握51系列单片机输入/输出端口的使用。 2.掌握单片机中断系统的C51基本编程方法。 3. 掌握带时间显示的交通灯的控制及应用。
二、项目概述及要求
项目概述
随着微控技术的日益完善和发展,单片机的应用不断走向深入。它的应用必定导致传统的控制技术从根本上发生变革。他在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到广发的应用,极大地提高了这些领域的技术水平和自动化控制。同时,伴随着我国经济的高速发展,私家车、公交车的增加,无疑会给我国的道路交通系统带来沉重的压力,很多大城市都不同程度的受到交通堵塞问题的困扰。下面以AT89C51单片机为核心,设计出以人性化,智能化为目的的交通灯控制系统。
本项目主要是从单片机应用上来实现十字路口交通灯智能化的管理,用来控制过往车辆的正常化运作。
项目要求
用AT89C51单片机控制一个单片机系统,晶振采用12MHz。
(1)正常情况下,放行线——绿灯亮放行后19s后,黄灯亮警告5s,然后红灯亮禁止(19+5)s;禁止线——红灯亮禁止(19+5)s,然后绿灯亮放行19s后,黄灯亮警告5s。
(2)、在紧急情况下,两个方向的放行、禁行是手动控制的。仅按下K1键时,双向禁行 ,时间停止计时;松开K1键恢复正常。仅按下K2键时,东西放行,南北禁行,时间停止计时;松开K2键恢复正常。仅按下K3键时,南北放行,东西禁行,时间停止计时;松开K3键恢复正常。
(3)、在模拟情况下,为了在较短时间内看到控制结果,可以假设X=4,Y=1,即单向放行时间最多为5s。
三、系统设计 1、 程序流图设计 主程序流程图:
2、 知识点
1、AT89C51单片机各引脚功能 ○
2、+5v电源原理设计 ○
3、单片机复位电路工作原理及设计 ○
4、单片机晶振电路工作原理及设计 ○
5、按键电路工作原理及设计 ○
6、驱动电路74LS15的特性及使用 ○
7、单片机汇编语言及程序设计 ○
四、硬件设计
1、 电路原理图
图(一) 电路原理图
2、 元件清单
3、 电路图分析
(1)正常情况下,绿灯亮放行后15s后,黄灯亮警告5s,然后红灯亮禁止(15+5)s;红灯亮禁止(15+5)s,然后绿灯亮放行15s后,黄灯亮警告5s。
(2)在紧急情况下,两个方向的放行、禁行是手动控制的。 如图1所示为双向禁行 仅按下K1键时,双向禁行 ,时间停止计时;松开K1键恢复正常。如图2为 东西放行 仅按下K2键时,东西放行,南北禁行,时间停止计时;松开K2键恢复正常。如图3为 南北放行图 仅按下K3键时,南北放行,东西禁行,时间停止计时;松开K3键恢复正常。
五、软件设计
1、 程序流程图
2、 程序清单及程序分析
1、程序的编写和检查。 ○
#include //头文件// uchar i,j,k; #define uchar unsigned char for(i=5;i>0;i--) uchar for(j=10;j>0;j--) DispX[7]={0x9a,0x9c,0xa9,0xc9,0x99,0x9a,0 for(k=250;k>0;k--) ; xa9}; //信号灯控制码// } uchar void FangXing( uchar *PTR) //放行子程序// b[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d{ ,0x07,0x7f,0x6f}; //显示器控制码// uchar y,z; sbit K1=P3^5; //双向禁行按键// P0=0x00; sbit K2=P3^6; //东西放行按键// P2=0x3f; sbit K3=P3^7; //南北放行按键// while(~FX_End){ bit FX_End; //放行结束标志位// if (Key) break; bit JG_End; //警告结束标志位// else P1=*PTR; bit Key=0; //紧急状态标志位// for(y=9;y>=1;y--) //显示器19~11分段void Time0(void) interrupt 0 using 3 显示// //中断服务子程序// for(z=20;z>0;z--) { { Key = !K1 || !K2 || !K3;//紧急按键状态// P0=0xf2; if(Key){ P1=*PTR; if ((K1==0)&&(K2&&K3==1)) P2=b[1]; {P1=0x99; delay( ); P0=0x00; P0=0xf1; P2=0x3f;} P2=b[y]; else if ((K2==0)&&(K1&&K3==1)) delay( ); {P1=0x9a; } P0=0x00; for(z=20;z>0;z--)//显示器10单独显示// P2=0x3f;} { else if ((K3==0)&&(K1&&K2==1)) P0=0xf2; { P1=0xa9; P1=*PTR; P0=0x00; P2=b[1]; P2=0x3f;} delay( ); Key=1; P0=0xf1; } P2=b[0]; } delay( ); } { for(y=9;y>0;y--) //显示器09~01分 EA=1; //开中断// 段显示// EX0=1; //允许x0中断// for(z=20;z>0;z--) FX_End=0; { JG_End=0; P0=0xf2; } P1=*PTR; void delay (void) //延时函数延时5ms// P2=b[0]; { delay( );
P0=0xf1; P2=b[y]; delay( ); }
for(z=20;z>0;z--) //显示器00单独显示// { P0=0xf2; P1=*PTR; P2=b[0]; delay( ); P0=0xf1; P2=b[0]; delay( ); } FX_End=1; }
FX_End=0; }
void JingGao(uchar *PTR) //警告子程序// {
uchar y,z; P0=0x00; P2=0x3f;
while(!JG_End){ if (Key) break; else P1=*PTR;
for(y=5;y>0;y--) //显示器05~00显示// for(z=20;z>0;z--)
{ P0=0xf2;
P1=*PTR;
P2=b[0]; delay( ); P0=0xf1; P2=b[y]; delay( ); } JG_End=1; } JG_End=0; }
void main(void) //主函数// {
uchar *PTR=&DispX; Init(); P0=0x00; P2=0x3f; for(; ;){ if(Key) continue; //如果有中断则会跳出// FangXing( PTR );//东西方向放行// JingGao(++PTR); //东西方向警告// FangXing(++PTR); //南北方向放行// JingGao(++PTR); //南北方向警告//
PTR=&DispX;
} }
2、程序的编译。 ○
3、程序的调试和.hex文件 ○
4、将.hex文件装入原理图进行验证。 ○
5、记录和撰写报告。 ○
六、系统仿真及调试
图(二) 紧急情况处理双向禁行图
图(三) 东西放行图
图(四) 南北放行图
硬件的调试主要是把电路各种参数调整到符合设计要求。先排除硬件电路故障,包括设计性错误和公益性故障。一般原则是先静态后动态。
利用万用表或逻辑测试仪器,检查电路中的各器件以及引脚连接正确,没有短路故障。
先将单片机AT89C51芯片取下,对电路进行通电检查,通过观察看没有异常,然后用万用表测试各电源电压,这些都没有问题,然后接上仿真机进行联机调试观察各接口线路正常。
单片AT89C51是系统的核心,利用万用表检查单片机电源Vcc为(40脚)+5V、晶振正常工作、复位引脚RST(复位时为高电平,单片机工作时为低电平)、EA为+5V(高电平),这样单片机就工作了。再结合电路图检测故障,无出现故障问题。
七、总结反思(含出现问题及解决途径)
实 训 总 结
随着科学技术发展的日新月异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。因此作为电子信息工程专业的学生来说掌握单片机技术是十分重要的。通过这次实训,使我懂得了如何编写一些简单的程序,学会了如何制作单片机应用程序。另外培养了勇于克服困难和团队协作精神,在以后的人生道路中帮助我
们更好的生活。
所谓课程设计,就是培养学生综合运用所学知识,是发现问题、提出问题、分析和解决问题,是一次操作性强、实战性强的一次课程设计和规划完成,是对学生实际工作能力的具体训练和考察过程。在这次的设计课题中,我学到了很多,经过一周的努力,还有老师的精心指导和组员之间的帮助,从在组员的分工编译程序、 调试 、焊电路板 、撰写报告、实现程序功能的过程当中,让我们对这次实训课题产生了浓厚的兴趣。与现实生活相比较,生活那些比较常见的东西都知道,但是就是不知道它是如何实现的。在这次课题实训过程当中,面对显示计时的交通灯控制,掌握它的原理和实现步骤,搞到自己应该学习的地方还有很多,并不是单纯的课本知识。
训练虽然遇到很多问题,例如电路图的连接是否正确,程序编写是否没有问题,调试是否合理等诸多问题,但是在我们组员的努力下,团结协作,努力对程序进行全面的检查和验证,对不懂、不会的查阅书籍,讨论并总结问题的原因所在,最后在大家坚持不懈的努力下找出错误的原因,领会到问题的关键所在,认真改正好重新编译程序,检查电路电气性和连接是否正确,将在keil软件总生成的.hex文件装入电路原理图进行调试和验证。
在这期间,可以学到和掌握的东西最多的地方就是软件调试了,也是最麻烦的一个环节。这其中包括程序的编写检验,原理图的正确连接和电气性是否良好以及芯片的各个引脚功能的熟练掌握和运用及调试,面对这些,首先自身必须要对程序的每一部分都很熟悉,掌握每句程序的作用。这样出现问题后才能根据问题来改变程序内容,而达到目的。当然,也有很多细节的失误,程序编写上也出现了很多细节错误,这浪费了很多的时间,主要也是没有把这方面的知识理解透彻,所以要把一个课题设计好、做好,不但要熟知课本知识,还要注意各方面的细节问题,务必要遭到心细如发,不放过任何一个可能引起错误的隐患。
实训的目的在于将所学知识完整结合并融会贯通,让实践与真知相融合。从分组之后一系列的分工实践中,让我对以前所学的知识有了更深的理解和掌握,通过对这个项目的操作实践,在项目成功之后,自身充满了成就感,对单片机的兴趣更加浓厚,同时也体会到了团队合作的事半功倍和乐趣。
这次的实训让我得到了很大的锻炼,也使我各方面的知识都得到了提升。让我明显的看见自身的的不足,面对这一点,我还需进一步的学习和努力,好将所有的知识融会贯通、学以致用,为以后的工作和发展奠定良好的基础。
王琼花01
#
八、参考资料
【1】张秀国 . 单片机c语言程序设计教程与实训. 北京大学出版社,2008 【2】尹毅峰,刘江龙,淡海英. 单片机原理及应用 . 北京理工大学出版社,2010