单片机课程设计.docx
- 文档编号:3713892
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:12
- 大小:178.52KB
单片机课程设计.docx
《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
单片机课程设计
河南机电高等专科学校
《单片机原理及应用》
课程设计报告
设计题目:
交通灯的设计与控制
系部:
电子通信工程系
专业:
班级:
姓名:
学号:
成绩:
2011年06月
《嵌入式系统基础》课程设计任务书
1.时间:
2011年05月30日~2011年06月10日
2.课程设计单位:
河南机电高等专科学校
3.课程设计目的:
掌握《单片机原理及应用》课程基本概念、基本原理,具有一定的单片机设计能力,能够利用所学知识完成设计内容,提高实际动手能力。
4.课程设计任务:
①参考相关的的书籍、资料,根据设计要求完成原理图设计;
②制作电路板并完成调试;
③绘制软件流程图;
④完成软件设计并完成调试;
作好笔记,对自己所发现的疑难问题及时请教解决;
联系自己所学知识,总结本次设计经验;
认真完成课程设计报告。
5.设计要求
1.基本要求:
(1)能控制东、西、南、北四个路口的红黄绿信号灯正常工作。
(2)当东西方向放行、南北方向禁行时,东西方向绿灯亮25s,然后黄灯亮5s;南北方向红灯亮30s。
(3)当南北方向放行、东西方向禁行时,南北方向绿灯亮25s,然后黄灯亮5s;东西方向红灯亮30s。
2.附加功能:
(1)在定时交通信号灯控制的基础上,利用按键增加允许急救车、警车优先通过的要求。
当有急救车、警车到达时,路口的信号灯全部变红,以便让急救车、警车通过。
假定急救车、警车通过时间为10s,急救车、警车通过后,交通灯恢复先前状态。
(2)在交通灯工作同时,利用报警器自动设置人行道的通行提示,当该方向上人行道可以通行前5s,发出报警提示,频率为1Hz;禁止通行前5s再次发出报警提示,频率为2Hz。
《单片机原理及应用》课程设计报告
前言:
今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点。
可以说,智能控制的核心就是单片机。
我们使用的是MCS-51单片机,MCS-51单片机是Intel公司20世纪80年代初推出的高性能8位单片机,其典型产品有8031、8051和8751,8031片内无ROM,8051内部有4KB掩膜ROM,8751内部有4KBEPROM,除此之外,三者的内部及引脚完全相同。
一、硬件设计
1.设计思路及原理框图
本次交通灯控制系统设计的信号灯由单片机的12个I\O口控制,控制关系如下图,时间通过单片机内部的定时器来控制。
报警器由P1.1口控制。
东西
红P0.7
东西
黄P0.6
东西
绿P0.5
南北
红P0.4
南北
黄P0.3
南北
绿P0.2
东西
红P0.1
东西
黄P0.0
南北绿
P2.7
南北
黄P2.6
南北
红P2.5
东西绿P2.4
2.采用的芯片功能介绍
AT89S51是一种带4K字节闪烁可编程可擦除只读存储器,AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。
AT89S51主要功能列举如下:
1、为一般控制应用的8位单芯片
2、晶片内部具有时钟振荡器(传统最高工作频率可至12MHz)
3、内部程式存储器(ROM)为4KB
4、内部数据存储器(RAM)为128B
5、外部程序存储器可扩充至64KB
6、外部数据存储器可扩充至64KB
7、32条双向输入输出线,且每条均可以单独做I/O的控制
8、5个中断向量源
9、2组独立的16位定时器
10、1个全多工串行通信端口
11、8751及8752单芯片具有数据保密的功能
12、单芯片提供位逻辑运算指令
3原理图:
硬件电路板
二、软件设计
1.设计思路:
本设计先是从普通三色灯的指示开始进行设计,用P0口作为输出。
程序的初始化是南北方向绿灯亮,东西方向红灯亮,25秒后南北方向黄灯亮,再5秒后南北方向红灯亮,东西方向绿灯亮。
重复执行。
倒计时用到定时器TR0,二位一体的LED重复执行30秒的倒计时。
作为突发事件的处理,本设计主要用到外部中断EX1。
用一个开关作为中断信号。
2.程序流程图:
主程序交通灯定时0.5s
3.具体程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitss=P1^1;//蜂鸣器位声明
sbitzgl=P2^7;
sbitXINT1=P3^3;
uchartemp1=25,temp2=25,temp3=25;//赋定时显示初值
uchartemp4,temp5,temp6;
uinta;//定时1s钟循环变量
ucharzhi[6];//显示缓冲区
ucharb,z;
voidsx(void);//送显示函数
voidjj(void);
voiddisplay(void);//显示函数
voidchuli(void);//各个路口和各路口红绿灯转换函数
voiddelay(uintz)//毫秒级延时函数
{
uinti,j;
for(i=0;i for(j<0;j<121;j++); } voidmain(void)//主函数 { TMOD=0x01;//定时器0工作方式1 TH0=0x3c; TL0=0xb0;//定时50ms TR0=1;//启动定时器 EA=1;//开总中断 ET0=1;//开定时器0中断 EX1=1; PX1=1; b=1;//给b赋初值 do { chuli();//各路口数据处理函数 sx();//送显示函数 display();//显示函数 delay(100);//延时函数,延时100ms }while (1); } voidtimer0(void)interrupt1//定时器0中断服务函数 { TH0=0x3c; TL0=0xb0;//重赋定时初值 a++;//用于记中断次数 if(a==20)//判断a是否等于20;即判别定时1s钟是否到 { a=0;//a清0 temp1--;//重新赋显示初值 temp2--; temp3--; sx();//送显示函数 display();//显示函数 delay(500); } } voidchuli(void)//数据处理函数,即路灯转换函数 { ucharm,w,s,n,x;//设变量值,用于各路灯转换的嵌套 if(b==1)//判断b值是否为1 {zgl=1; P0=0xdb;//点亮一个绿灯,两个红灯 P2=0x9f; } if(temp3==5&&b==1)//判断temp3是否为3,即是否剩余三秒钟 { b=0;//将嵌套标志清零 zgl=1; P0=0xeb;//黄灯亮,同时原来亮的灯还亮 P2=0xaf; delay (2); x=1;//建下一级嵌套标志 for(w=0;w<5;w++) {ss=0; delay(23000); ss=1; delay(23000); } } if(temp3==0&&x==1) { temp3=25; temp2=25; temp1=25;//重新赋显示初值 x=0; zgl=1; P0=0xb6;//下一个路口的绿灯点亮,其他为红灯点亮 P2=0x7f; n=1; } if(temp2==5&&n==1) { n=0; zgl=1; P0=0x3c;//黄灯点亮 P2=0xff; delay (2); m=1; for(s=0;s<5;s++) {ss=0; delay(23000); ss=1; delay(23000);} } if(m==1&&temp2==0) {m=0; delay(200); temp3=25; temp2=25; temp1=25;//重新赋显示初值 b=1; } } voiddisplay(void)//显示函数 { uchari; ucharcodetab[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90};//0-9编码 for(i=0;i<6;i++) SBUF=tab[zhi[i]];//将显示数据送串行口发送 } voidsx(void) {zhi[0]=temp1/10; zhi[1]=temp1%10;//第一路显示数据 zhi[2]=temp2/10; zhi[3]=temp2%10;//第二路显示数据 zhi[4]=temp3/10; zhi[5]=temp3%10;//第二路显示数据 } voidjj(void) {zhi[0]=temp4/10; zhi[1]=temp4%10;//第一路显示数据 zhi[2]=temp5/10; zhi[3]=temp5%10;//第二路显示数据 zhi[4]=temp6/10; zhi[5]=temp6%10;//第二路显示数据 } voidint1_srv()interrupt2 { if(XINT1==0) { delay(20); if(XINT1==0) { ucharu; while(! XINT1); temp4=10; temp5=10; temp6=10; for(u=0;u<10;u++) { temp4--; temp5--; temp6--; jj(); display();//显示函数 P0=0xBA; P2=0XBF; delay(60000); } P0=0xcf; P2=0Xcf; } } } 三、设计心得体会 通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。 创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。 使之不断地战胜别人,超越前人。 同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。 设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。 这个设计过程中,我遇到过许多次失败的考验,就比如,自己对实际生活中的交通秩序的不了解给整个设计带来的困扰,真想要就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。 于是,我坚持了下来。 当然最终,这个设计很成功,主要体现在,这一整个系统,几乎没有参考任何书,程序由自己独立完成,与用8255来制作的交通灯控制系统相比,程序简单易读,结构清楚,最重要的是成本低。 在设计一个系统,除了达到所要求的性能指标以外,成本也是很重要的一个指标。 成本的高低也决定了产品的适用性。 参考文献: 【1】《单片机原理及应用》清华大学出版社梅丽凤主编第39-156页 【2】张毅坤.单片微型计算机原理及应用,西安电子科技大学出版社 1998
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计