基于51单片机的课程设计及目录模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
设计名称:
题目:
学生姓名:
专业:
班级:
学号:
指导教师:
日期:年月日
课程设计任务书
专业年级班
一、设计题目
交通灯控制系统设计
二、主要内容
模仿十字路口交通灯功能,设计一个基于单片机的交通灯控制系统。
要求东西方向,南北方向各自有红,黄,直行绿,转弯绿功能,有数码管倒计数功能。
基本动作要求为红60秒,直行37秒,黄 3秒(闪动),转弯绿17秒,黄 3秒(闪动),理想设计是绿灯转黄灯前3秒绿灯闪动,利用按键可以修改不同方向绿灯工作时间,同时红灯时间按绿灯工作时间调整。
可选做对紧急车辆用开关允许通行。
三、具体要求
1.了解硬件电路组成,以及各部分的作用。
2.掌握交通灯的设计原理
3.设计交通灯软件程序,画主程序,子程序流程图,编写程序清单。
4.完成系统调试。
5.撰写课程设计报告。
四、进度安排
1.每个同学根据实验题目,查找相应资料,并由组长组织分析任务要求,对任务进行分解,明确每个同学的具体任务。
(半天)
2.基本技能培训:安装实验板和下载线。
(2天)
3.按分工要求,分析电路结构,拟定电路连接方案,画出实现的软件框图,分头进行电路连接,软件编写。
(2天)
4.学会并熟练掌握在伟福和Keil C开发平台上,用汇编和C语言编程和调试,并写入CPU,进行实际调试。
(2天半)
5.编写不少于3000字的课程设计总结报告及提供程序清单(电子版)。
(1天)
6.总结与答辩。
(1天)
五、完成后应上交的材料
1.课程设计说明书
2.源程序清单(电子版)
六、总评成绩
指导教师签名日期年月日
系主任审核日期年月
摘要
关键词:交通灯系统、单片机、LED显示
在日常生活中,交通灯作为管理交通、调协车辆的一个便捷的手段,起着很大的作用。
各种交通工具、行人都要根据交通灯的变化来决定是否前行,通行的时间的规定协调了它们的步伐,极大的减少了由于交通混乱引起的各种事故的发生。
因此,一个完善的交通系统中,交通灯是必不可少的设备,一个完善的交通灯程序会更有效的管理当前道路中出现的实际情况,使车辆、行人的行进变得更顺畅、更和谐。
信号灯的出现,使交通是得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1986年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义做了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯。
左右转弯的车辆都必须让合法的正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号。
近年来随着科技的发展,单片机的应用正在不断地走向深入。
本系统是由单片机系统、键盘、LED显示、交通灯演示系统组成。
最后系统要求实现交通灯的功能。
目录
一、任务分析与设计思路..............................................
二、整体设计方案
1、单片机的选择…………………………………………………………
2、单片机的基本结构……………………………………………………
三、数字钟的硬件设计
1、总体电路设计…………………………………………………………
2、单片机电路设计
3、复位电路设计
4、 LED显示电路设计……………………………………………………
5、键盘控制电路设计……………………………………………………
6、其他各分部分电路设计
7、元件清单...................................................................
四、软件设计
1 系统软件设计流程图………………………
2 数字电子钟的原理图…………
3 主程序…………
4 时钟设置子程序…………………
5 定时器中断子程序…………………
6 LED显示子程序…………………
7 按键控制子程序…………
8、其他部分软件设计。
五系统仿真
1、PROTUES软件介绍……………
2、电子钟系统PROTUES仿真………
六、调试与功能说明
1、系统性能测试与功能说明…………………
2、系统时钟误差分析………………………
3、硬件调试………………………………
4、软件调试问题及解决………
七、心得体会……………………
参考文献…………………………………………………………………
一、任务分析与设计思路
1.1、任务分析:
本次设计要求:运用所学单片机原理、模拟和数字电路等方面的知识,设计出一台交通信号灯,模拟路口交通信号。
交通灯要求如下:
1)交通信号灯能够控制东西、南北两个方向的交通,红绿黄灯用对应颜色的发光二极管代替;
2)用四个2位数码管分别显示东、南、西、北方向的通行时间,东西或南北通行时间为25秒,红绿灯切换中间黄灯闪烁5秒。
目前,我们接触到的交通灯都位于十字路口,假设实际情况为东西南北走向的十字路口,如下图:
东西南北各三盏灯,每三盏分别为红、黄、绿三种颜色,总共十二盏灯,而实际情况下,东西方向灯亮灭一致,南北方向灯亮灭一致,故只需要按东西为一组,南北为一组,两组交错亮灭来设计控制系统,即可达到交通灯系统的控制目的。
根据以上分析那么只需要控制东南或者西北六盏灯亮灭规律就能实现控制,另外两组对应一致就行了。
根据设计要求,要求东西或者南北通行25秒,红绿
灯切换中间黄灯闪烁5秒。
那么要求绿灯亮放行,放行线,绿灯持续亮(通行时间)25秒,黄灯亮(警告提醒时间)5秒,红灯亮禁止通行,禁止线,为了简化设计,也为25秒。
切换过程东西南北均为黄灯闪烁。
1.2、设计思路
基于完成以上任务分析,结合所学有关知识,尤其是本学期所学关于单片机的中断系统和定时/计数器的相关知识及应用,我们知道对于红、绿、黄两组各三盏灯的控制,可以通过把这六盏灯分别接到单片机的六个输出引脚,若用P1口进行输出,则分配如下:
通过对P1口P0~P5编程从而实现控制。
而时间的各盏灯的熄灭时间的延时情况,则用定时/计数和中断结合应用实现控制。
而输出的时间显示则每个方向分别用两个发光二极管显示,十位接在P0口,个位接在P2口,对P0口P2口编程即可实现控制。
二、整体设计方案
2.1、单片机的选择
本设计使用的单片机为AT89C51。
·与MCS-51 兼容
·4K字节可编程闪烁存储器
寿命:1000写/擦循环
数据保留时间:10年
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
2.2、单片机的基本结构
三、数字钟的硬件设计
3.1、总体电路设计
设计电路主要由两部分组成,一部分为P1口与十二个发光二极管连接电路,另一部分是P0、P2口与八个七段显示器相连的电路,下面分别详细说明。
3.2、单片机电路设计
设计中采用发光二极管作为交通灯来使用,单片机的I/O接口直接和交通灯(发光二极管)连接。
在十字路口的四组红、黄、绿三色交通灯中,东西方向道路上的两组同色灯连接在一起,南北方向道路上的两组同色的灯也彼此连接在,受单片机P1.0~P1.5控制。
单片机的I/O接口与交通灯电路的具体连接方式为:P1.0~P1.2分别接东西方向的红、黄、绿共6个放光二极管,P1.3~P1.5分别接南北方向的红、黄、绿共6个发光二极管。
12个发光二极管采用了共阳极的连接方式,因此I/O口输出低电平时,与之相连的发光二极管会亮,I/O口输出高电平时,相应的发光二极管会灭。
交通灯电路如图所示
3.3、复位电路设计
3.4、 LED显示电路设计
该显示装置选用七段数码管来显示交通灯转换的剩余时间,根据控制要求,每个路口需要两个数码管,这样四个路口就要求八个数码管。
有序AT89C51单片机的I/O作为输出时,具有较强吸收电流能力,因此我们可以选用共阳型数码管,这样由单片机的I/O就可以直接驱动,从而简化硬件电路的设计。
四个路口倒计时显示被置在同一时刻显示相同的数字,期中P0口用来显示时间的十位,P2口用来显示时间的个位。
电路如下图所示
3.5、键盘控制电路设计
3.6、其他各分部分电路设计
3.7、元件清单
四、软件设计
4.1 系统软件设计流程图
4.2 数字电子钟的原理图
4.3 主程序
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
sbit k1=P3^2; //按键
sbit k2=P3^3;
sbit k3=P3^4;
sbit k4=P3^5;
void display(uchar m,uchar f,uchar F1);
void keyscan();
uchar t,m,G1,g,o,f,M1,i,c,k1num,k2num;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void main()
{
init();
G1=20;g=10;o=5;M1=0;c=0 ;
while(1)
{
keyscan();
}
}
4.4 数码管显示子程序
void display(uchar m,uchar f,uchar F1)
{
//东西灯南北灯
//7 6 5 4 3 2 1 0
// 黄绿红黄绿红
if(c>=0) //绿灯计时到0,黄灯闪烁o秒,红灯保持
{ if(c>=o)
{
if(c>=(G1+o)) //
{
if(c>=(G1+2*o))
{
m=c-G1-o;
f=m-o;
P1=0xed;//东西红灯: 1110 南北绿灯: 1101
P2=0x22; //南北绿灯显示时间
P0=tab[f%10];
Delay(5);
P2=0x11;
P0=tab[f/10];
Delay(5);
P2=0x88; //东西红灯显示时间
P0=tab[m%10];
Delay(5);
P2=0x44;
P0=tab[m/10];
Delay(5);
}
else{ f=c-G1-o;
P1=0xeb;//东西红灯: 1110 南北黄灯: 1101
P2=0x22; //南北灯显示时间
P0=tab[f%10];
Delay(5);
P2=0x11;
P0=tab[f/10];
Delay(5);
P2=0x88; //东西灯显示时间
P0=tab[f%10];
Delay(5);
P2=0x44;
P0=tab[f/10];
Delay(5);
}
}
else{ m=c-o;
P1=0xde;//东西绿灯: 1101 南北红灯: 1110
P2=0x22; //南北灯显示时间
P0=tab[c%10];
Delay(5);
P2=0x11;
P0=tab[c/10];
Delay(5);
P2=0x88; //东西灯显示时间
P0=tab[m%10];
Delay(5);
P2=0x44;
P0=tab[m/10];
Delay(5);
}
}
else{ P1=0xbe; // 东西黄灯: 1011 南北红灯: 1110
P2=0x22; //南北灯显示时间
P0=tab[c%10];
Delay(5);
P2=0x11;
P0=tab[c/10];
Delay(5);
P2=0x88; //东西灯显示时间
P0=tab[c%10];
Delay(5);
P2=0x44;
P0=tab[c/10];
Delay(5);
}
}
4.5 定时器中断子程序
void exter() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
t=0;
c--;
}
if(c==-1)
{
c=g+G1+2*o;
}
}
4.6 按键控制子程序
void keyscan() // K1键盘扫描函数{
if(k2==0)
{
Delay(5);
if(k2==0)
{ k2num++;
while(!k2);
}
}
if(k2num!=0)
{
switch(k2num)
{ case 1:
{
TR0=0;
P1=0xee;
P2=0x00;
};break;
case 2:
{
TR0=1;
k2num=0;
};break;
}
}
else{
if(k1==0)
{
Delay(5);
if(k1==0)
{ k1num++;
while(!k1);
}
}
if(k1num!=0)
{
switch(k1num)
{ case 1: //南北绿灯通行显示时间
{
TR0=0; //允许计时器T0工作位,0停止工作,可以设置南北方向绿灯通行时间
if(k4==0) //可以设置南北方向绿灯通行时间
{
Delay(5);
if(k4==0)
{ while(!k4);
g++;
}
}
if(k3==0)
{
Delay(5);
if(k3==0)
{ while(!k3);
g--;
}
} P1=0xfd;
P2=0x22;
P0=tab[g%10];
Delay(5);
P2=0x11;
P0=tab[g/10];
Delay(5);
} ;break;
case 2: //东西绿灯通行时间
{
if(k4==0)
{
Delay(5);
if(k4==0)
{ while(!k4);
G1++;
}
}
if(k3==0)
{
Delay(5);
if(k3==0)
{ while(!k3);
G1--;
}
} P1=0xdf;
P2=0x88;
P0=tab[G1%10];
Delay(5);
P2=0x44;
P0=tab[G1/10];
Delay(5);
};break;
case 3: //可以设置黄灯时间
{
if(k4==0)
{
Delay(5);
if(k4==0)
{ while(!k4);
o++;
}
}
if(k3==0)
{
Delay(5);
if(k3==0)
{ while(!k3);
o--;
}
} if(o==10)
o=0;
P1=0xbd;
P2=0x88; //黄灯显示时间
P0=tab[o];
Delay(5);
};break;
case 4:
{
TR0=1;
k1num=0;
};break;
}
}
else display(m,f,M1);
}
}
4.7、其他部分软件设计
void Delay(unsigned char a)
{
unsigned char i;
while(--a!=0)
{
for(i=0;i<125;i++) ;
}
}
void init()//初始化函数
{
TMOD=0x01; //设定定时器0工作方式为1
TH0=(65536-46083)/256; //高8位赋值
TL0=(65536-46083)%256;//低8位赋值
EA=1; //开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
五、系统仿真
5.1、PROTUES软件介绍
5.2、电子钟系统PROTUES仿真
六、调试与功能说明
6.1、系统性能测试与功能说明
6.3、硬件调试
按照硬件连接图,相应的,P1.0接红灯,P1.1接黄灯,P1.2接绿灯,P1.3接红灯,P1.4接黄灯,P1.5接绿灯。
观察六个LED 灯是否与交通显示情况对应,如果有偏差,则单步运行或断点运行,进行调试,直至满足设计要求。
6.4、软件调试问题及解决
调试完灯的显示后,观察数码管显示的是否正常,如果不正常,则运用单步运行或断点运行进行分析和调试,直至满足要求。
七、心得体会
参考文献
1.高惠芳.单片机原理与应用技术.科学出版社,2010.4
2.胡汉才.单片机原理及其接口技术.清华大学出版社,2004
3.吴飞青等.单片机原理与应用实践指导.机械工业出版社 2009.2
4.Proteus 帮助文档
5.Keil C51帮助文档
一.设计任务分析
本课题主要的目的是为了检测步进电机步距角误差,并把误差进行分析计算,
二、步进电机步距角误差测量系统总体方案的设计
2.1。