《自动打铃器设计_2.docx》由会员分享,可在线阅读,更多相关《自动打铃器设计_2.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、自动打铃器设计单片机原理及应用课程设计论文届专业班级题目自动打铃器姓名学号指导老师二一二年六月二日一、自动打铃器的基本原理自动打铃器使用一片微电脑组成一个单片机最小系统完成管理控制工作。输入信号通过键盘输入和红外遥控器两种方法输入,输入的数据储存到储存器中已被在控制经过中调用。一体机有一个显示板,显示板上有5个数码管,分别显示时间小时和分钟以及星期,显示板上面有两个状态指示灯和5个数点指示灯分别指示不同的工作状态。一体机上的时钟信号来自专用的时钟IC,时钟IC具有万年历功能,在这里仅仅取用其中的部分数据。时钟模块在沟通停电状态下由备用电池供电,保证正常的时钟走时。二、设计方案.设计思路利用单片
2、机及定时器设计的一个时钟,在每次秒加1的计时经过中,都与规定的时间作比拟,假如相等就进行开关电铃,不等则返回。2.总体设计框图微电脑广播打铃一体机原理框图打铃广播一体机使用一片微电脑组成一个单片机最小系统完成管理控制工作。输入信号通过键盘输入和红外遥控器两种方法输入,输入的数据储存到储存器中已被在控制经过中调用。一体机有一个显示板,显示板上有5个数码管,分别显示时间小时和分钟以及星期,显示板上面有两个状态指示灯和5个数点指示灯分别指示不同的工作状态。一体机上的时钟信号来自专用的时钟IC,时钟IC具有万年历功能,在这里仅仅取用其中的部分数据。时钟模块在沟通停电状态下由备用电池供电,保证正常的时钟
3、走时。三、硬件设计1、时钟与数据储存器时钟与储存器电路如图3所示:储存器和专用时钟IC均使用IIC通讯方式与单片机通讯,两个IIC器件的地址不同,单片机根据不同的地址分别对不同的器件进行数据传送,储存器AT24C16用来储存键盘或者红外遥控器输入的数据,正常工作时,单片机从储存器中取出数据进行定时比拟。时钟模块DS1307除在校正时间时需要写入数据外,其它时间都工作在读出数据的状态下。DS1307的OUT脚设置成输出1HZ的时钟输出,该输出直接驱动秒点闪烁,同时被单片机的一个输入口检测,当出现输出变化时刷新一次显示屏。2、电源供电电路:AC220V的沟通电源通过35W的电源变压器变压后,经过整
4、流、滤波、稳压后为个部分电路提供电压值不等的电源。电源变压器次级是一个双绕组输出,中心抽头为公共端,两个绕组通过桥式整流电路整流后,通过两组对称的滤波电路滤波后,得到正负18V电源为音频功放模块供电,功放模块是本机在功放输出期间的主要耗电器件,12V继电器和内部监听功放的供电通过12V三端稳压器IC7从VDD电源来获得12V电源为继电器供电,IC8再次稳压获取5V电压为单片机供电,IC9再次稳压获得3V电压为语音电路供电。3、键盘、显示与红外接收电路:键盘电路有7个I/O口组成,鉴于I/O口的连接参照电路图3.通过键盘插座与面板电路连接,键盘电路如图5所示。3个继电器受单片机控制,其输出触点根
5、据定时自动控制和人工手动控制来完成开关,用来接通电铃、广播系统和电器的供电电源。、通过“电铃控制器控制电铃发出不同持续时间、不同间隔时间、不同打铃次数的电铃铃声,实现打铃内容可区分的电铃打铃;、通过“广播控制器对现有的普通广播系统供电,并控制音乐信号通过电子开关输出到外部的广播系统中发出音乐铃音。广播控制器除控制音乐打铃的任务外,可以按外部信号源提供的信号进行广播;、通过“电器控制器完成对某些电器的电源管理控制,例如:学校的路灯,校园报刊栏等等。音乐铃声能够通过机内“20W高保真功放发出音乐铃的声音,可以以通过广播管理通过广播系统发送铃声,此处以通过20W功放来完成打铃、广播和扩音来叙述机内功
6、放的工作经过。本机中的功放既能够输出打铃信号,可以以用于会议扩音和广播,功放模块使用一块带有静音管理的双声道电路,其型号是TDA2616。在非工作期间,功放模块的静音管理开启四、软件设计首先对单片机及外围电路进行初始化处理,并从时钟模块中读出数据,显示当时的时间。本电路有两种输入方式,一种是键盘输入,另一种是红外遥控器输入,键盘数据收集采用键盘扫描方式进行,红外遥控器输入采用外部中断0中断读出,采用外部中断的目的是能够及时读取红外遥控器信号。在设置输入中,当微电脑查询到有键盘数据或者读取到红外遥控器输入数据后,微电脑通过对数据进行鉴别、判定、处理后,根据数据的分类储存到储存器的相应地址中,以备
7、后面的程序从储存器中读出相关的数据使用。对开启定时功能的定时路,微电脑将当前时间与设置储存到储存器中的时间进行比拟,当两个时间知足相等的条件后,再从数据中提取对应的开关机数据等根据设置的数据作出相应的管理操作。打铃广播一体机软件框图程序清单1.初始化程序:READEQU0;读93C46WRITEEQU2;写入93C46EWENEQU4;93C46写入使能EWDSEQU6;93C46写入禁止ADR46EQU21H;93C46地址显示启动定时器进入工作状态时分值送显示缓存区K1有按键吗?清分单元显示分值加1置校分标志K3有按键吗?K1有按键吗?是60分吗?THIGHEQU0F8HTLOWEQU5F
8、HTIMENEQU30;打铃持续时间30秒CSBITP3.7;93C46CSCLKBITP3.6;93C46CLKDIBITP3.5;93C46DIDOBITP3.4;93C46DOORG0000H;主程序起始地址AJMPSTART;跳至主程序ORG000BH;TIMER0中断起始地址AJMPTIM0;跳至TIMER0中断子程序START:MOVSP,#60H;设置堆栈在60HMOV28H,#00;显示寄存器初值为00MOVR6,#12H;时寄存器值为12HMOVR5,#00H;“分寄存器值为00HMOVR4,#00H;“秒寄存器值为00HMOVTMOD,#01H;设TIMER0为MODE1M
9、OVTH0,#THIGH;计时中断为4000微秒MOVTL0,#TLOWMOVIE,#82;TIMER中断使能MOVR2,#250;中断250次SETBTR0;启动TIMER02.读写93C46程序:TO9346:SETBCS;CS=1SETBDI;DI=1SETBCLK;CLK=1ACALLDELAYCLRCLK;CLK=0ACALLDELAYMOVDPTR,#JPTBL46JMPA+DPTR;JPTBL46:AJMPSREAD;读AJMPSWRITE;写AJMPSEWEN;写使能AJMPSEWDS;写禁止SREAD:MOVA,ADR46;地址载入AADDA,#80H;10XXXX读指令AC
10、ALLSDT46;读入地址ACALLRDT46;读定时器时钟数据MOVR5,A;存入R5ACALLRDT46;读定时器分钟数据MOVR4,A;存入R4INCADR46;地址加1MOVA,ADR46;地址载入AADDA,#80H;10XXXX读指令ACALLSDT46;读入地址ACALLRDT46;读定时器状态数据ACALLRDT46DECADR46MOVR3,A;存入R3AJMPEX9346SWRITE:MOVA,ADR46;写入地址载入AADDA,#40H;01XXXX写指令ACALLSDT46;载入地址MOVA,R5;载入定时器时钟数据ACALLSDT46;写入定时器时钟数据MOVA,R4
11、;载入定时器分钟数据ACALLSDT46;写入定时器分钟数据INCADR46;地址加1MOVA,ADR46;写入地址载入AADDA,#40H;01XXXX写指令ACALLSDT46;载入地址MOVA,R3;载入定时器状态数据DECADR46;地址减1ACALLADR46;写入定时器状态数据AJMPEX9346;转至EX9346SEWEN:MOVA,#30H;0011XXXX写使能指令ACALLSDT46AJMPEX9346SEWDS:CLRA;0000XXXX写禁止指令ACALLSDT46EX9346:CLRCS;CS=0RETSDT46:MOVR2,#8;写入8位数据SD1:RLCAMOVD
12、I,CSETBCLKACALLDELAYCLRCLKACALLDELAYDJNZR2,SD1RETRDT46:MOVR2,#8;读出8位数据RD1:SETBCLKACALLDELAYCLRCLKACALLDELAYMOVC,DORLCADJNZR2,RD1RETDELAY:MOVR7,#0FH;DJNZR7,$RET3.中断程序:TIM0:MOVTH0,#THIGH;重设计时4000微秒MOVTL0,#TLOWPUSHACC;将A的值存入堆栈PUSHPSW;将PSW的值存入堆栈CLRRS0;设置工作寄存器为0区DJNZR2,X2;计时1秒MOVR2,#250ACALLCLOCK;调用计时子程序
13、CLOCKACALLDISP;调用显示子程序X2:ACALLSCAN;调用扫描子程序POPPSWPOPACCRETI显示器驱动程序:SCAN:MOVR0,#28H;28H为扫描指针INCR0;扫描指针加1CJNER0,#6,X3;扫描完6个显示器?不是跳至X3MOVR0,#00;是则扫描指针为0X3:MOVA,R0;扫描指针载入AADDA,#20;A加常数20H显示寄存器地址=各时间显示区地址;存入R1=各时间显示地址MOVR1,A;扫描指针存入AMOVA,R0;将A高低4位交换P1高4位为扫描值,SWAPA;低4位为显示数据值ORLA,R1;扫描值+显示值MOVR1,A;输出至P1RET计时
14、程序:CLOCK:MOVA,R4;R4为秒寄存器ADDA,#01;加1DAA;做十进制调整MOVR4,A;存入秒寄存器CJNEA,#TIMEN,X4;能否超过打零连续时间?不是则跳至X4CLRP2.0;关铃X4:CJNEA,#60H,X5;能否超过60秒?不是则跳至X5MOVR4,#00;是则去除为0MOVA,R5;R5为分寄存器ADDA,#01;加1DAA;做十进制调整MOVR5,A;存入分寄存器CJNEA,#60H,X5;能否超过60分?不是则跳至X5MOVR5,#00;是则去除为0MOVA,R6;R6为时寄存器ADDA,#01;加1DAA;做十进制调整MOVR6,A;存入时寄存器CJNE
15、A,#60H,X5;能否超过24时?不是则跳至X5MOVR6,#00;是则去除为0X5:RET5.显示程序:DISP:MOVR1,#20;20H为显示寄存器,R1=20HMOVA,R6;将时寄存器的内容存入AMOVB,#01H;设B累加器的值为10HDIVAB;A/B,商十位数存入A,余数个位数存入BMOVR1,B;将B的内容存入20HINCR1;R1=21HMOVR1,A;将A的内容存入21HINCR1;R1=22HMOVA,R5;将分寄存器的内容存入AMOVB,#01H;设B累加器的值为10HDIVAB;A/B,商十位数存入A,余数个位数存入BMOVR1,B;将B的内容存入22HINCR1;R1=23HMOVR1,A;将A的内容存入23HINCR1;R1=24HMOVA,R4;将秒寄存器的内容存入AMOVB,#01H;设B累加器的值为10HDIVAB;A/B,商十位数存入A,余数个位数存入BMOVR1,B;将B的内容存入24HINCR1;R1=25HMOVR1,A;将A的内容存入25HRETEND