单片机课程设计0Word文件下载.docx
- 文档编号:18636216
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:19
- 大小:205.12KB
单片机课程设计0Word文件下载.docx
《单片机课程设计0Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计0Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
那么靠什么来实现这井然秩序呢?
靠的就是交通信号灯的自动指挥系统。
交通信号灯控制方式很多。
本系统采用可编程并行I/O接口芯片89C51为中心器件来设计交通灯控制器,红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过8255的PC口输出至双位数码管);
遇到紧急情况需要转换交通灯状态的可以通过强制将交通灯进行状态切换!
本系统实用性强、操作简单、扩展功能强。
关键词:
单片机交通灯紧急通行
第二章设计目的
掌握I/O口德综合应用技术;
掌握延时子程序编写与使用;
掌握单片机系统的仿真过程。
重点在程序,也就是指令得应用和理解!
经本次实训,提高学生的动手实践能力,并与实际相联系!
用所学的知识来解决现实中的一些问题,从而认识到知识的重要性!
1.通过试验进一步理解和消化了书本知识,分析每个语句的含义,运用所学知识进行简单的程序设计。
了解了在单片机系统中扩展简单I/O接口的方法.外部中断技术的基本使用方法,掌握了中断处理程序的编程方法。
2.通过在图书馆查阅各种单片机资料,培养了我自学和独立思考的能力。
与同学交流研究,让我懂得了更多以前不明白的知识.3.在课程设计过程中,不断调试程序和修改程序,提高了对单片机的应用能力,分析问题和解决问题的能力。
4.这样就可以实现按车流量规模给定绿灯时长,达到最大限度的有车放行,减少十字路口的车辆滞流,缓解交通拥挤、实现最优控制,从而提高了交通控制系统的效率
第三章总体设计
3.1设计任务
个十字路口交通灯控制器。
用单片机控制LED灯模拟指示。
模拟东西方向的十字路口交通信号控制情况。
东西向通行时间为25s,南北向通行时间为30s,缓冲时间为5s。
,模拟交通灯管理。
在一个交通十字路口有一条主干道(南北方向),一条从干道(东西方向),主干道的通行时间比从干道通行时间长,四个路口安装红,黄,绿,灯各一盏;
图1-1
3.2设计要求
1、设计一个十字路口的交通灯控制电路,要求东西方向(主干道)车道和南北
方向(从干道)车道两条交叉道路上的车辆交替运行,时间可设置修改。
2、在绿灯转为红灯时,要求黄灯闪烁,才能变换运行车道
3、黄灯亮时,要求每秒闪亮一次。
3.3设计方案
本课程设计是基于AT89C51设计的红绿交通灯。
用AT89C51与电阻、电容、开关等组成单片机的最小系统,AT89C51单片机的P1口驱动其中三个作为驱动端口驱动红绿交通灯亮与灭。
P1口是单纯的通用8位准双向I/O端口,每位可驱动4个TTL负载。
作为通用I/O端口,与P0端口的区别在于内部具有上拉电阻,所以输出时不用外接上拉电阻。
根据设计的要求可知,系统的硬件原理框图如下图1-2所示。
图1-2系统硬件框图
单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。
南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。
键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO口不够用时,可以考虑扩展8255或8155满足系统的要求。
3.4软件方案
根据设计要求,程序框图如图所示。
软件可由汇编语言完成,也可由C语言完成。
软件设计可以分为以下几个功能模块:
主程序:
初始化及键盘监控。
计时程序模块:
为定时器的中断服务子程序,完成0.1秒(或其他时间)和1秒的时间定时。
显示程序模块:
完成12个发光二极管和2个LED数码管的显示驱动。
第四章硬件电路设计
4.1单片机的最小系统
ATMEL公司生产的AT89C51单片机它是硬件电路的核心部分,时钟电路晶振使用12MHz,复位电路采取按键复位方式。
具体连接图2.1和图2.2
单片机系统的时钟电路
4.2电源电路设计
电源用5V直流变压器直接供电。
4.3数码管显示电路
显示电路采用2个共阴数码管,P1口作为数码管的输入。
数码管显示电路
4.4交通信号灯单片机顺序控制系统硬件原理图如下所示:
第五章主程序设计
主程序设计
系统程序流程图
第六章源程序
*第一个状态:
主干道、支干道均亮红灯5S*
*第二个状态:
主干道亮绿灯27S、支干道亮红灯*
*第三个状态:
主干道黄灯闪烁、支干道红灯闪烁*
*第四个状态:
主干道亮红灯、支干道亮绿灯22S*
*第五个状态:
主干道红灯闪烁、支干道黄灯闪烁*
*返回到第二个状态*
*其中外部中断INTO、INT1分别控制主、支干道亮绿灯*
**************************************************************/
/*11.0592MHz晶振*/
#include<
reg51.h>
//头文件
intrins.h>
#defineucharunsignedchar//宏定义
#defineuintunsignedint//宏定义
sbitRED_ZHU=P1^0;
sbitYELLOW_ZHU=P1^1;
sbitGREEN_ZHU=P1^2;
sbitRED_ZHI=P1^3;
sbitYELLOW_ZHI=P1^4;
sbitGREEN_ZHI=P1^5;
uintaa,bai,shi,ge,bb;
/*数码管显示0-9*/
uintcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*子函数声明*/
voiddelay(uintz);
voiddelay0(uintz);
voiddisplay(uintge,uintshi);
voidxtimer0();
voidcheck();
voidinit1();
voidinit2();
voidinit3();
voidinit4();
voidinit5();
voidxint0();
voidxint1();
voidGREEN_ZHU_ON();
voidGREEN_ZHI_ON();
/*********************************************************
主函数
*********************************************************/
voidmain()
{
EA=1;
//开中断
EX0=1;
//允许外部中断INT0中断
IT0=0;
//定义INT0触发方式
PX0=1;
//中断优先级高
EX1=1;
//允许外部中断INT1中断
IT1=0;
//定义INT1触发方式
PX1=1;
check();
//开机自检
init1();
//第1个状态
while
(1)
{
init2();
//第2个状态
init3();
//第3个状态
init4();
//第4个状态
init5();
//第5个状态
}
}
voidinit1()//第一个状态:
主干道、支干道均亮红灯5S
{
inttemp;
temp=6;
//变量赋初值
TMOD=0x01;
//定时器T0工作于方式1
TH0=0x4c;
TL0=0x00;
//定时器赋初值
ET0=1;
//开定时中断
TR0=1;
//开定时器T0
while
(1)
{
RED_ZHU=0;
RED_ZHI=0;
GREEN_ZHU=1;
GREEN_ZHI=1;
YELLOW_ZHU=1;
YELLOW_ZHI=1;
if(aa==20)//定时20*50MS=1S
aa=0;
//定时完成一次后清0
temp--;
//变量自减
if(temp<
0)
{
break;
}
shi=temp%100/10;
//显示十位
ge=temp%10;
//显示个位
display(ge,shi);
}
voidinit2()//第二个状态:
主干道亮绿灯27S、支干道亮红灯
temp=31;
{
RED_ZHU=1;
RED_ZHI=0;
GREEN_ZHU=0;
if(temp==3)
//显示个位
voidinit3()//第三个状态:
主干道黄灯闪烁、支干道红灯闪烁
temp=4;
YELLOW_ZHU=~YELLOW_ZHU;
RED_ZHI=~RED_ZHI;
;
voidinit4()//第四个状态:
主干道亮红灯、支干道亮绿灯22S
temp=26;
RED_ZHI=1;
GREEN_ZHI=0;
voidinit5()//第五个状态:
主干道红灯闪烁、支干道黄灯闪烁
YELLOW_ZHI=~YELLOW_ZHI;
RED_ZHU=~RED_ZHU;
/*显示子函数*/
voiddisplay(uintge,uintshi)
P0=0xfd;
P2=table[shi];
delay0(5);
P0=0xfe;
P2=table[ge];
voidxint0()interrupt0//外部中断INT0
GREEN_ZHU_ON();
voidxint1()interrupt2//外部中断INT1
GREEN_ZHI_ON();
voidGREEN_ZHU_ON()//外部中断INT0显示子程序
RED_ZHI=0;
RED_ZHU=1;
GREEN_ZHI=1;
GREEN_ZHU=0;
YELLOW_ZHU=1;
P0=0x00;
P2=0Xff;
delay0(1000);
return;
voidGREEN_ZHI_ON()//外部中断INT1显示子程序
RED_ZHI=1;
RED_ZHU=0;
GREEN_ZHI=0;
GREEN_ZHU=1;
P2=0xff;
voidcheck()//开机自检子程序
YELLOW_ZHI=0;
YELLOW_ZHU=0;
delay
(2);
P0=0xff;
/*定时中断子函数*/
voidxtimer0()interrupt1
aa++;
/*延时子函数*/
voiddelay0(uintz)
uinti,j;
for(i=0;
i<
z;
i++)
for(j=0;
j<
110;
j++);
500ms延时函数
晶振:
11.0592MHz
voiddelay(ucharj)
uchark;
uinti;
for(;
j>
0;
j--)
for(i=1250;
i>
i--)
for(k=180;
k>
k--);
第七章总结
单片机是微型计算机的一个重要的分支。
随着计算机技术的发展,单片机的应用领域也越来越广泛,它在工业控制、数据采集以及仪器仪表自动化等许多领域都起着十分重要的作用。
通过做基于单片机的交通灯顺序控制设计,不断查阅资料,我对单片机的体系及它在各个领域的应用有了一定的了解,对它的软件系统也有了一定的认识,并且增强了我对编程及编程环境的了解。
在总体上对单片机学习有了一定的提高,收获颇丰。
本系统采用AT-89系列单片机89C51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过AT89C51芯片的P3口设置红、绿灯燃亮时间的功能;
红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过P3口输出,显示时间直接通过8255的P0、P2口输出至双位数码管)。
系统不足之处不能控制车的左、右转、以及自动根据车流改变红绿灯时间等。
这是由于本身地理位子以及车流量情况所定,如果有需要可以设计扩充原系统来实现。
通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。
参考文献
【1】李军等,51系列单片机高级实例开发指南,北京航空航天大学出版社,2004.6
【2】何立民,单片机应用技术选编9【M】,北京航空航天大学出版社,2004.1
【3】王幸之等,AT89系列单片机原理与接口技术,北京航空航天大学出版社,
2004.5
【5】李朝青,单片机原理及接口技术,北京航空航天大学出版社,1999.3
【6】谢维成等,单片机原理与应用及C51程序设计,清华大学出版社,2006.8
【7】边海龙等,单片机开发与典型工程项目,电子工业出版社,2008.10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计