单片机控制的电铃控制器.docx
《单片机控制的电铃控制器.docx》由会员分享,可在线阅读,更多相关《单片机控制的电铃控制器.docx(26页珍藏版)》请在冰点文库上搜索。
![单片机控制的电铃控制器.docx](https://file1.bingdoc.com/fileroot1/2023-5/15/315b1562-311b-4aef-84d6-e9cc8ab868f9/315b1562-311b-4aef-84d6-e9cc8ab868f91.gif)
单片机控制的电铃控制器
单片机原理与应用技术
课程设计报告(论文)
基于单片机控制的电铃控制器
专业班级:
电气123
姓 名:
王鹏园
时间:
2012.11.24--2012.12.08
指导教师:
孔晓红
2014年12月07日
单片机控制电铃控制器的课程设计任务书
1.设计目的与要求
设计出一个用于控制灯的控制器。
准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能:
(1)显示:
可以显示星期、时、分和秒。
(2)打铃:
每天可设置20次,打铃持续时间每次1-9秒可调,每次打铃的时间1-99分钟可调。
(3)铃声:
内置蜂鸣器可以发出监控声音。
2.设计内容
(1)画出电路原理图,正确使用逻辑关系;
(2)确定元器件及元件参数;
(3)进行电路模拟仿真;
(4)SCH文件生成与打印输出;
3.编写设计报告
写出设计的全过程,附上有关资料和图纸,有心得体会。
4.答辩
在规定时间内,完成叙述并回答问题。
基于单片机控制的电铃控制器
电气123王鹏园
摘要:
本次电路设计中采用的89S51单片机,主要功能的实现是通过采用89c51芯片来完成的。
同时为了使所设计的电路能够更好的使用,能够拥有更加良好的性能,该电路中还设计了,键盘控制电路以及指示电路等,为使用者带来更多便利。
关键词:
74LS16489S51单片机七位数码管显示独立键盘控制数码管
1引言
随着社会的发展,科学技术水平的日益提高,多种多样性能良好的电子产品逐渐取代了很多旧式的手动器件,比如说这件基于单片机设计的电铃控制器,不仅能够非常准确的预定的时刻响铃,而且还能够设定多个定时点,更方便的是,它还能够直观的显示星期、时、分、秒等信息,为人们的使用带来了很多方便。
2总体设计方案
2.1设计思路
设计任务要求所设计的电路不仅仅能够实现打铃的功能,同时还要求能够显示时、分、秒以及星期等时间信息,同时还能够多次定时,这就要求电路的设计必须具有显示电路,时钟电路,等电路,那么主要设计方案的确立就从这几个方面入手。
为了降低该电路设计过程中编程的难度,时钟电路的设计利用89c51的定时器中断实现,显示电路采用了七位数码管与单片机串口连接,并利用移位寄存器74LS164作为驱动电路。
同时,为了能够很方便的对信息进行调整,电路中还设计了键盘控制电路以及能够清楚显示调整过程的指示电路。
2.2设计方框图
图1设计方框图
2.3软件系统流程图
2.3.1模块介绍
该电铃系统的软件设计分为以下几个模块:
2.3.2主程序模块
主程序主要完成初始化、设置定时器模式、设置定时器初值、检查有无按键按下等。
2.3.3键盘扫描及识别子程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。
2.3.4调电存储服务程序
当比较程序开始的时候,将AT24C02中存储的打铃点数据读到单片机RAM中,然后由程序控制与当前的时间相比较,当两者相同时调用打铃程序。
当修改打铃点的时候,输入完成后调用AT24C02的存储程序,将新的打铃点保存起来。
图2程序流程图
3设计原理分析
3.1电源电路的设计
220V交流电经变压器降压,次级电压U2为12V,这里对变压器效率并无特别要求。
单相桥式整流电路其构成原则就是保证在变压器副边电压U2的整个周期内,负载上的电压和电流方向始终不变。
设变压器副边电压为U2为有效值,当U2为上正周时二极管D1、D3导通,D2与D4经受反向电压,输出为上正下负。
当U2为负半周时D2与D4导通,D1与D3经受为U2,输出同样为上正下负,这样D1、D3与D2、D4交替导通,使通过稳压管W7805的电压始终为上正下负,电流方向也不变。
桥式整流输出平均电压为Uo=0.9U2。
7805为集成三端稳压器,输出+5V的直流电压,输出交流噪声小,温度温定性好。
电路图入图2所示:
3.2数码管显示电路的设计
显示电路是为了让使用者能够很清楚的了解到所需要的信息。
它可以采用液晶或者数码管作为显示器件,液晶显示可以使显示的内容更清晰和丰富,但基于成本较高,该电路中选用数码管作为显示器件。
该数码管显示电路主要由八段数码管组成,其电路是共阳的,当输出一定的编码数据时显示相应的数字。
同时又考虑到节约单片机的资源,本系统的显示部分采用串行方式,利用单片机本身固有的全双工串行输入输出接口,这种方式既可以有效利用端口资源,又使程序本身得到简化,其电路图如图3所示:
串并转换电路主要由七块移位寄存器74ALS164组成。
当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。
串行数据输入端(A,B)可控制数据。
当一组数据依次输入时,寄存器中的数据在每个时钟脉冲的作用下依次向下一个寄存器传递。
最终在输出端(QA-QH)得到八位并行输出的数据。
由于寄存器是级联的,所以在时钟脉冲的作用下依次为每个数码管提供七位的数据,同时74LS164还兼做数码管的驱动电路。
供电电路是由四个二极管组成,其目的是降低电源的电压为数码管提供合适的工作电压,增加数码管的使用寿命,同时又省去了为每个数码管要加八个电阻的麻烦。
下面是对74LS164的介绍。
74LS164为TTL单向8位移位寄存器,串行输入,并行输出。
其中A,B(第1,2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,共一个输入信号时可并接。
CP(第8脚)为时钟输入端,可连接到串行口的TXD端,且具有清除端。
其中,Q0—Q7并行输出图3.674LS164的引脚端。
A,B串行输入端,MR(9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。
引脚说明:
(1)MR(9脚):
高电平有效,低电平时使所有输出(Q0~Q7)为低电平
(2)CP(8脚):
上升延输出移位,其余状态保持
(3)A(1脚):
B(2脚)输入:
逻辑与关系,即全高为高,见低为低
(4)74LS164功能及电气特性:
串行输入带锁存。
时钟输入,串行输入带缓冲。
异步清除。
表1是74HC164的功能表:
表174HC164的功能表
输入
输出
CLR
CLK
A
B
QA
QB
……
QH
L
X
X
X
L
L
……
L
H
L
X
X
QA0
QB0
……
QH0
H
↑
H
H
H
QAn
……
QGn
H
↑
L
X
L
QAn
……
QGn
H
↑
X
L
L
QAn
……
QGn
3.3键盘控制电路
采用的是独立式按键,即直接用I/O线构成的单个按键电路,并且每个按键的工作不会影响其他I/O口线的状态。
它有七个按键,每个按键都是一个常开开关。
在这七个按键中,每个按键的分工各不相同,它们分别作为确定键,菜单键,加键,减键,定铃键,以及返回键等。
当任何一个按键按下时,与之相连的输入数据线即被清零,而平时该线为高电平。
要判别是否有按键按下,用单片机的位处理命令非常方便。
按键工作原理:
按键输入均采用低电平有效,当某键被按下,与该按键连接的端口引脚即为低电平;否则该端口引脚为高电平。
独立式按键的软件采用查询式方式(免去抖处理)。
先逐位查询
每条I/O线的输入状态。
如某一个I/O线输入为低电平,则可确认该口所对应的按键已按下,然后再转向该键的功能处理程序,且与该按键相对应的指示灯也会亮以示该按键正常工作。
本电路中I/O口为89S51的P1口。
下面是键盘控制电路图:
3.4发光管指示电路
本设计中采用7只发光二极管构成指示电路,它们分别在电路进行时间、打铃的时间以及打铃的定时点进行调整时发光,使人们能够很直观的看到当前所操作的是哪一部分,为操作带来了便利,降低了使用难度。
下面是它的电路图:
3.5响铃电路
P0.2端口接晶体管基极输入端,当P0.2输出高电平时,晶体管导通,中间继电器通电使得压电蜂鸣器两端获得+5V的电压而蜂鸣,并且继电器开关K闭合使电铃打铃;当P0.2输出低电平时,三极管截止,中间继电器断开使得压电蜂鸣器无提供电压而停止发音,此时电铃也不响。
三极管8550在电路中起驱动作用,把电路中的信号放大以起到驱动蜂鸣器发声的作用。
电路如图所示:
3.6掉电存储电路
掉电存储单元的作用是在电源断开的时候,存储当前设定的信息。
AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。
电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
其电路如图8:
图中R18、R19是上拉电阻,其作用是减少AT24C02的静态功耗。
每当设定一次信息,系统就自动调用存储程序,将信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的信息,读到缓存单元中,供主程序使用。
4总结与体会
通过这次课程设计使我更加体会到理论知识与动手能力相结合的重要性,而且设计过程中使我懂得在设计程序之前,务必要对所用单片机的内部结构有一个系统的了解,知道该单片机片内有哪些资源;懂得设计的关键是要有一个清晰的思路和一个完整的软件流程图。
在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”是程序设计的必经之路。
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
在实习过程中遇到了很多的问题,通过老师的指导以及与同学们的学术和思想交流,不仅使我们的问题迎刃而解还使我们在共同进步的同时增进友谊。
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
参考文献:
[1]张毅刚彭喜源谭晓昀.MCS—51单片机应用设计[M].哈尔滨:
哈尔滨工业大学出版社,1997
[2]杨将新李华军刘东俊.单片机程序设计及应用[M].北京:
电子工业出版社,2006
[3]孟凤果曹振军.单片机应用自学通[M].北京:
中国电力出版社,2005
[4]李朝青.单片机原理及接口技术[M].北京:
北京航空航天大学出版社,1997
[5]汪道辉.单片机系统设计与实践[M].北京:
电子工业出版社,2008
附录一
附录二
附录三
ORG0000H
LJMPMAIN
ORG000BH
LJMPTOINT
ORG001BH
LJMPDLBJ
;**********主程序**********
ORG30H
MAIN:
MOVIE,#8AH;开T0,T1中断
MOVTMOD,#11H;定时器方式1
MOVTH0,#0D8H
MOVTL0,#0F0H
MOVTH1,#0D8H
MOVTL1,#0F0H;初值
MOVA,#0
MOV59H,A
MOV60H,A
MOV61H,A
MOV62H,A
MOV63H,A
MOV64H,A
MOV65H,A
MOV66H,A;清零
m_secEQU20H;毫秒单元
secEQU21H;秒单元
minEQU22H;分单元
hourEQU23H;时单元
weekEQU24H;星期单元
SETBTR0
SETBTR1
CLRP0.0
CLRA
MOVR0,A
MOVR1,A
MOVR2,A
MOVR3,A
MOVR5,A
MOVR6,A
MOVR7,A
MOVm_sec,#00;毫秒单元清零
MOVsec,#00;秒单元清零
MOVmin,#00;分单元清零
MOVhour,#00;时单元清零
MOVweek,#00;星期单元清零
MOV70H,A
MOV71H,A
MOV72H,A
MOV73H,A
MOV74H,A
LCALLXS;调用显示程序
;**********************************
;*****************数字钟按键程序*****
;**********************************
;**********调时钟按键**********
NET1:
JBP1.0,NET2
LCALLYS10MS
JBP1.0,NET2
CLRp2.0
CLRP0.0
JNBP1.0,$
SETBP2.0
SETBP0.0
;CLRP0.1
;SETBP0.0
SETBTR0;开中断
SETBTR1
;CLRP0.0;正常运行
;SETBP0.1
;SETBP0.2
;SETBP0.3
MOV59H,#00
MOVR7,#00
;****************调整时间部分切换键**
NET2:
MOVA,59H
CJNEA,#00H,NET3
JBP1.1,NET1;数字钟调整时间部分切换键
LCALLYS10ms
JBP1.1,NET1
CLRTR0
CLRTR1
CLRP2.0
CLRP0.1
JNBP1.1,$
SETBP2.0
SETBP0.1
INC59H
INCR7
SJMPNET4
NET3:
JBP1.1,NET4
LCALLYS10ms
JBP1.1,NET4
CLRP2.0
CLRP0.1
JNBP1.1,$
SETBP2.0
SETBP0.1
INC59H
INCR7
NET4:
CJNER7,#1,NET5
LCALLSSH;秒闪烁
SJMPNET9
NET5:
CJNER7,#2,NET6
LCALLMSH;分闪烁
SJMPNET9
NET6:
CJNER7,#3,NET7
LCALLHSH;时闪烁
SJMPNET9
NET7:
MOVR7,#0
LCALLWSH;星期闪烁
SJMPNET9
NET8:
LCALLXS
NET111:
LJMPNET1
;******************调整时间加1键****
NET9:
JBP1.2,NET115;数字钟调整时间键
LCALLYS10ms
JBP1.2,NET13
CLRP2.0
CLRP0.2
JNBP1.2,$
CJNER7,#1,NET10
SETBP2.0
SETBP0.2
INCsec;秒单元加1
MOVA,sec
CJNEA,#60,NET8;不等60
时跳转显示,等60时将秒单元清零
MOVsec,#00
LCALLXS
LJMPNET9
NET115:
LJMPNET15
NET10:
CJNER7,#2,NET11
SETBP2.0
SETBP0.2
INCmin;分单元加1
MOVA,min
CJNEA,#60,NET8;不等60时跳转显示,等60时将分单元清零
MOVmin,#00
LCALLXS
LJMPNET9
NET11:
CJNER7,#3,NET12
SETBP2.0
SETBP0.2
INChour;时单元加1
MOVA,hour
CJNEA,#24,NET8;不等24时跳转显示,等24时将时单元清零
MOVhour,#00
LCALLXS
LJMPNET9
NET12:
SETBP2.0
SETBP0.2
INCweek;星期单元加1
MOVA,week
CJNEA,#08,NET8;不等7时跳转显示,等7时将星期单元清零
MOVweek,#01
LCALLXS
LJMPNET9
NET13:
SJMPNET15
NET14:
LCALLXS
;****************调整时间减1键*******
NET15:
JBP1.3,NET19;数字钟调整时间键
LCALLYS10ms
JBP1.3,NET19
CLRP2.0
CLRP0.3
JNBP1.3,$
CJNER7,#1,NET16
SETBP2.0
SETBP0.3
DECsec;秒单元减1
MOVA,sec
CJNEA,#0FFH,NET14;不等60时跳转显示,等60时将秒单元清零
MOVsec,#59
LCALLNET14
LJMPNET15
NET16:
CJNER7,#2,NET17
SETBP2.0
SETBP0.3
DECmin;分单元减1
MOVA,min
CJNEA,#0FFH,NET14;不等60时跳转显示,等60时将分单元清零
MOVmin,#59
LCALLNET14
LJMPNET15
NET17:
CJNER7,#3,NET18
SETBP2.0
SETBP0.3
DEChour;时单元减1
MOVA,hour
CJNEA,#0FFH,NET14;不等24时跳转显示,等24时将时单元清零
MOVhour,#23
LCALLNET14
LJMPNET15
NET18:
SETBP2.0
SETBP0.3
DECweek;星期单元减1
MOVA,week
CJNEA,#00,NET14;不等7时跳转显示,等7时将星期单元清1
MOVweek,#7
LCALLNET14
LJMPNET15
NET19:
LJMPDSH
;********************定时程序***
DSH:
MOVR2,#00
JBP1.4,NT1
LCALLYS10ms
JBP1.4,NT1
CLRP2.0
CLRP0.4
LCALLYS10ms
SETBP2.0
SETBP0.4
INCR2
CJNER2,#01,NT1;第1个打铃点
MOVR0,#30H
LCALLCUN
NT1:
LJMPNET111
;****************打铃点存储子程序**
CUN:
MOV@R0,hour
INCR0
MOV@R0,min
INCR0
RET
;********************时钟中断程序**
TOINT:
PUSHPSW
PUSHACC;保护现场
MOVTH0,#0D8H
MOVTL0,#0F0H;重新赋计数初值
INCm_sec;毫秒单元加1
MOVA,m_sec
CJNEA,#100,NEXT1
MOVm_sec,#00
INCsec;秒单元加1
MOVA,7FH
CJNEA,#0,XYG
INC7EH
MOVA,7EH
CJNEA,#65H,XYG
MOV7EH,#0
MOV7FH,#1
SETBP2.0
XYG:
MOVA,sec
CJNEA,#60,NEXT1
MOVsec,#00
INCmin;
MOVA,min
CJNEA,#60,NEXT1
MOVmin,#00
INChour;
MOVA,hour
CJNEA,#24,NEXT1
MOVhour,#00
INCweek
MOVA,week
CJNEA,#08,NEXT1
MOVweek,#01
NEXT1:
LCALLXS
POPACC
POPPSW;恢复现场
RETI;中断返回
;********************打铃中断程序*******
DLBJ:
PUSHPSW
PUSHACC
MOVTH1,#0D8H
MOVTL1,#0F0H
MOVR0,#30H
FH:
MOVA,@R0
CJNEA,hour,LOP3
INCR0
MOVA,@R0
CJNEA,min,LOP3
CLRP2.0
CLRP0.4;铃声响
;铃声停
CLRA
MOV7FH,A
LJMPLOP2
;LCALLXS
;POPPSW
;POPACC
;RETI
;LOP1:
INCR0
;LOP2:
INCR0
;CJNER0,#58H,FH
LOP3:
SETBP2.0
SETBP0.4
LOP2:
LCALLXS
POPPSW
POPACC
RETI
;********************数字钟显示程序***
XS:
MOVA,sec;将秒送A
MOVB,#10
DIVAB
MOV60H,B;秒的个位
MOV61H,A;秒的十位
MOVA,min;将分送A
MOVB,#10
DIVAB
MOV62H,B;分的个位
MOV63H,A;分的十位
MOVA,hour;将时送A
MOVB,#10
DIVAB
MOV64H,B;时的个位
MOV65H,A;时的十位
MOVA,week;星期的送A
MOVB,#10
DIVAB
MOV66H,B;星期的个位
LCP:
MOVR1,#60H
MOVR5,#7
MOVDPTR,#TAB
BK:
MOVA,@R1
MOVCA,@A+DPTR
MOVSBUF,A
JNBTI,$
CLRTI
INCR1
DJNZR5,BK
RET
TAB:
DB11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H
;*******************延时10ms子程序**
YS10ms:
MOVR2,#10H
TS1:
MOVR3,#0FFH
TS2: