1、四川师范大学成都学院现代通信原理课程设计单片机打铃系统设计前言随着现代科技的发展,管理水平的完善,具有自动提示功能的打铃器能够为企业节省人力资源,减少开支,对做到一体化管理具有很大的帮助。而且自动打铃系统不断影响着我们的学习和生活,它已被广泛应用于各个学校中,它能够实现学校的办公自动化,便于学校的管理。用单片机控制的自动打铃器,充分发挥了体积小,价格便宜,功耗低可靠性好等特点,而且具有可改性,用于学校作息,方便了广大师生。目前自动打铃系统的研究和使用已经非常普及,之所以选这个课题就是看在他的成熟性和普遍性。在学校生活中,每天上下课都离不开打铃器的使用。打铃器可以为上下课的学生和老师们提供时间提
2、醒,同时,也可作为一个提醒学生们作息时间的时间表,让大家有一个时间意识,形成规律的生物钟,对自身的健康也有很大的好处的。对于那些上课精力过于集中、知识面拓展比较广的老师的拖堂现象也给了一个下课时间提醒,以免耽误学生们下一节课的上课时间。打铃器作为一个提醒人们时间的设备,自然离不开提供时间的系统,最原始的打铃器是人工根据时间通过敲钟来提醒,随着技术的发展,开始有了机械时打铃器。随着二十世纪电子技术的发展和二十一世纪半导体技术和集成电路的发展,电子技术开始渗入到各行各业,以电子表为主要基础提供时间基准的打铃器自然也是更新换代的更快,现在各种功能更多、使用更先进的打铃器层出不穷,有的还可以以音乐响铃
3、代替传统的“呤呤”声,打铃器更多的向着智能型转变。设备的智能化离不开单片机的使用。单片机简单的说就是一款微型的计算机,包含中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O口、串行口等部分,可以作为一个系统的主控制器,将其他部分电路整合到一起组成一个系统,为控制提供智能化。由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。世界各大电气厂家、测控技术企业、机电行业,竞相把单片机应用于产品更新,作为实现数字化、智
4、能化的核心部件。本篇设计就是以单片机为核心的定点打铃系统。1方案的比较与选择1.1系统的比较与选择方案一:采用数字电路来搭建,利用555时基电路构成振荡器产生100Hz频率的振荡电路,再通过分频器得到1Hz频率,即产生1秒计时时间,显示部分通过锁存器和驱动芯片将计时时间送入数码管显示。这种方案电路结构比较复杂,芯片使用比较多,灵活性不高,而且准确度不够精确,不利于系统的扩展。而且这种电路中需要使用独立式的数码管,每一个数码管都需要连接一个数据锁存器和数码管驱动芯片,连接线比较多,制作的过程中很容易出错。方案二:采用AT89C52单片机作为系统控制单元,通过时钟芯片来实现计时功能,单片机负责将时
5、间送入显示电路显示。这种方案电路设计简单,时间精确,使用方便。而且单片机的强大功能使得系统方便扩展,有利于提高智能性。综上所述,本设计选择第二种方案。1.2显示器的比较与选择方案一:半导体数码管的每个线段都是一个发光二极管(Light Emitting Diode,简称LED),因而也把它叫作LED数码管或LED七段显示器。半导体数码管不仅具有工作电压低、体积小、寿命长、可靠性高等优点,而且响应时间短(一般不超过0.1us),亮度也比较高,但是只能显示数字,显示内容比较受到限制,又过多的占用单片机的I/O口。方案二:液晶显示器简称LCD,液晶是一种既具有液体的流动性又具有光学特性的有机化合物,
6、它的透明度和呈现的颜色受外加电场的影响,利用这一特点便可以做成字符显示器。液晶显示器最大的优点是功耗极小,每平方厘米的功耗在1uW以下。它的工作电压也很低,在1V以下仍能工作。而且显示内容比数码管要丰富。因此,液晶显示器在电子表以及各种小型、便携式仪器、仪表中得到了广泛的应用。综上所述,本设计选择第二种方案。1.3时钟芯片的比较与选择1、2方案一:因为本设计只需要显示时,分钟和秒,因此可以直接采用单片机定时计数器提供秒信号,使用程序实现时、分、秒计数,采用此种方案可减少芯片的使用,并且单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用
7、方便等独特的优点。方案二: DS1307,它是I2C总线接口实时时钟芯片,可以独立于CPU工作,不受CPU主晶振及其电容的影响,且计时准确,月累积误差一般小于10秒。芯片还具有主电源掉电情况下的时钟保护电路,DS1307的时钟靠后备电池维持工作,拒绝CPU对其读出和写入访问。同时还具有备用电源自动切换控制电路,因而可在主电源掉电和其它一些恶劣环境场合中保证系统时钟的定时准确性。同时,DS1307芯片内部还集成有一定容量、具有掉电保护特性的静态RAM,可用于保存一些关键数据。综上所述,本设计选择第一种方案。2系统框图打铃系统设计主要包括键盘控制模块、时钟电路模块、系统电源模块、复位电路模块、液晶
8、显示模块和打铃模块。通过这几个模块的协调工作就可以完成相应的计时功能,显示功能和打铃功能。图2-1 系统框图3原理分析3.1 89C52简介图 3.1-1 89C52单片机引脚图单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的CPU、RAM、ROM、多种I/O口、中断系统和定时器/计时器功能集成到一块芯片上的完善的计算机系统,它最早是被用在工业控制领域。由于单片机在工业控制领域的广泛应用,为使更多的业内人士、学生和爱好者学习掌握这门技术,产生了单片机开发板。早期的单片机是8位或4位的,其中最成功的是INTEL的8031单片机,因简单可靠而获得了很大的好评。此后,在803
9、1的基础上发展出了MCS51系列单片机,基于这一系统的单片机一直到现在还广泛应用着。随着工业控制领域要求的提高,开始出现了16位的单片机,因性价比不好并未得到广泛的应用。90年代后期随着消费电子产品的大发展,单片机技术得到了很大的提高,32位机迅速代替了16位机进入主流市场,传统的8位机的处理速度也提高了数百倍,而且价格也降低了很多,得到了广泛的应用。现在人们生活中几乎每个电子产品或机械产品都或多或少带有单片机控制系统,智能仪器仪表、医疗器械、家用电器、儿童玩具等等,汽车电子中单片机的应用也是非常广泛,一般汽车上配备有接近40多个单片机系统。AT89S51是一种带4K字节闪烁可编程可擦除只读存
10、储器的低电压、高性能CMOS8位微处理器。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失性存储器制造技术,与工业标准的MCS-51指令集和输出管脚相兼容。主要特性:u 与MCS-51产品指令系统完全兼容;u 4K字节在系统编程(ISP)Flash闪速存储器;u 1000次擦鞋周期;u 4.0-5.5V的电压工作范围;u 全静态工作模式:0Hz-33MHz;u 三级程序加密锁;u 128*8字节内部RAM;u 32个可编程I/O口线(P1、P2、P3、P4);u 2个16位定时/计数器,可通过编程实现4种工作方式;u 1个具有6个中断源、4个优先级的中断潜嵌套结构
11、;u 全双工UART通道;u 低功耗空闲和掉电模式;u 中断可从空闲模式唤醒系统;u 看门狗(WDT)及双数据指针;u 掉电标识和快速编程特性;u 灵活的在系统编程(ISP字节或页写模式)。AT89S51单片机内部主要由9个部件组成:1个8位中央处理器;4KBFlash存储器;128B的数据存储器;32条I/O口线;2个定时器/计数器;1个具有6个中断源、4个优先级的中断嵌套结构;用于多处理机通信、I/O扩展或全双工UART的串行口;特殊功能寄存器;1个片内振荡器和时钟电路。AT89S51系列单片机完全继承了MCS-51的指令系统,共有111条指令,按其功能可分为五大类:数据传送类指令、算术运
12、算类指令、逻辑运算类指令、控制转移类指令、布尔操作。中断技术是计算机中的重要技术之一,它既和硬件相关,也和软件相关,正因为有了“中断”才使得计算机的工作更加灵活、效率更高。所谓中断实际是一个处理时间的过程,这一过程一般是由计算机内部或外部某种紧急事件引起并向主机发出请求处理的信号,主机在允许情况下相应请求,暂停正在执行的程序,保存好“断点”处的现场,转去执行中断处理程序,处理完后自动返回到原断点处,继续执行原程序。引起中断的原因,或是能发出中断申请的来源,称为中断源。AT89S51提供5个中断源,即:n 外部中断源/INT0:由P3.2输入;n 外部中断源/INT1:由P3.3输入,I/O设备
13、中断请求信号,或掉电故障异常事件中断请求信号都可以作为外部中断源连/INT0、/INT1。n 定时器/计数器T0溢出中断:TF0做标志,由P3.4输出;n 定时器/计数器T1溢出中断:TF1做标志,由P3.5输出;n 片内串行口产生的中断:RX、TX。89C52单片机引脚说明如下:l VCC:电源端,接5V。 l GND:接地端。l XTAL1:接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,若使用外部TTL时钟时,该引脚为外部时钟的输入端。l XTAL2:接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,若使用外部TTL时钟时,该引脚必须悬空。l 地址锁存允许信号
14、ALE:系统扩展时,ALE用于控制地址锁存器锁存P0口输出的低8位地址,从而实现数据与低位地址的复用。此外,ALE是以六分之一晶振频率的固定频率输出的正脉冲,可作为外部时钟或外部定时脉冲使用。l PSEN :PSEN是读外部程序存储器的选通信号,低电平有效。l 访问程序存储器控制信号EA:当为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令。当为低电平时,CPU只执行片外程序存储器指令。l 复位信号RST:该信号高电平有效,在输入端保持两个机器周期的高电平后,就可以完成复位操作。l P0口(P0.0P0.7):该端口为漏极开路的8位准双向
15、I/O口,它为8位地址线和8位数据线的复用端口,使用时需接外部上拉电阻。在访问外部程序存储器时,它作存储器的低8位地址线。l P1口(P1.0P1.7):它是一个内部带上拉电阻的8位准双向I/O口,作为输入口使用时,应先向其内部锁存器写1。l P2口(P2.0P2.7):它为一个内部带上拉电阻的8位准双向I/O口,作输入口时同样需先向其内部锁存器写1。在访问外部程序存储器时,它作存储器的高8位地址线。l P3口(P3.0P3.7):P3口同样是内部带上拉电阻的8位准双向I/O口,P3口除了作为一般的I/O口使用之外,其还具有第二引脚功能。3.2键盘控制模块本系统设计除复位按键外共配置了4个独立
16、键盘来实现系统功能的控制。4个独立键盘分别为s1、s2、s3、s4,分别连接到单片机的P0口的低四位。图3.2-1 键盘控制模块3.3时钟电路模块时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。图3.3-1 时钟电路模块3.4复位电路模块复位是单片机的初始化操作,其主要功能是初始化单片机,使单片机从0000H单元开始执行程序。除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可
17、以通过监视定时器来强迫复位。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.8 ISP下载线接口由于系统采用的单片机为AT89S52单片机,为更方便系统的重复可用性及系统的维护
18、性,本设计增加了在系统可编程的ISP下载线接口。只要拥有一根下载线,就能很方便快捷的对系统单片机进行程序的下载及系统维护升级。图3.8-1 ISP下载线接口4系统软件设计3Keil是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能、结构、可读性、可维护性上有明显的优势,因而易学易用。软件的编程设计是单片机系统设计的核心部分,也是能否实现预定功能的关键。单片机编程常用的语言是C语言和汇编语言。我们这里使用的是C语言。以下是部分程序设计思路:LCD1602的基本操作时序:读状态:输入:RS=L,RW=H,E=H;输出:D0-D7=状态字。写指令
19、:输入: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(不检测忙信号);延时5ms;写指令38H(不检测忙信号);以后每次写指令、读/写数据操作均需要检测忙信号;写指令38H,显示模式设置;写指令08H,显示关闭;写指令01H,显示清屏;写指令06H,显示光标移动设置;写指令0CH,显示开及光标设置。单片机读取按键的方式有2种:查询方式和中断方式。
20、查询方式是利用单片机引脚不断查询是否有按键按下,如果有按键按下,利用延时程序去除抖动再次确认后,进入该按键对应的子程序执行命令。中断方式是利用单片机的外部中断功能来检测是否有按键按下。利用中断功能可以不用在主程序中不断的执行查询命令,有中断产生即有按键按下时,再进入中断子程序中进行处理。具体程序请参考后面的附录2。图4-1 系统软件设计流程图5结束语在本次设计中我们以89C52单片机为核心部件,加之复位电路、晶振电路、按键电路、电源电路、打铃电路等协同控制,一起完成定时打铃的功能。通过对单片机89C52的设计和应用,使我对单片机的工作原理及功能有了更加深刻的了解,并且对单片机程序语言设计有了进
21、一步的认识。在设计过程中,我们也存在很多的问题主要有硬件的设计和软件的调试。在设计电路时,看似简单,但却也有一定的难度,许多的原件我们都很难找到,因为元件太多了而我们又不熟悉Altium9.0,所以很难画完。想要把这部分做好你必须很熟练元件库才能轻松完成。不过,还有更复杂的,那就是程序了,你必须很熟悉每个模块及其功能,这样你才能写出与之对应并且正确的程序。通过设计,我感觉我还需更加努力才行,还要好好学好知识,使之更加扎实,这样才能把课题设计的更好。不过这次设计也让我学到了很多,让我更加了解单片机,也让我了解了论文的写法,相信在以后的毕业设计中,我一定会做的更好。经过这次的单片机打铃系统设计,感
22、触很多,收获也不小。首先要感谢孙老师。在这段时间里孙老师详细的给我们讲解了在做课题设计过程中应当注意的事项,并在百忙之中特地抽出时间为我们讲课,讲解论文的排版及写作技巧,使我们受益非浅,还不忘督促我们按照步骤完成每一项内容,没有老师的辛勤教导就没有我现在的课题论文。同时我还要感谢所有教导过我的老师,是你们的谆谆教诲给了我做这次课题设计的必备知识,在学习的道路上,乃至人生的道路上,你们就是我的领路人,真的非常感谢。此外还要感谢陪伴和帮助我的每一个同学,因为有你们,我的大学生活才过的有姿有色,一点也不孤单,我才能突破重重困境,走向新的黎明。老师、朋友、同学,真心的谢谢你们,非常感谢!附录1:总电路
23、框图附录2:源程序#include#include#include#define uchar unsigned char#define uint unsigned intsbit LCD_EN=P35;sbit LCD_RS=P37;sbit LCD_RW=P36;sbit sda=P12;sbit sclk=P11;sbit FMQ=P34;#define LCD_DATA 1#define LCD_COMMAND 0#define LCD_PORT P2uchar DISP_up16;uchar DISP_dw16;uchar LCD_NO; uchar TBA=0123456789;uc
24、har temp5,count_1,temp6;uchar D13073;uchar flag;uchar time_tab24;uchar t_count;uchar key_board_t;uchar key_count;uchar save_data8;uchar opt_time;void delay(uint tt) uchar i; for(;tt0;tt-) for(i=0;i10;i+); bit LCD_BUSY()bit result;LCD_RS=0;LCD_RW=1;LCD_EN=1;_nop_();_nop_();result=(bit)(LCD_PORT&0x80)
25、;LCD_EN=0;return result;void LCD_Write(uchar dat,uchar type)uchar i;while(LCD_BUSY()&i99)LCD_NO=1;LCD_RS=type;LCD_RW=0;LCD_EN=0;_nop_();_nop_();_nop_();_nop_();void LCD_INITIALIZE()LCD_Write(0x06,LCD_COMMAND);LCD_Write(0x38,LCD_COMMAND);LCD_Write(0x0c,LCD_COMMAND);void LCD_Prints(uchar *dat,uchar ad
26、d,uchar lens)uchar i;LCD_Write(add|0x80,LCD_COMMAND);for(i=0;i4; DISP_up1=TBAD13072&0x0f; DISP_up2=:; DISP_up3=TBAD130714; DISP_up4=TBAD13071&0x0f; DISP_up5=:; DISP_up6=TBAD130704; DISP_up7=TBAD13070&0x0f; DISP_up8= ; DISP_up9= ; DISP_up10= ; DISP_up11= ; DISP_up12= ; DISP_up13= ; DISP_up14= ; DISP_
27、up15= ;void INIT_DISP_dw(void) DISP_dw0=TBAt_count+1; DISP_dw1=-; DISP_dw2=TBAsave_data0; DISP_dw3=TBAsave_data1; DISP_dw4=:; DISP_dw5=TBAsave_data2; DISP_dw6=TBAsave_data3; DISP_dw7= ; DISP_dw8= ; DISP_dw9= ; DISP_dw10=TBAsave_data4; DISP_dw11=TBAsave_data5; DISP_dw12=:; DISP_dw13=TBAsave_data6; DI
28、SP_dw14=TBAsave_data7; DISP_dw15= ; void iicstart(void) sclk=0; sda=1; sclk=1; delay(1); sda=0; delay(1); sclk=0; void iicstop(void) sclk=0;sda=0;sclk=1; uchar upcheck(void) uchar i;sclk=0;sda=1;sclk=1;if(sda=1)i=0;elsei=1;count_1+;sclk=0;return(i); void sendcheck(void) sclk=0;sda=0;sclk=1; void sen
29、ducheck(void) sclk=0;sda=1;sclk=1; void writeiic(uchar addr) uchar temp1,i;temp1=addr;sclk=0;for(i=0;i8;i+) if(temp1&0x80)=0)sda=0;elsesda=1;sclk=1;delay(2);sclk=0;temp1=temp11; temp5=upcheck(); uchar read(uchar addr) uchar temp1,temp2,i;temp1=addr;sclk=0;for(i=0;i8;i+) if(temp1&0x80)=0)sda=0;elsesd
30、a=1;sclk=1;delay(2);sclk=0;temp1=temp11;temp5=upcheck(); sclk=0;sda=1;for(i=0;i8;i+) temp2=temp21;sclk=1;delay(2);if(sda=1)temp2=temp2|0x01;sclk=0; senducheck(); return(temp2); void read1(uchar addr,uchar cc,uchar *chn) uchar temp1,temp2,temp3,i;temp1=addr;temp3=cc;sclk=0;for(i=0;i8;i+)if(temp1&0x80
31、)=0)sda=0;elsesda=1;sclk=1;delay(2);sclk=0;temp1=temp11;temp5=upcheck();for(temp1=0;temp1temp3;temp1+) sclk=0;sda=1;for(i=0;i8;i+) temp2=temp21;sclk=1;delay(2);if(sda=1)temp2=temp2|0x01;sclk=0; chntemp1=temp2;temp2=0x00;if(temp3-temp1)=1)senducheck();elsesendcheck(); void QU_write(uchar lx,uchar ly,
32、uchar lz) iicstart(); writeiic(lx); writeiic(ly); writeiic(lz); iicstop();void READ_1307_DISP(void) iicstart(); writeiic(0xd0); writeiic(0x00); read1(0xd1,3,D1307); iicstop();void key_board(void) uchar i; if(P3&0X0F)!=0X0F) delay(60); if(P3&0X0F)!=0X0F) i=P3&0X0F; while(P3&0X0F)!=0X0F); switch(i) ca
33、se 0x0e:if(flag=0) if(t_count5) t_count+; else t_count=0; break;case 0x0d:if(flag=1) if(key_board_t9) key_board_t+; else key_board_t=0; save_datakey_count=key_board_t; break;case 0x0b:if(flag=1) if(key_count7) key_count+;else key_count=0; break;case 0x07:if(flag=0) key_board_t=0; key_count=0; else f
34、lag=0;break; void main(void) FMQ=0;LCD_INITIALIZE();QU_write(0xd0,0x00,0x00);QU_write(0xd0,0x01,0x02);QU_write(0xd0,0x02,0x03);INIT_DISP_up();delay(1);delay(1); LCD_Prints(DISP_up,0,16); LCD_Prints(DISP_dw,0x40,16); while(1) key_board(); if(opt_time50) opt_time+; else opt_time=0; READ_1307_DISP(); d
35、elay(1); INIT_DISP_up(); INIT_DISP_dw(); LCD_Prints(DISP_up,0,16); LCD_Prints(DISP_dw,0x40,16); 参考文献1 顾曙敏:单片机与串行时钟DS1307的接口设计,现代电子技术,2003.26,P85-P872 程雪飞:100KW调幅广播发射机嵌入式控制系统,辽宁工程技术大学,2006.113 王荣秀:基于单片机和CPLD的粗光栅位移测量系统研究,重庆大学,2006.104 吴明晖:基于ARM的嵌入式系统开发与应用,人民邮电出版社,2004.15 杜春雷:ARM体系结构与编程,清华大学出版社,2003.26
36、 范风强、兰婵丽:单片机语言C51应用实战集锦,电子工业出版社,20017 张洪润:单片机应用设计200例(上册),北京航空航天大学出版社,2006.78 魏建安、龙希现:智能式电子打铃器的原理与设计,湖南教育学院学报,2000.18,P49-P519 王水富、韩云东、钟超等:基于8051的自动打铃系统设计,电脑编程技巧与维护,2009,P23-P2610 王书杰、陈震:基于校园网络的自动打铃系统设计,科学技术与工程,2011.11,P7804-P780711 王娟、魏雄:基于单片机的多功能定时打铃钟设计,湖南农机,学术版,2011,P85-P8612 于永、戴佳、常江:51单片机C语言常用模块与综合系统设计实例精讲,北京电子工业出版社,200713 徐福成:一款人性化的打铃器,电子制作,2008,P36-P3714 张毅刚、刘杰:MCS-51单片机原理及应用,哈尔滨工业大学出版社,200415 曹冬、尹成群、何玉钧等:基于AT89S51的新型打铃器的研制,现代电子技术,2005,P79-P8116 戴佳、戴卫恒、刘博文等:51单片机C语言应用程序设计实例精讲,电子工业出版社,200817 孙江宏等: Protel 99 电路设计与应用,机械工业出版社,200118 张义和:例说51单片机(C语言版),人民邮电出版社,201024