单片机硬件实习报告格式电子122
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序号: 20
学号: 12446220
C
H
A
N
G Z H O
U U N I V E R
S
I
T
Y
实习报告
实习课程名称:单片机硬件实习
学生姓名:思佳
学院:信息科学与工程学院专业班级:电子122 校指导教师:兵专业技术职务:副教授
实习地点:大学文约楼单片机实验室
实习时间:2015 年6 月29 日 2015 年7 月10 日
一、实习题目
交通灯控制设计
二、实习目的
本次实习的目的在于加深对MCS-51单片机的理解,初步掌握单片机应用系统的设计方法;掌握常用接口芯片的正确使用方法;强化单片机应用电路的设计与分析能力;提高学生在单片机应用方面的实践技能;培育学生综合运用理论知识解决问题的能力,力现理论结合实际,学以至用的原则
三、实习任务及容
设计容:
利用双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。4位LED数码管显示时间,双显示红绿灯状态。熟悉交通信号灯控制逻辑。设计一个十字路口的交通灯色LED灯控制电路,要求南北方向和东西方向两个交叉路口的车辆交替运行。每次绿灯变红灯时,要求黄灯先亮3S,才能变换
运行车辆。东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用数码管显示器进行显示(采用倒计时的方法)。考虑到特殊车辆情况,设置紧急转换开头。
设计目标:
1.进一步掌握键盘显示电路的编程方法。
2.进一步掌握定时器和中断的使用和编程方法。
四、电路图设计
1、数码管显示部分
采用四位一体共阴数码管,分别显示西和北的剩余时间,A到G 为码段控制端口,1到4为片选端口。数码段显示部分通过74LS245接单片机管脚的P0口,片选部分由P2.0到P2.1提供,具体的共阴数码管见图。其中P2.1控制北边和西边剩余时间的十位数的显示;P2.0控制北边和西边剩余时间的个位数的显示。
2晶体管显示部分
由于对称性,设计时只设计了西北两个方向。由红黄绿按要求显示。用P1端口作为输出端口,用P1.2到P1.7端口分别控制西和北两组灯的状态,低电平点亮,具体端口功能如下:
P1.2控制北边红灯的亮灭;
P1.3控制北边黄灯的亮灭;
P1.4控制北边绿灯的亮灭;
P1.5控制东边红灯的亮灭;
P1.6控制东边黄灯的亮灭;
P1.7 控制东边绿灯的亮灭。
五、设计方案
六、硬件电路设计
单片机实验箱实际电路运行情况:
状态1
状态2
状态3
状态4
中断状态七、系统调试
首先,我们想实现的功能是红绿黄灯交替,采用mcs-51单片机的功能,由于汇编语言较为复杂,所以我们采用了较为简单的C语言来编程,红绿黄灯的变化也较为简单,所以就很快就实现了功能,但是我们发现在实际情况中,红灯到绿灯的过程中是不需要经过黄灯的,这就要求红灯和绿灯计时时间分开,红灯和绿灯发生变化是倒计时到0时,自动跳转的,所以我们将绿灯的计时提前3s进入0,然后进入黄灯倒计时,在黄灯倒计时结束时,红灯计时也结束,进入下一个状态。第二部分就是数码管,由于不清楚数码管的接口地址,我们花了很多时间测试,在之后的调试中便没有遇到太大的问题。最后实现了红绿灯交替,绿灯变红灯之间黄灯亮3s,并且由数码管显示倒计时。至此,所有功能都已实现。
八、实习总结
此次课程设计我一共花了差不多两周的时间,其中差不多有一周时间里面我是在重新学习关于单片机的知识的。此次课程设计难的地方就是对程序的编写难,很多地方都不怎么懂,所以我是看了蛮多的视频之后才开始编写程序的。在编写的过程中运用到了蛮多老师以前讲的知识,中断,定时器,
延迟程序,函数声明,位声明等,很的新东西。同时经过两周的学习我也学会了不少东西。
至于软件设计与调试,我觉得它主要考验你的思维逻辑能力及你对指令的熟悉程度。可以说再整个软件设计过程中,我不仅学会了延时的两种方法,即软件延时和硬件延时,还掌握数码管的两种显示方式(即动态显示与静态显示)及其如何选择。当然,通过几次反复调试过程,使得我对C程序指令有了更深刻的理解。
这次课程设计,我经过自己的努力和通过老师指导和同学的指点,最后终于把它完成了,我同时也学会了更多,比如中断,数码管动态显示,计数器等。在不懂的地方我们要虚心向别人请教,只有这样我们才能够学会更多,丰富我自己的知识。
九、参考文献
1、单片机原理与应用第二版.德安编著.机械工业.
附录
C语言代码:
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar num,t;
sbit dula=P2^7; //段选跟位选
sbit wela=P2^6;
sbit dula1=P2^5;
sbit wela1=P2^4;
sbit dula2=P2^3;
sbit wela2=P2^2;
sbit dula3=P2^1;
sbit wela3=P2^0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管
void display(uchar b,uchar a);