交通灯单片机课程设计.docx
- 文档编号:4446530
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:19
- 大小:191.91KB
交通灯单片机课程设计.docx
《交通灯单片机课程设计.docx》由会员分享,可在线阅读,更多相关《交通灯单片机课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
交通灯单片机课程设计
《单片机原理与接口技术课程设计报告》
课题:
以交通灯为主的多功能任务设计
班级学号
学生姓名
指导教师
淮阴工学院
电子与电气工程学院
2015-6
六、调试情况
一、设计目的
《单片机原理及应用》课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。
在课程设计过程中,在教师指导下,应用工程的方法,通过一个简单课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
通过课程设计,应该能加强学生如下能力的培养:
(1)独立工作能力和创造力;
(2)综合运用专业及基础知识,解决实际工程技术问题的能力;
(3)查阅图书资料、产品手册和各种工具书的能力;
(4)工程绘图的能力;
(5)编写技术报告和编写技术资料的能力。
二、设计要求
1.总体要求
(1)独立完成设计任务
(2)绘制系统硬件总框图
(3)绘制系统原理电路图
(4)制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释
(5)制定编写调试方案,编写用户操作使用说明书
(6)写出设计工作小结。
对在完成以上文件过程所进行的有关步骤如设计思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并对所完成的设计作出评价,对自己整个设计工作中经验教训,总结收获和今后研究方向。
2.具体要求
本次工程实践的校内部分主要以单片机为基础,进行单片机软件编程,目的是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。
软件编程是本次课程设计的重要环节。
在为期两周的工程实践中,将占据主要时间,完成的软件编程任务主要包括以下几点:
1)、熟悉KeilC51编程平台及相关编程软件
2)、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调
3)、编写、调试LED流水灯(循环显示)程序并进行软硬件联调
4)、编写、调试键盘扫描子程序并进行软硬件联调
5)、编写、调试数码管动态扫描程序并进行软硬件联调
6)、基于交通灯的多功能控制设计
其中前五个内容是后两个内容的基础,主要是编制一些子程序,为后继的整个系统设计打下基础。
交通灯控制是在五个课题中选做的一个设计,是一个简单的单片机编程设计,来实现智能交通灯的多功能作用。
3.系统硬件总框图
图1系统设计总框图
此次课程设计,AT89C52是一种带2K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
1)AT89C52单片机
设计中所用的单片机型号为AT89C52,其主要功能为:
AT89C52是低功耗、高性能的CMOS8位单片机。
片内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。
另外,AT89C52的指令系统和引脚与80C52完全兼容,所以,近几年AT89C52单片机应用极为广泛。
AT89C52单片机除了含有8KB的Flash存储器外,片内还有256B的RAM,32条I/O口线,3个16位定时/计算器、6个中断源、1个全双工串行口等。
同时,与80C52一样,有空闲和掉电两种节电运行方式。
AT89C52引脚如下图所示:
图2AT89C52引脚
AT89C52单片机为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
2)DS1302模块
DS1302的RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
其管脚图如下:
图3DS1302管脚图
各引脚功能:
Vcc1为后备电源,VCC2为主电源,X1和X2是振荡源,SCLK为输入端
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
3)数码管显示电路
图4数码管显示电路
设计中采用六位共阴极数码管,通过单片机STC89C52的P0口控制其位选和段选,以达到动态显示相应数值的效果。
在其位选控制部分,采用了一个9012型三极管,要求当P0口输出低电平时,位选成功。
所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
4)LED灯显示
图5LED显示模块
本次课程设计中,“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,单片机可工作。
要用外加电源和分压电阻来控制低电平驱动点亮,因为单片机不能直接高电平驱动LED灯。
如图D1-D8和R1、R2以及R6-R11连接到单片机IO口,当P1口某脚变低时相应LED发光。
实现LED灯的闪烁,只需利用编程方法依次从低位到高位逐个变为低电平,等待少许时刻再变高即可。
5)键盘扫描模块
图6按键输入电路
本模块四个开关分别用于控制流水灯控制电路,时间显示电路,音乐蜂鸣器电路,交通灯四部分功能。
当按下其中一个开关时,该部分电路导通,给单片机发出地址信号,实现其中一项功能的运做,如图4所示。
KEYA键:
其功能是当该键按下时,蜂鸣器程序工作;
KEYB键:
其功能是当该键按下时,流水灯程序工作;
KEYC键:
其功能是当该键按下时,数码管动态扫描程序工作;
KEYD键:
其功能是当该键按下时,交通灯程序工作。
6)蜂鸣器电路
图7蜂鸣器电路
蜂鸣器单元电路是通过一个PNP三极管来放大驱动蜂鸣器,蜂鸣器的正极接到+5V电源上面,蜂鸣器的负极接到三极管的发射极,三极管的基极经过限流电阻后由单片机的P3.4控制。
当输出高电平时,三极管截止,蜂鸣器的两引脚间的直流电压接近于0V,没有电流流过线圈,蜂鸣器不发声;当输出低电平时,三极管导通,使蜂鸣器的两个引脚间获得将接近+5V的直流电压,这样蜂鸣器的电流形成回路,发出声音。
因此,我们可以通过程序控制IO口输出的电平来控制蜂鸣器是否发出声音,实现各种可能音响的产生。
三、硬件电路的设计及描述
1.硬件总框图及原理图
图8硬件总框图
图9硬件总原理图
2.主程序流程图
3.各模块流程图
1)时间显示程序流程图
2)流水灯程序流程图
3)利用蜂鸣器的音乐流程图
4)智能交通灯
四、源程序代码
/********************************************************************
*文件名:
4个功能由按键控制.c
*描述:
按下A键,实现蜂鸣器动作。
按下B键,实现LED流水灯循环显示。
按下C键,实现数码管动态扫描显示。
按下D键,实现交通灯功能。
*创建人:
***********************************************************************/
#include
#include
#defineuintunsignedint//无符号整形习惯的定义
#defineucharunsignedchar//无符号字符型习惯的定义
voidbuzz_key(void);//子函数声明
voidled_key(void);
voidtube_key(void);
voidtraffic(void);
unsignedcharcodeduanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0123456789
unsignedcharcodeweima[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//选择哪个数码管
unsignedchartemp[6];
uchari=35;
uchark=30;
ucharl=5;
ucharj;
ucharb;//定义变量
sbitduan=P2^6;//定义管脚
sbitwei=P2^7;
sbitkey_A=P3^4;
sbitkey_B=P3^5;
sbitkey_C=P3^6;
sbitkey_D=P3^7;
sbitbuzz=P2^3;
sbitDIOLA=P2^5;
sbitcsda=P3^2;
sbitred=P1^0;//交通灯管脚定义
sbitgreen=P1^1;
sbityellow=P1^2;
/********************************************************************
*名称:
Delay_1ms()
*功能:
延时子程序,延时时间为1ms*x
*输入:
x(延时一毫秒的个数)
*输出:
无
***********************************************************************/
voidDelay_1ms(unsignedintt)
{
unsignedcharx,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
/********************************************************************
*名称:
Main()
*功能:
实现蜂鸣器,流水灯,数码管,交通灯
***********************************************************************/
voidmain()
{
DIOLA=0;//流水灯锁存器关流水灯未选通
wei=0;//位选关
duan=1;
P0=0;
duan=0;
csda=0;
while
(1)
{
if(key_A==0||key_B==0||key_C==0||key_D==0)
{
if(key_A==0)//A键按下
{
buzz_key();//调用蜂鸣器子程序
}
elseif(key_B==0)//B键按下
{
led_key();//调用流水灯子程序
}
elseif(key_C==0)//C键按下时
{
tube_key();//调用数码管显示子程序
}
else//D键按下时
{
traffic();//调用交通灯子程序
i=35;
k=30;
l=5;
return;
}
}
}
}
/********************************************************************
*名称:
buzz_key(void)
*功能:
蜂鸣器子程序
***********************************************************************/
voidbuzz_key(void)
{
DIOLA=0;
wei=0;
buzz=0;//蜂鸣器响
while(key_B&&key_C&&key_D&&!
key_A);
buzz=1;//关蜂鸣器
}
/*********************************************************************
*名称:
led_key(void)
*功能:
流水灯子程序
***********************************************************************/
voidled_key(void)
{
DIOLA=1;
b=0xfe;
P1=b;//11111110
while(key_B==0)
{
b=_crol_(b,1);//左移11111101
Delay_1ms(500);
P1=b;//111111011
Delay_1ms(500);
}
while(key_A&&key_B&&key_C&&key_D);
P1=0xff;
}
/********************************************************************
*名称:
tube_key(void)
*功能:
数码管子程序
***********************************************************************/
voidtube_key(void)
{
DIOLA=0;//流水灯使能端置0
while(key_C==0)
{unsignedinti;
for(i=0;i<6;i++)
{
wei=1;
P0=weima[i];//位选信号
wei=0;
duan=1;
P0=duanma[i];//段选信号
duan=0;
Delay_1ms(500);
}
duan=1;
P0=0;
duan=0;//清零
}
}
/********************************************************************
*名称:
traffic_key(void)
*功能:
交通灯子程序
***********************************************************************/
voidtraffic(void)
{
DIOLA=0;
while(key_D==0)
{
if(i>0)
{
DIOLA=1;
b=0xfe;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0=0;
wei=1;//消隐
P0=weima[0];
wei=0;
duan=1;//第1位数码管显示
P0=duanma[(i/10)%10];//在这里取i的个位数
Delay_1ms(40);//延时40毫秒后显示下一个数
P0=0;
wei=1;//消隐
P0=weima[1];
wei=0;
duan=1;//第2位数码管显示
P0=duanma[i%10];//在这里取i的个位数
Delay_1ms(40);//延时40毫秒后显示下一个数
}
i--;
}
elseif(k>0)
{
DIOLA=1;
b=0xfd;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0=0;
wei=1;//消隐
P0=weima[0];
wei=0;
duan=1;//第1位数码管显示
P0=duanma[(k/10)%10];//在这里取i的个位数
Delay_1ms(40);//延时3毫秒后显示下一个数
P0=0;
wei=1;//消隐
P0=weima[1];
wei=0;
duan=1;//第2位数码管显示
P0=duanma[k%10];//在这里取i的个位数
Delay_1ms(40);//延时3毫秒后显示下一个数
}
k--;
}
elseif(l>0)
{
DIOLA=1;
b=0xfb;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0=0;
wei=1;//消隐
P0=weima[0];
wei=0;
duan=1;//第1位数码管显示
P0=duanma[(l/10)%10];//在这里取i的个位数
Delay_1ms(40);//延时3毫秒后显示下一个数
P0=0;
wei=1;//消隐
P0=weima[1];
wei=0;
duan=1;//第2位数码管显示
P0=duanma[l%10];//在这里取i的个位数
Delay_1ms(40);//延时3毫秒后显示下一个数
}
l--;
}
}
}
五、设计心得
通过两个星期的实验,我的设计虽然有一些毛病,但总体上还是成功的。
两周的时间虽然短暂,但我从中受益匪浅,毕竟在课堂学习到的东西真真正正的用到实际中还是有很大困难的,要把理论运用于实践确实并非一件易事。
我从最初的设想设计一个什么样的数字电路到绘制电路图,然后打印排版,最后矫正设计中的漏洞与不足,整个过程我翻阅了大量的资料。
这次交通灯的课程设计,也使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。
使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。
综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。
在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
六、参考文献
1.《单片机原理及接口技术》李朝青北京航空航天大学出版社,2004
2.《单片机原理及应用》李全力高等教育出版社,2001
3.《电子系统设计与实践》杨刚,周群电子工业出出版社,1997
4.《单片机微型计算机技术》刘国荣机械工业出版社,1997
5.《数字电子技术》杨志忠高等教育出版社,2003
6.《电子技术》胡宴如高等教育出版社,2001
7.《电子线路CAD》王延才机械工业出版社,2001
8.《单片机应用技术选编》何利民北京航空航天大学出版社,1996
9.《单片机应用技术》吴国经中国电力出版社,2004
10.《单片机及接口技术实践教程》胡健北京机械工业出版社,2002
11.《使用接口技术》李广军成都电子科技大学出版社,1998
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 单片机 课程设计