单片机原理及系统设计.docx
《单片机原理及系统设计.docx》由会员分享,可在线阅读,更多相关《单片机原理及系统设计.docx(14页珍藏版)》请在冰点文库上搜索。
单片机原理及系统设计
河南机电高等专科学校
课程设计报告书
课程名称:
单片机原理及系统设计
课题名称:
带倒计时的交通灯
系部名称:
自动控制系
专业班级:
过控141
******
学号:
*********
2015年12月24日
一、概述
1、设计目的:
单片机课程设计是自动化学科学生的必修课程。
通过交通灯模拟系统的设计可以进一步认识单片机在控制系统的重要性。
在完成理论学习和必要的实验后,掌握了单片机的基本原理和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
在该设计中通过自己自主地设计程序并调试,综合应用单片机原理、C程序等课程方面的知识。
巩固知识,熟练掌握单片机仿真系统的使用方法,达到提高综合应用相关知识的能力,掌握单片机系统设计的过程和目的。
2、交通灯控制系统的简单说明:
此系统核心元件为STC89C52RC单片机,对其编写相关程序来控制交通信号灯和数码管的时间显示。
系统共采用8个发光二极管来模拟各路交通信号灯,6个LED八段数码管以倒计时的方式显示各个方向上的允许通行或禁止通行的信号灯剩余的时间。
停30s,准备3s,之后通行27s,在东西和南北方向上这两种状态不断循环。
源程序采用C语言编写,并通过keil-Uv4软件进行编译,最后导入STC89C52RC单片机中,进行检测,设计好后通过STC-ISP-v4.80(如图1-2)进行下载,并调试。
图1-2
二、系统工作原理
利用单片机设计一个有6个发光二极管,4位数码管显示数字的红绿灯。
交通灯示意图及时序图如下1-3、1-4所示:
图1-3交通灯示意图
图1-4交通灯时序图
具体要求及功能介绍如下:
1、
东西方向绿灯先亮27s后黄灯亮3s,期间南北方向红灯同时亮30s;然后南北方向绿灯先亮27s后黄灯亮3s,期间东西方向红灯同时亮30s;然后东西方向,如此反复。
2、
A组两个数码管先显示东西方向绿灯亮由27s依次递减至0s,然后B组两个数码管显示黄灯亮3s依次至0s;然后B组两个数码管在显示南北方向绿灯亮27s依次减至0s,然后A组两个数码管显示黄灯亮3s依次至0s,依次循环。
3、
利用定时器实现该功能。
三、系统硬件组成
根据控制要求可知,该系统硬件电路由三大部分构成:
单片机最小系统、发光二极管和数码管显示接口,系统结构框图如图1-5所示:
图1-5系统结构框图
1、CPU选型:
根据设计要求,选用40接口的51系列单片机即可满足控制的要求,此设计用STC89C52RC单片机。
2、功能电路:
(1)STC89C52RC单片机的最小系统:
最小系统是为单片机工作提供的基本电路环境,STC89C52RC单片机的最小系统如图1-6所示:
图1-6STC89C52RC的最小系统
(2)发光二极管与单片机的接口电路:
根据控制要求,结合STC89C52RC单片机的P1口实现发光二极管与单片机的硬件连接,电路图如图1-7所示:
图1-7发光二极管与单片机接口电路图
(3)数码管显示与单片机的接口电路:
根据控制要求,为了提高STC89C52RC单片机的口线利用率,本系统在数据显示部分采用动态显示的连接方式,利用STC89C52RC单片机的P0口和P2口实现字形码和选信号的输出控制,并利用8个PNP进行驱动,电路图如图1-8所示:
图1-8数码管显示与单片机接口电路图
四、系统软件设计
1、程序结构:
(1)根据计时器的工作过程,将控制程序的部分功能分为以下几个功能子程序:
显示子程序、定时器中断子程序,其程序结构框图如图1-9所示:
图1-9红绿灯程序结构规划图
(2)根据计时器的工作过程,其流程图如2-1所示:
N
Y
图2-1红绿灯程序流程图
五、系统调试
1、
硬件部分首先应用Proteus软件对电路原理图进行检查,检查无误后进行焊接,焊接结束后利用万用表检查线路是否为通路。
2、
软件部分首先应用keil u4软件对程序进行编译和调试,调试成功后,利用Proteus软件进行在线仿真,经过对程序多次地修改后,仿真效果达到了预期的要求。
3、设计原理图2-2:
图2-2设计原理图
4、带倒计时的交通灯C程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitbeep=P2^3;
unsignedintpp;
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
ucharj,k,l=255;
uchara1,a0;
ucharshijian,deng=2;
voiddelay(unsignedinti)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
voiddisplay(unsignedcharsh_c,unsignedcharg_c)
{
dula=0;
P0=table[sh_c];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[g_c];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
}
voidmain()
{
TMOD=0x01;
TR0=1;
TH0=(65536-46080)/256TL0=(65536-46080)%256
ET0=1;
EA=1;
while
(1)
{
if(shijian==0)
{
switch(deng)
{
case0:
shijian=50;
deng=1;
break;
case1:
shijian=15;
deng=2;
break;
case2:
shijian=50;
deng=3;
break;
case3:
shijian=15;
deng=0;
break;
}
}
if(pp==20)
{pp=0;
shijian--;
}
a0=shijian%10;
a1=shijian/10;
display(a1,a0);
switch(deng)
{
case1:
P1=0X00;
break;
case2:
if(shijian%2==0)
P1=0x00;
if(shijian%2==1)
P1=0xff;
break;
case3:
//绿灯
if(shijian%2==0)
P1=0x55;
if(shijian%2==1)
P1=0xaa;
break;
case0:
if(shijian%2==0)
P1=0x00;
if(shijian%2==1)
P1=0xff;
break;
}
}
}
voidtime0()interrupt1
{TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
pp++;
}
六、设计心得
通过这次课程设计我发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是通过本次课程设计,使我渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业,从学校转到踏上社会的一个过程,是自己体会深长,受益匪浅!