计算机控制课程设计.docx
- 文档编号:15326499
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:16
- 大小:240.07KB
计算机控制课程设计.docx
《计算机控制课程设计.docx》由会员分享,可在线阅读,更多相关《计算机控制课程设计.docx(16页珍藏版)》请在冰点文库上搜索。
计算机控制课程设计
一、设计背景及意义
当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段。
单片机具有性价比高、集成度高、可靠性好、抗干扰性强等特点,广泛运用于各种智能仪器中。
基于新型规则的可编程交通控制系统,可以实现对车辆、行人的控制,使的交通便于管理。
所以,采用单片机自动控制交通灯有现实的社会意义。
二、设计任务
1.采用AT89C51芯片;
2.使用发光二极管(红,黄,绿)代表各个路口的交通灯;
3.用8段数码管对转换时间进行倒时;
4、带紧急按钮功能,当紧急按钮按下时,所有方向均亮起红灯;
5.控制程序采用C语言编程。
三、控制系统设计原理
3.1设计思路
利用单片机实现交通灯的控制,该任务分以下几个方面:
a、实现红、绿、黄灯的循环控制。
要实现此功能需要表示三种不同颜色的LED灯分别接在P1个管脚,用软件实现。
b、用数码管显示倒计时。
可以利用动态显示或静态显示,串行并出或者并行并出实现。
c、紧急状况功能。
这需要人工实现,编程时利用到中断才能带到目的,只要有按钮按下,那么四个方向全部显示红灯,禁止车辆通行。
当情况解除(再次按下按钮),重新回到初始状态。
3.2总体设计图
图1
3.2.1交通灯循环控制
使用AT89C51单片机完成对十字路口交通灯的控制,十字路口的工作过程分为东西方向和南北方向两个干道的红绿黄灯工作状态(红灯亮表示禁止通行,绿灯亮表示允许通行,黄灯亮表示提醒红绿灯之间状态的切换)的控制,每个工作状态的时间设为40s,采用循环的控制方式,具体控制过程如下(如图2):
1、系统工作开始后,首先进入初始设定阶段,东西方向亮红灯,南北方向亮绿灯;
2、进入状态1的倒计时阶段,东西方向的红灯开始40s倒计时,南北方向绿灯开始35s倒计时;
3、进入状态1过渡阶段,东西方向红灯开始最后5s倒计时,南北方向黄灯亮并开始5s倒计时;
4、过渡阶段1完成后,东西方向亮绿灯,南北方向亮红灯;
5、进入状态2的倒计时阶段,南北方向的红灯开始40s倒计时,东西方向绿灯开始35s倒计时;
6、进入状态2过渡阶段,南北方向红灯开始最后5s倒计时,东西方向黄灯亮并开始5s倒计时;
7、过渡阶段2完成后,进入状态1,开始循环。
图2
3.2.2倒计时显示
使用8段LED数码管进行倒计时的显示
此处采用LED静态显示方式,当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另个字符为止。
89C51的串行口RXD和TXD为一个全双工串行通信口,但工作在方式0下可作同步移位寄存器,其数据由RXD端串行输出或输入;而同步移位时钟由TXD端串行输出,在同步时钟的作用下,实现由串行到并行的数据通信。
在不需要使用串行通信的场合,利用串行口加外围芯片74LS164就可构成一个或多个并行输入\输出口,用于串——并转换或显示器LED驱动。
此利用后者。
3.2.3紧急状况
当遇到紧急情况如救护车通过、交通事故等时,可按下紧急状况按钮,是东西方向和南北方向全部亮红灯,保证紧急情况得到及时解决。
待情况解决后,交通灯的工作情况回到初始设定阶段,从而保证交通流畅。
为了实现此功能,利用单片机中断达到目的。
利用一个手动按钮开关接至单片机外部中断0,同时在软件设计时将其设为最高优先级。
当有按键按下,四方全为红灯,当再按下按钮,回到初始位置继续执行。
3.3AT89C51
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3.3.1AT89C51单片机的主要特性
与MCS-51兼容,4K字节可编程闪烁存储器,可以反复擦除1000次,数据保留时间可达10年,全静态工作,三级程序存储器锁定,128*8位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源(两个外部中断源和3个内部中断源),可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路(时钟电路的作用是产生单片机工作所需要的时钟脉冲序列),中断系统(中断系统的作用主要是对外部或内部的终端请求进行管理与处理)。
AT89S51共有5个中断源,其中又2个外部中断源和3个内部中断源。
图3AT89C51系列单片机的内部结构示意图
3.3.2AT89C51引脚功能
图4AT89C51引脚图
·VCC:
电源电压
·GND:
接地
·P0口:
P0口是一组8位双向I/0口。
P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。
当CPU访问片外存储器时,P0口分时先作低8位地址总线,后作双向数据总线,此时,P0口就不能再作I/O口使用了。
在访问期间激活要使用上拉电阻。
·P1口:
Pl是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。
·P2口:
P2是一个带有内部上拉电阻的8位准双向I/O口,P2即可作为通用的I/O口使用,也可以作为片外存储器的高8位地址总线,与P0口配合,组成16位片外存储器单元地址。
·P3口:
P3口是一组带有内部上拉电阻的8位准双向I/0口。
P3口除了作为通用的I/O口使用之外,每个引脚还具有第二功能,具体分配如表1
表1具有第二功能的P3口引脚
·RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。
DISRT0位缺省为RESET输出高电平打开状态。
·ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
·PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的PSEN信号。
·EA/VPP:
外部访问允许。
·XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
3.3.3AT89C51中断源
AT89C51有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、两个片内定时/计数器溢出中断TF0和TF1,一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制,其中5个中断源的程序入口地址如表2所示:
表2中断源的服务程序入口地址
3.4LED数码管
LED显示器有两中工作方式:
静态显示方式和动态显示方式。
静态显示的特点是每个数码管必须接一个8位锁存器用来锁存待显示的字型码。
送入一次字型码显示自行一直保持,直到送入新字型码为止。
这种方法的优点是占用CPU时间少,显示便于监测和控制。
缺点是硬件电路比较复杂,成本较高。
各数码管在显示过程中持续得到显示信号,与各数码管接口的I/O口是专用的。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
各数码管在显示过程中轮流得到显示信号,与各数码管接口的I/O口是共用的。
该设计采用如下所示的数码管,分别显示南北和东西灯的剩余时间。
片选部分和数码段显示部分,分别接单片机管脚的P2口和P0口,具体的共阴数码管下见图。
其中,A到G为码段控制端口,1,2为片选端口。
四、硬件设计
4.1时钟部分电路设计
时钟电路用于产生MCS-51单片机工作时所必须的时钟控制信号。
其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。
在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。
本设计采用12MHz晶振和两个33Pf瓷片电容,他们构成一个稳定的自激振荡器。
该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
为单片机提供标准时钟。
其中两个瓷片电容起微调作用。
如图所示:
4.2复位部分电路设计
复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
该设计采用加电直接复位,复位电容采用10uF,电阻10000欧,为了节省元件,没有采用上电加按键模式。
加电瞬间,RES管脚为高电平。
通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。
其连接图如下图所示:
4.3硬件设计总电路图
五、软件设计
5.1设计流程图
5.2程序清单
#include
sbitADDR3=P1^3;
sbitENLED=P1^4;
unsignedcharcodeLedChar[]={//数码管显示字符转换表
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
unsignedcharLedBuff[7]={//数码管+独立LED显示缓冲区
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
bitflag1s=1;
unsignedcharT0RH=0;
unsignedcharT0RL=0;
voidConfigTimer0(unsignedintms);
voidTrafficLight();
voidmain()
{
TMOD=0x01;
TH0=(65536-DELAY)/256;
TL0=(65536-DELAY)%256;
EA=1;//开总中断
ET0=1;
TR0=1;
P0=0xff;
P1=0x00;//设置定时器为中断工作模式
ENLED=0;//使能数码管和LED
ADDR3=1;
ConfigTimer0
(1);//配置T0定时1ms
while(NSEMERGENCY&&EWEMERGENCY)//紧急情况处理
{
timeDisplay_Blue();
timeDisplay_Red();
if(flag)
stateChange();
stateChange_Glint();
}
while
(1)
{
if(flag1s)//每秒执行一次交通灯刷新
{
flag1s=0;
TrafficLight();
}
}
}
voidConfigTimer0(unsignedintms)
{
unsignedlongtmp;//临时变量
tmp=11059200/12;//定时器计数频率
tmp=(tmp*ms)/1000;//计算所需的计数值
tmp=65536-tmp;//计算定时器重载值
tmp=tmp+18;//补偿中断响应延时造成的误差
T0RH=(unsignedchar)(tmp>>8);//定时器重载值拆分为高低字节
T0RL=(unsignedchar)tmp;
TMOD&=0xF0;//清零T0的控制位
TMOD|=0x01;//配置T0为模式1
TH0=T0RH;//加载T0重载值
TL0=T0RL;
ET0=1;//使能T0中断
TR0=1;//启动T0
}
voidTrafficLight()
{
staticunsignedcharcolor=2;
staticunsignedchartimer=0;
if(timer==0)
{
switch(color)
{
case0:
color=1;
timer=2;
LedBuff[6]=0xE7;
break;
case1:
color=2;
timer=29;
LedBuff[6]=0xFC;
break;
case2:
color=0;
timer=39;
LedBuff[6]=0x3F;
break;
default:
break;
}
}
else
{
timer--;
}
LedBuff[0]=LedChar[timer%10];
LedBuff[1]=LedChar[timer/10];
}
voidLedScan()
{
staticunsignedchari=0;//动态扫描索引
P0=0xFF;//关闭所有段选位,显示消隐
P1=(P1&0xF8)|i;//位选索引值赋值到P1口低3位
P0=LedBuff[i];//缓冲区中索引位置的数据送到P0口
if(i<6)//索引递增循环,遍历整个缓冲区
i++;
else
i=0;
}
voidInterruptTimer0()interrupt1
{
staticunsignedinttmr1s=0;//1秒定时器
TH0=T0RH;//重新加载重载值
TL0=T0RL;
LedScan();//LED扫描显示
tmr1s++;//1秒定时的处理
if(tmr1s>=1000)
{
tmr1s=0;
flag1s=1;//设置秒定时标志
}
}
六、总结
经过三个星期的努力,终于完成了自己的计算机控制课程设计。
虽说忙碌了点,但我觉得这样的生活充实且有成就感,当然,也获益匪浅。
通过这次交通灯的课程设计,让我提高了用专业知识、专业技能分析和解决现实问题的能力。
使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,并且对已有知识有了更深层次的理解和认识。
可以说在整个软件设计过程中,我不仅学会了延时的两种方法,即软件延时和硬件延时,还掌握数码管的两种显示方式(即动态显示与静态显示)及其如何选择。
在整个课程设计过程我还掌握了一下几点:
(1)掌握了电子系统设计的流程,熟悉了各种硬件电路以及软件编程方法。
(2)理解了最单片机的各部分组成及特性。
(3)熟练使用了各种计算机辅助设计工具完成设计,充分掌握了这些工具的使用。
通过本次的课程设计,充分意识到自己所学的东西还是非常有限的,不过通过设计,还是学到了一些书本上没有学到的东西,为自己以后的学习起了很大的帮助。
就我个人而言,很深刻地体会到一点,那就是我们在设计过程中一定要有一个整体的清晰的思路,知道自己的设计的对象的基本功能和核心器件的适用及其作用,只要把握住这些主要方面,一些小问题都将围绕着这些主要问题而逐步得到解决。
同时我也懂得,在整个设计过程中,生活中也一样,一定要意志坚定,克服自己的畏难情绪,这样才能将事情做好,才能干出一番成就。
最后,对在这个课程设计过程中帮助我的所有同学和各位指导老师再次表示衷心的感谢!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机控制 课程设计