自动打铃电路设计.docx

上传人:星星 文档编号:1050813 上传时间:2024-04-01 格式:DOCX 页数:31 大小:313.62KB
下载 相关 举报
自动打铃电路设计.docx_第1页
第1页 / 共31页
自动打铃电路设计.docx_第2页
第2页 / 共31页
自动打铃电路设计.docx_第3页
第3页 / 共31页
自动打铃电路设计.docx_第4页
第4页 / 共31页
自动打铃电路设计.docx_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、I课程设计说明书 第 页自动打铃电路设计摘 要打铃器可以为上下课的学生和老师们提供时间提醒,有利于师生对上课和学习的合理安排。同事也可以作为一个提醒学生作息时间的时间表,让老师和学生都有一个规律科学的时间安排。因此,打铃系统的核心部分也是时钟部分,为系统提供时间基准。本设计主要是针对适用于校园打铃系统要求的,其介绍了一种基于单片机的自动打铃系统的设计方法,系统以STC89C52单片机为控制器,以DS1302时钟芯片为系统提供时间,并在1602液晶显示器上显示,通过按键可以设定定时打铃时间和打铃间隔。系统软件设计采用C语言来完成,C语言语法简洁,使用方便,用于完成软件设计非常方便。关键字:打铃器

2、,STC89C52单片机,DS1302,LCD1602II课程设计说明书 第 页目 录1 绪论11.1 课题描述11.2 设计任务与要求11.3 基本工作原理及框图12 总体电路设计及分析22.1 总体电路设计22.2 工作原理23单元电路设计33.1 STC89C52最小系统33.2晶振电路53.3复位电路53.4时钟集成模块63.6按键控制电路103.7响铃电路103.8程序流程图114 软件设计115 系统测试26总 结27致 谢28参考文献29第 29 页课程设计说明书 1 绪论1.1 课题描述此次设计利用单片机的中断系统,每次中断都从计时芯片中读取时间,与规定的作息时间比较,如果相等

3、则进行相应的控制或动作。由显示部分、计时时钟、蜂鸣器驱动模块和按钮控制模块四部分组成,三个轻触按键用于校正时间。现代机关企业,特别是学校要求对时间加以控制,要按时打铃及播放广播,以保证学习与工作的正常运行。本设计实现了这些功能,给学校及其他机关企业带来方便,整体性好,人性化强、可靠性高,实现了对时间控制的智能化。1.2 设计任务与要求设计自动打铃电路: 1. 按照设计要求,画出系统框图和系统硬件电路图。 2. 有基本计时和显示功能(用12小时制显示)。包括上下午标志,时、分的数字显示,秒信号指示。 3. 能设置当前时间,且具有校时功能, 能实现基本打铃功能,铃声可用小喇叭播放。 4. 编写软件

4、程序。 1.3 基本工作原理及框图自动打铃的设计电路框图如图1所示。七段数码管响铃装置AT89C52按键控制时钟电路图1 自动打铃电路框图2 总体电路设计及分析2.1 总体电路设计教学用电子打铃器主要由AT89S52片机、键盘扫描模块、时钟和复位模块、打铃器模块、八段数码管显示模块等组成。运用汇编语言来控制单片机80C52实现、动态数码显示等功能。且本设计中的80C52片机是整个工作过程的核心,是整个设计灵魂,它控制了脉冲时序的产生,显示信号的发送控制显示LED的选择1。所用到的芯片元器件:80C52片机, 3个按键,1个蜂鸣器,4个八段LED数码管。80C52一种带4K字节存储器(的低电压、

5、高性能CMOS 8位微处理器,俗称单片机。2.2 工作原理工作原理是在主函数里实时扫描按键函数,当键盘有键按下时,停止中断读取时钟芯片的值,判断键值,把改变后的时间从新写入时钟芯片。如果读取的时间与预设的时间一致时,单片机的P3.7口将执行相应的动作2。电路设计仿真图如图2所示。图2电路设计仿真图3单元电路设计3.1 STC89C52最小系统STC89C52是由深圳宏晶科技公司生产的与工业标准MCS-52令集和输出管脚相兼容的单片机3。STC89C52主要功能如表1所示。表 1 STC89C52主要功能主要功能特性兼容MCS52令系统8K可反复擦写Flash ROM32个双向I/O口256x8

6、bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能STC89C52 PDIP封装如图3所示。图3 STC89C52 PDIP封装图1.主电源引脚(2根)l VCC(Pin40):电源输入,接5V电源。l GND(Pin20):接地线。2.外接晶振引脚(2根)。l XTAL1(Pin19):片内振荡电路的输入端。l XTAL2(Pin20):片内振荡电路的输出端。3.控制引脚(4根)l RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高

7、电平将使单片机复位。l ALE/PROG(Pin30):地址锁存允许信号。l PSEN(Pin29):外部存储器读选通信号。l EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。4.可编程输入/输出引脚(32根)l STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。l P0口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7。l P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7。l P2口(Pin21Pin28):

8、8位准双向I/O口线,名称为P2.0P2.7。 l P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.7。最小系统是指能进行正常工作的最简单电路。它包含五个电路部分:电源电路、时钟电路、复位电路、片内外程序存储器选择电路、输入/输出接口电路。其中电源电路、时钟电路、复位电路是 保证单片机系统能够正常工作的最基本的三部分电路,缺一不可4。STC89C52最小应用系统电路如图4所示。图4 STC89C52最小应用系统电路3.2晶振电路单片机的每一条指令的执行都是由若干个基本的微动作组合而成的。例如由取指令、指令译码、指令执行等微动作组合而成。这些微动作在时间上存在着严格的先

9、后顺序,要想这些动作有条不紊地执行,就必须有一个时间基准来同步各部件的动作5。单片机的时钟信号就是用来提供单片机内部各个微动作的时间基准。而根据连接方式不同,时钟信号的产生有内部振荡方式和外部振荡方式两种方式。晶振电路由两个33pf电容跟11.0592MHZ的晶振片组成。晶振电路为单片机系统提供外部的振荡信号,从而支持单片机的运行。是单片机控制系统不可或缺的一部分6。晶振电路图5所示。图5 晶振电路3.3复位电路 复位电路与晶振电路构成了单片机的最小系统。当MCS-52系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片

10、机就处于循环复位状态7。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后自动实现复位操作7。图中电容C1和电阻R1对电源十5V来说构成微分电路。上电后,保持RST一段高电平时间,由于单片机内的等效电阻的作用,不用图中电阻R1,也能达到上电复位的操作功能8。本次课程设计采用上电复位电路实现如图6所示。图6 复位电路3.4 时钟集成模块DS1302概述DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用双电源供电(主电源和备用

11、电源),同时提供了对后背电源进行涓细电流充电的能力。采用三线接口与CPU进行同步通信9。DS1302引脚介绍如图7 DS1302封装图。图7 DS1302封装图引脚功能为:l Vcc:主电源;Vcc2:备用电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电;当Vcc2Vcc1时,由Vcc1向DS1302供电。l SCLK:串行时钟输入端,控制数据的输入与输出。l I/O:三线接口时的双向数据线。l CE:输入信号,在读、写数据期间必须为高。(4)DS1302寄存器DS1302中与时间、日期有关的寄存器共有12个,其中7个存放数据的格式为BCD码格式,其读写地址如下表2所示。表

12、2 DS1302时钟寄存器读寄存器写寄存器Bit7Bit7Bit7Bit7Bit7Bit7Bit7Bit7范围81H80HCH10秒秒00-5983H82H10分分00-5985H84H12010时时0-2324AM/PM1-1287H86H10日日1-3189H88H10月月1-128BH8AH00000周1-78DH8CH10年年00-998FH8EHWP0000000第一行秒寄存器,CH为时钟暂停标志位,该位为1时时钟停止,该位为0时时钟运行。第二行分寄存器,bit0bit6表示分钟数,因采用BCD编码,所以低四位最大能表示的数字为9,计数满向高三位进1。第三行时寄存器,12/24用来定

13、义DS1302小时的运行模式,12小时模式下bit5为1表示PM下午,bit5为0表示AM上午。第八行控制寄存器,bit7是写保护位WP,当WP为1时,写保护位可防止对任一寄存器的写操作,在任何的对时钟和RAM的写操作之前,WP位必须为0 。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存

14、器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。3.5 LCD显示电路 工业字符型液晶,1602是指显示的内容为16*2,即能够同时显示两行,每行16个字符。常见的1602字符液晶有两种,一种显示的是绿色背光黑色字体,另一种显示蓝色背光白色字体,目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的。本课题所用1602液晶模块,显示屏是蓝色背光白色字体10。1602字符液晶引脚如图8所示。图8 1602字符液晶1602引脚介绍l 第1脚:GND为地电源。l 第2脚:VCC接5V正电源。l 第3脚:VO为液晶显示器对比度调整端,接

15、正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生重影,使用一个1K的电位器调整对比度。l 第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。l 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。l 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。l 第714脚:DB0DB7为8位双向数据线。l 第1516脚:背光灯电源。(3)1602字符液晶字库1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形11。如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一

16、个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 。如表3点阵字符图形。表3点阵字符图形 高位低位0000001000110100010101100111101010111100110111101111XXXX00000Pp-PXXXX0001!1AQaqqXXXX0010“2BRbrXXXX0011#3CScsXXXX0100$4DTdtXXXX0101%5EUeuoXXXX0110&6FVfvXXXX01117GWgwXXXX1000(8HXhxfXXXXX1001)9IYiy-1

17、yXXXX1010*:JZjz千XXXX1011+;Kk万XXXX1100,NnXXXX1111/?O-o采集到的时钟数据通过AT89C51端口P0.0-P0.7送给LCD液晶屏D0D7的数据端口。通过向液晶屏写入命令,显示相关的数据11。显示电路如图9所示。图9 LCD显示电路3.6 按键控制电路P1.0-P1.2控制按键,其中P1.1所接为设置键,当按下此键时其它的两个按键才有效,当P1.1所接的按键按下后,按动P1.0所接的键相应的位数值将减小,按动P1.2所接的按键相应的位的数值将增大。它们通过按键扫描函数在主程序里实时扫描11。按键电路如图10所示。图10 按键电路3.7 响铃电路当

18、时间到了预设的时间,单片机的P3.7口将输出一个高电平,三极管8050导通,蜂鸣器两端将会产生电压差,这就会使蜂鸣器发出声音11。响铃电路如图11所示。图11 响铃电路3.8 程序流程图如图12所示为程序流程图。图12 定时中断程序流程图4 软件设计#include#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,key1n,temp;#define yh 0x80 #define er 0x80+0x40 sbit rs=P20;sbit rw=P21; sbit

19、 en=P22;sbit SCLK=P35;sbit IO=P36;sbit RST=P34;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit buzzer=P37;sbit key1=P11; /设置键sbit key2=P12; /加键sbit key3=P10; /减键uchar code tab1=20 - - ; uchar code tab2= : : ;void delay(uint xms)uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);write_1602com(uchar com)/液晶写入指令函数rs=0;rw=0

20、;P0=com;delay(1);en=1;delay(1);en=0;write_1602dat(uchar dat)/*液晶写入数据函数rs=1;rw=0; P0=dat;delay(1);en=1; delay(1);en=0;lcd_init()/初始化write_1602com(0x38);write_1602com(0x0c);write_1602com(0x06);write_1602com(0x01);write_1602com(yh+1);for(a=0;a14;a+)write_1602dat(tab1a);write_1602com(er+2);for(a=0;a0;a-

21、)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC1;uchar read_byte()/读一个字节RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC1;return (ACC);void write_1302(uchar add,uchar dat)/向1302芯片写函数,指定写入地址,数据RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add)/从1302读数据函数,指定读取数据来源地址uchar temp;R

22、ST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);uchar BCD_Decimal(uchar bcd)/BCD码转十进制函数,输入BCD,返回十进制 uchar Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&=0x0F);void ds1302_init() /1302芯片初始化子函数RST=0;SCLK=0;void write_sfm(uchar add,uchar dat)uchar gw,sw;gw=dat%10;sw

23、=dat/10;write_1602com(er+add);write_1602dat(0x30+sw);write_1602dat(0x30+gw);void write_nyr(uchar add,uchar dat)/向LCD写年月日,uchar gw,sw;gw=dat%10;sw=dat/10;write_1602com(yh+add);write_1602dat(0x30+sw);write_1602dat(0x30+gw);void write_week(uchar week)/写星期函数write_1602com(yh+0x0c);switch(week)case 1:writ

24、e_1602dat(M); write_1602dat(O); write_1602dat(N); break; case 2:write_1602dat(T); write_1602dat(U); write_1602dat(E); break;case 3:write_1602dat(W); write_1602dat(E); write_1602dat(D); break;case 4:write_1602dat(T); write_1602dat(H); write_1602dat(U); break;case 5:write_1602dat(F); write_1602dat(R);

25、 write_1602dat(I); break;case 6:write_1602dat(S); write_1602dat(T); write_1602dat(A); break;case 7:write_1602dat(S); write_1602dat(U); write_1602dat(N); break;void keyscan()if(key1=0)delay(9);if(key1=0)while(!key1);key1n+;if(key1n=9)key1n=1;switch(key1n)case 1: TR0=0;/关闭定时器write_1602com(er+0x09); wr

26、ite_1602com(0x0f); temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x80|temp); write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);break;case 3: write_1602com(er+3);break;case 4: write_1602com(yh+0x0e);break;case 5: write_1602com(yh+0x0a);break;case 6: write_1602com(yh+0x07)

27、;break;case 7: write_1602com(yh+0x04);break;case 8:write_1602com(0x0c);TR0=1; temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp); write_1302(0x8e,0x80); break;if(key1n!=0)if(key2=0) delay(10);if(key2=0)while(!key2);switch(key1n)case 1:miao+;if(miao=60)miao=0;write_sfm(0x0

28、8,miao);temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,temp); write_1302(0x8e,0x80);write_1602com(er+0x09);break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x05,fen);temp=(fen)/10*16+(fen)%10; write_1302(0x8e,0x00); write_1302(0x82,temp); write_1302(0x8e,0x80);write_1602com(er+6);bre

29、ak;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);temp=(shi)/10*16+(shi)%10; write_1302(0x8e,0x00); write_1302(0x84,temp); write_1302(0x8e,0x80);write_1602com(er+3);break;case 4:week+;if(week=8)week=1; write_1602com(yh+0x0C);write_week(week); temp=(week)/10*16+(week)%10; write_1302(0x8e,0x00); write_1

30、302(0x8a,temp); write_1302(0x8e,0x80); write_1602com(yh+0x0e);break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);temp=(ri)/10*16+(ri)%10; write_1302(0x8e,0x00); write_1302(0x86,temp); write_1302(0x8e,0x80);write_1602com(yh+10);break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue);temp=(yue)/10*16+(yue)%10;

31、 write_1302(0x8e,0x00); write_1302(0x88,temp); write_1302(0x8e,0x80);write_1602com(yh+7);break;case 7:nian+; if(nian=100)nian=0;write_nyr(3,nian); temp=(nian)/10*16+(nian)%10; write_1302(0x8e,0x00); write_1302(0x8c,temp); write_1302(0x8e,0x80);write_1602com(yh+4);break;if(key3=0)delay(10);if(key3=0)

32、while(!key3);switch(key1n)case 1:miao-;if(miao=-1)miao=59;write_sfm(0x08,miao); temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,temp); write_1302(0x8e,0x80);write_1602com(er+0x09);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(5,fen);temp=(fen)/10*16+(fen)%10; write_1302(0x8e,0x00)

33、; write_1302(0x82,temp); write_1302(0x8e,0x80);write_1602com(er+6);break;case 3:shi-; if(shi=-1)shi=23;write_sfm(2,shi);temp=(shi)/10*16+(shi)%10; write_1302(0x8e,0x00); write_1302(0x84,temp); write_1302(0x8e,0x80);write_1602com(er+3);break;case 4:week-;if(week=0)week=7; write_1602com(yh+0x0C);write

34、_week(week); temp=(week)/10*16+(week)%10; write_1302(0x8e,0x00); write_1302(0x8a,temp); write_1302(0x8e,0x80); write_1602com(yh+0x0e);break;case 5:ri-;if(ri=0)ri=31;write_nyr(9,ri);temp=(ri)/10*16+(ri)%10; write_1302(0x8e,0x00); write_1302(0x86,temp); write_1302(0x8e,0x80);write_1602com(yh+10);break

35、;case 6:yue-;if(yue=0)yue=12;write_nyr(6,yue);temp=(yue)/10*16+(yue)%10; write_1302(0x8e,0x00); write_1302(0x88,temp); write_1302(0x8e,0x80);write_1602com(yh+7);break;case 7:nian-; if(nian=-1)nian=99;write_nyr(3,nian); temp=(nian)/10*16+(nian)%10; write_1302(0x8e,0x00); write_1302(0x8c,temp); write_

36、1302(0x8e,0x80);write_1602com(yh+4);break;void init() TMOD=0x11; TH0=0; TL0=0; EA=1; ET0=1;TR0=1; void main()lcd_init(); ds1302_init();init();buzzer=0; while(1) keyscan();if(shi=8&fen=0&miao=0)buzzer=1;if(shi=8&fen=0&miao=5)buzzer=0; void timer0() interrupt 1 /取得并显示日历和时间 miao = BCD_Decimal(read_1302

37、(0x81);fen = BCD_Decimal(read_1302(0x83);shi = BCD_Decimal(read_1302(0x85);ri = BCD_Decimal(read_1302(0x87);yue = BCD_Decimal(read_1302(0x89);nian=BCD_Decimal(read_1302(0x8d);week=BCD_Decimal(read_1302(0x8b); write_sfm(8,miao);/秒,从第二行第8个字后开始显示(调用时分秒显示子函数)write_sfm(5,fen);/分,从第二行第5个字符后开始显示write_sfm(2,shi);/小时,从第二行第2个字符后开始显示write_nyr(9,ri);

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922