单片机打铃系统设计完整Word格式文档下载.docx
《单片机打铃系统设计完整Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机打铃系统设计完整Word格式文档下载.docx(28页珍藏版)》请在冰点文库上搜索。
单片机简单的说就是一款微型的计算机,包含中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O口、串行口等部分,可以作为一个系统的主控制器,将其他部分电路整合到一起组成一个系统,为控制提供智能化。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。
世界各大电气厂家、测控技术企业、机电行业,竞相把单片机应用于产品更新,作为实现数字化、智能化的核心部件。
本篇设计就是以单片机为核心的定点打铃系统。
1方案的比较与选择
1.1系统的比较与选择
方案一:
采用数字电路来搭建,利用555时基电路构成振荡器产生100Hz频率的振荡电路,再通过分频器得到1Hz频率,即产生1秒计时时间,显示部分通过锁存器和驱动芯片将计时时间送入数码管显示。
这种方案电路结构比较复杂,芯片使用比较多,灵活性不高,而且准确度不够精确,不利于系统的扩展。
而且这种电路中需要使用独立式的数码管,每一个数码管都需要连接一个数据锁存器和数码管驱动芯片,连接线比较多,制作的过程中很容易出错。
方案二:
采用AT89C52单片机作为系统控制单元,通过时钟芯片来实现计时功能,单片机负责将时间送入显示电路显示。
这种方案电路设计简单,时间精确,使用方便。
而且单片机的强大功能使得系统方便扩展,有利于提高智能性。
综上所述,本设计选择第二种方案。
1.2显示器的比较与选择
半导体数码管的每个线段都是一个发光二极管(LightEmittingDiode,简称LED),因而也把它叫作LED数码管或LED七段显示器。
半导体数码管不仅具有工作电压低、体积小、寿命长、可靠性高等优点,而且响应时间短(一般不超过0.1us),亮度也比较高,但是只能显示数字,显示内容比较受到限制,又过多的占用单片机的I/O口。
液晶显示器简称LCD,液晶是一种既具有液体的流动性又具有光学特性的有机化合物,它的透明度和呈现的颜色受外加电场的影响,利用这一特点便可以做成字符显示器。
液晶显示器最大的优点是功耗极小,每平方厘米的功耗在1uW以下。
它的工作电压也很低,在1V以下仍能工作。
而且显示内容比数码管要丰富。
因此,液晶显示器在电子表以与各种小型、便携式仪器、仪表中得到了广泛的应用。
1.3时钟芯片的比较与选择[1]、[2]
因为本设计只需要显示时,分钟和秒,因此可以直接采用单片机定时计数器提供秒信号,使用程序实现时、分、秒计数,采用此种方案可减少芯片的使用,并且单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点。
DS1307,它是I2C总线接口实时时钟芯片,可以独立于CPU工作,不受CPU主晶振与其电容的影响,且计时准确,月累积误差一般小于10秒。
芯片还具有主电源掉电情况下的时钟保护电路,DS1307的时钟靠后备电池维持工作,拒绝CPU对其读出和写入访问。
同时还具有备用电源自动切换控制电路,因而可在主电源掉电和其它一些恶劣环境场合中保证系统时钟的定时准确性。
同时,DS1307芯片内部还集成有一定容量、具有掉电保护特性的静态RAM,可用于保存一些关键数据。
综上所述,本设计选择第一种方案。
2系统框图
打铃系统设计主要包括键盘控制模块、时钟电路模块、系统电源模块、复位电路模块、液晶显示模块和打铃模块。
通过这几个模块的协调工作就可以完成相应的计时功能,显示功能和打铃功能。
图2-1系统框图
3原理分析
3.189C52简介
图3.1-189C52单片机引脚图
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的CPU、RAM、ROM、多种I/O口、中断系统和定时器/计时器功能集成到一块芯片上的完善的计算机系统,它最早是被用在工业控制领域。
由于单片机在工业控制领域的广泛应用,为使更多的业内人士、学生和爱好者学习掌握这门技术,产生了单片机开发板。
早期的单片机是8位或4位的,其中最成功的是INTEL的8031单片机,因简单可靠而获得了很大的好评。
此后,在8031的基础上发展出了MCS51系列单片机,基于这一系统的单片机一直到现在还广泛应用着。
随着工业控制领域要求的提高,开始出现了16位的单片机,因性价比不好并未得到广泛的应用。
90年代后期随着消费电子产品的大发展,单片机技术得到了很大的提高,32位机迅速代替了16位机进入主流市场,传统的8位机的处理速度也提高了数百倍,而且价格也降低了很多,得到了广泛的应用。
现在人们生活中几乎每个电子产品或机械产品都或多或少带有单片机控制系统,智能仪器仪表、医疗器械、家用电器、儿童玩具等等,汽车电子中单片机的应用也是非常广泛,一般汽车上配备有接近40多个单片机系统。
AT89S51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失性存储器制造技术,与工业标准的MCS-51指令集和输出管脚相兼容。
主要特性:
◆与MCS-51产品指令系统完全兼容;
◆4K字节在系统编程(ISP)Flash闪速存储器;
◆1000次擦鞋周期;
◆4.0-5.5V的电压工作范围;
◆全静态工作模式:
0Hz-33MHz;
◆三级程序加密锁;
◆128*8字节内部RAM;
◆32个可编程I/O口线(P1、P2、P3、P4);
◆2个16位定时/计数器,可通过编程实现4种工作方式;
◆1个具有6个中断源、4个优先级的中断潜嵌套结构;
◆全双工UART通道;
◆低功耗空闲和掉电模式;
◆中断可从空闲模式唤醒系统;
◆看门狗(WDT)与双数据指针;
◆掉电标识和快速编程特性;
◆灵活的在系统编程(ISP字节或页写模式)。
AT89S51单片机内部主要由9个部件组成:
1个8位中央处理器;
4KBFlash存储器;
128B的数据存储器;
32条I/O口线;
2个定时器/计数器;
1个具有6个中断源、4个优先级的中断嵌套结构;
用于多处理机通信、I/O扩展或全双工UART的串行口;
特殊功能寄存器;
1个片内振荡器和时钟电路。
AT89S51系列单片机完全继承了MCS-51的指令系统,共有111条指令,按其功能可分为五大类:
数据传送类指令、算术运算类指令、逻辑运算类指令、控制转移类指令、布尔操作。
中断技术是计算机中的重要技术之一,它既和硬件相关,也和软件相关,正因为有了“中断”才使得计算机的工作更加灵活、效率更高。
所谓中断实际是一个处理时间的过程,这一过程一般是由计算机内部或外部某种紧急事件引起并向主机发出请求处理的信号,主机在允许情况下相应请求,暂停正在执行的程序,保存好“断点”处的现场,转去执行中断处理程序,处理完后自动返回到原断点处,继续执行原程序。
引起中断的原因,或是能发出中断申请的来源,称为中断源。
AT89S51提供5个中断源,即:
⏹外部中断源/INT0:
由P3.2输入;
⏹外部中断源/INT1:
由P3.3输入,I/O设备中断请求信号,或掉电故障异常事件中断请求信号都可以作为外部中断源连/INT0、/INT1。
⏹定时器/计数器T0溢出中断:
TF0做标志,由P3.4输出;
⏹定时器/计数器T1溢出中断:
TF1做标志,由P3.5输出;
⏹片内串行口产生的中断:
RX、TX。
89C52单片机引脚说明如下:
●VCC:
电源端,接+5V。
●GND:
接地端。
●XTAL1:
接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,若使用外部TTL时钟时,该引脚为外部时钟的输入端。
●XTAL2:
接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,若使用外部TTL时钟时,该引脚必须悬空。
●地址锁存允许信号ALE:
系统扩展时,ALE用于控制地址锁存器锁存P0口输出的低8位地址,从而实现数据与低位地址的复用。
此外,ALE是以六分之一晶振频率的固定频率输出的正脉冲,可作为外部时钟或外部定时脉冲使用。
●PSEN:
PSEN是读外部程序存储器的选通信号,低电平有效。
●访问程序存储器控制信号EA:
当为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令。
当为低电平时,CPU只执行片外程序存储器指令。
●复位信号RST:
该信号高电平有效,在输入端保持两个机器周期的高电平后,就可以完成复位操作。
●P0口(P0.0~P0.7):
该端口为漏极开路的8位准双向I/O口,它为8位地址线和8位数据线的复用端口,使用时需接外部上拉电阻。
在访问外部程序存储器时,它作存储器的低8位地址线。
●P1口(P1.0~P1.7):
它是一个内部带上拉电阻的8位准双向I/O口,作为输入口使用时,应先向其内部锁存器写1。
●P2口(P2.0~P2.7):
它为一个内部带上拉电阻的8位准双向I/O口,作输入口时同样需先向其内部锁存器写1。
在访问外部程序存储器时,它作存储器的高8位地址线。
●P3口(P3.0~P3.7):
P3口同样是内部带上拉电阻的8位准双向I/O口,P3口除了作为一般的I/O口使用之外,其还具有第二引脚功能。
3.2键盘控制模块
本系统设计除复位按键外共配置了4个独立键盘来实现系统功能的控制。
4个独立键盘分别为s1、s2、s3、s4,分别连接到单片机的P0口的低四位。
图3.2-1键盘控制模块
3.3时钟电路模块
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。
图3.3-1时钟电路模块
3.4复位电路模块
复位是单片机的初始化操作,其主要功能是初始化单片机,使单片机从0000H单元开始执行程序。
除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。
RST引脚是复位信号的输入端。
复位电路在这里采用的是上电加按键复位电路形式。
图3.4-1复位电路模块
3.5系统电源模块
图3.5-1系统电源模块
为52系列单片机系统提供的电源为稳定的5V直流电源。
3.6液晶显示模块
图3.6-1液晶显示模块
3.7打铃模块
打铃电路一般用声音或音乐作为提醒,本设计选用蜂鸣器和LED灯实现声光双重打铃功能。
打铃时间到时,单片机P3.3引脚置高,三极管9013导通,继而蜂鸣器和LED灯导通,实现蜂鸣和灯亮打铃功能。
图3.7-1打铃模块
3.8ISP下载线接口
由于系统采用的单片机为AT89S52单片机,为更方便系统的重复可用性与系统的维护性,本设计增加了在系统可编程的ISP下载线接口。
只要拥有一根下载线,就能很方便快捷的对系统单片机进行程序的下载与系统维护升级。
图3.8-1ISP下载线接口
4系统软件设计
4.1Keil是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。
软件的编程设计是单片机系统设计的核心部分,也是能否实现预定功能的关键。
单片机编程常用的语言是C语言和汇编语言。
我们这里使用的是C语言。
以下是部分程序设计思路:
LCD1602的基本操作时序:
读状态:
输入:
RS=L,RW=H,E=H;
输出:
D0-D7=状态字。
写指令:
RS=L,RW=L,D0-D7=指令码,E=高脉冲;
无。
读数据:
RS=H,RW=H,E=H;
D0-D7=数据。
写数据:
RS=H,RW=L,D0-D7=数据,E=高脉冲;
LCD1602初始化过程:
延时15ms;
写指令38H(不检测忙信号);
延时5ms;
以后每次写指令、读/写数据操作均需要检测忙信号;
写指令38H,显示模式设置;
写指令08H,显示关闭;
写指令01H,显示清屏;
写指令06H,显示光标移动设置;
写指令0CH,显示开与光标设置。
单片机读取按键的方式有2种:
查询方式和中断方式。
查询方式是利用单片机引脚不断查询是否有按键按下,如果有按键按下,利用延时程序去除抖动再次确认后,进入该按键对应的子程序执行命令。
中断方式是利用单片机的外部中断功能来检测是否有按键按下。
利用中断功能可以不用在主程序中不断的执行查询命令,有中断产生即有按键按下时,再进入中断子程序中进行处理。
具体程序请参考后面的附录2。
图4-1系统软件设计流程图
5结论
在本次设计中我们以89C52单片机为核心部件,加之复位电路、晶振电路、按键电路、电源电路、打铃电路等协同控制,一起完成定时打铃的功能。
通过对单片机89C52的设计和应用,使我对单片机的工作原理与功能有了更加深刻的了解,并且对单片机程序语言设计有了进一步的认识。
在设计过程中,我们也存在很多的问题主要有硬件的设计和软件的调试。
在设计电路时,看似简单,但却也有一定的难度,许多的原件我们都很难找到,因为元件太多了而我们又不熟悉Altium9.0,所以很难画完。
想要把这部分做好你必须很熟练元件库才能轻松完成。
不过,还有更复杂的,那就是程序了,你必须很熟悉每个模块与其功能,这样你才能写出与之对应并且正确的程序。
通过设计,我感觉我还需更加努力才行,还要好好学好知识,使之更加扎实,这样才能把课题设计的更好。
不过这次设计也让我学到了很多,让我更加了解单片机,也让我了解了论文的写法,相信在以后的毕业设计中,我一定会做的更好。
经过这次的单片机打铃系统设计,感触很多,收获也不小。
首先要感谢孙老师。
在这段时间里孙老师详细的给我们讲解了在做课题设计过程中应当注意的事项,并在百忙之中特地抽出时间为我们讲课,讲解论文的排版与写作技巧,使我们受益非浅,还不忘督促我们按照步骤完成每一项内容,没有老师的辛勤教导就没有我现在的课题论文。
同时我还要感谢所有教导过我的老师,是你们的谆谆教诲给了我做这次课题设计的必备知识,在学习的道路上,乃至人生的道路上,你们就是我的领路人,真的非常感谢。
此外还要感谢陪伴和帮助我的每一个同学,因为有你们,我的大学生活才过的有姿有色,一点也不孤单,我才能突破重重困境,走向新的黎明。
老师、朋友、同学,真心的谢谢你们,非常感谢!
附录1:
总电路框图
附录2:
源程序
#include<
reg51.h>
stdio.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitLCD_EN=P3^5;
sbitLCD_RS=P3^7;
sbitLCD_RW=P3^6;
sbitsda=P1^2;
sbitsclk=P1^1;
sbitFMQ=P3^4;
#defineLCD_DATA1
#defineLCD_COMMAND0
#defineLCD_PORTP2
ucharDISP_up[16];
ucharDISP_dw[16];
ucharLCD_NO;
ucharTBA[]={"
0123456789"
};
uchartemp5,count_1,temp6;
ucharD1307[3];
ucharflag;
uchartime_tab[24];
uchart_count;
ucharkey_board_t;
ucharkey_count;
ucharsave_data[8];
ucharopt_time;
voiddelay(uinttt)
{
uchari;
for(;
tt>
0;
tt--)
{
for(i=0;
i<
10;
i++);
}
}
bitLCD_BUSY()
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
_nop_();
result=(bit)(LCD_PORT&
0x80);
LCD_EN=0;
returnresult;
voidLCD_Write(uchardat,uchartype)
while((LCD_BUSY()&
&
100)){i++;
if(i>
99)LCD_NO=1;
LCD_RS=type;
LCD_RW=0;
voidLCD_INITIALIZE()
LCD_Write(0x06,LCD_COMMAND);
LCD_Write(0x38,LCD_COMMAND);
LCD_Write(0x0c,LCD_COMMAND);
voidLCD_Prints(uchar*dat,ucharadd,ucharlens)
LCD_Write(add|0x80,LCD_COMMAND);
lens;
i++)
LCD_Write(dat[i],LCD_DATA);
}
voidINIT_DISP_up(void)
DISP_up[0]=TBA[D1307[2]>
>
4];
DISP_up[1]=TBA[D1307[2]&
0x0f];
DISP_up[2]='
:
'
;
DISP_up[3]=TBA[D1307[1]>
DISP_up[4]=TBA[D1307[1]&
DISP_up[5]='
DISP_up[6]=TBA[D1307[0]>
DISP_up[7]=TBA[D1307[0]&
DISP_up[8]='
'
DISP_up[9]='
DISP_up[10]='
DISP_up[11]='
DISP_up[12]='
DISP_up[13]='
DISP_up[14]='
DISP_up[15]='