单片机课程设计项目系列电铃控制器Word文档格式.docx
《单片机课程设计项目系列电铃控制器Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计项目系列电铃控制器Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
![单片机课程设计项目系列电铃控制器Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/23/0b370ebe-3d2a-4f02-bd7a-45d6352d8e98/0b370ebe-3d2a-4f02-bd7a-45d6352d8e981.gif)
解除作息管理麻烦、改变人工打铃、人工控制电器落后现象,实行电铃周期性工作的自动化控制.同时设有数字显示器及控制系统对于设定时间具有掉电保护的功能,体积小,重量轻等优点。
非常适合学校、学校、机关及工矿企事业等场合使用。
2总体设计方案
2.1设计思路
图1设计思路框图
电铃控制器设计要求具有显示星期、时、分和秒以及设定时间和调整时间等功能,这些基本要求都可以通过软件编程实现。
要实现打铃提示,就需要设置打铃提示电路,信号输入电路采用按钮开关。
同时为了方便,在掉电的情况下,为了保护已存储的打铃点,可设置掉电保护电路,减少人重新设置打铃点的麻烦。
设计思路框图如图1所示。
2.2方案论证
方案一:
电铃控制器是以AT89S51为核心的单片机组成。
但它的辅助电路分别采用,信号输入电路采用4×
4键盘,但是这种方法软件编程比较难。
显示电路采用动态显示,这种方法设计电路简单,同样软件编程比较难。
不采用单片机内部时钟,而采用其他时钟芯片,这种方法产生的时钟比较准确,但是成本高,而且还要另外编写时钟程序。
打铃电路电路可以采用蜂鸣器代替电铃,当时间到达打铃时间点时,使单片机发出控制信号,控制信号去触发继电器工作,从而接通打铃电路使蜂鸣器发出声音,它是由三极管组成的基本放大电路来驱动。
这种方法虽然使信号和打铃电路隔离,但是电路结构复杂、成本高,而且时间过长可能继电器失灵不能工作。
方案二:
但它的辅助电路分别采用,信号输入电路采用按钮开关,可以把按钮开关设置成多功能,这样可以节省开关数目。
显示电路采用串行静态显示,这种软件编程比较简单。
采用单片机内部时钟,这种方法产生的时钟还可以,但是成本低,而且编写时钟程序简单。
打铃电路电路可以采用蜂鸣器代替电铃,当时间到达打铃时间点时,使单片机发出控制信号,可以直接驱动三极管组成的基本放大电路,使蜂鸣器发出声音。
与方案一相比不仅简单而且成本低。
因此我们选用方案二.
2.3设计方框图和流程图如图2所示
图2设计方框图和流程图
3设计原理分析
3.1打铃电路的设计
打铃电路由三极管组成的放大电路和蜂鸣器组成。
三极管选用8550PNP型,当单片机输出低电平时三极管导通,采用蜂鸣器代替电铃,从而驱动蜂鸣器发出声音,可以通过编程实现使蜂鸣器发出有节奏的声音。
当接通电源时P3.4口为高电平,三极管截止,打铃电路不能工作当按下复位开关时,输出为高电平,三极管截止,打铃电路不能工作。
当时间走到打铃时间点时,单片机输出低电平,则打铃电路开始工作。
而且响铃时间的长短可通过编程实现,在响铃的时候可以采用按钮实现暂停。
打铃电路的电路图如图3所示。
图3打铃电路
3.2显示驱动电路的设计
显示驱动电路采用串行动态显示电路,只使用单片机的两个串行口,就可以完成单片机的显示功能,。
它由7个74LS164移位记存器和7个LED数码管组成。
图4显示驱动电路
从单片机串口输出的信号先送到左边的移位寄存器(74LS164),由于移位脉冲的作用,使数据向右移,达到显示的目的。
移位寄存器74LS164还兼作数码管的驱动,显示驱动电路的电源采用5V直流电源经过三个IN4007的二极管降压,三个整流管D1——D3的作用是降低数码管的工作电压,增加其使用寿命,这种方法简单使用。
同时用三个发光二极管作为指示灯,用来指示不同的功能和操作,这样可以是各种操作和指示一目了然,而且哪一块功能出现错误,能够方便查找,指示电路将在信号输入电路中体现出来。
显示驱动电路的电路图如图4所示。
3.3掉电存储电路的设计
掉电存储单元的作用是在电源断开的时候,存储当前设定的时间和打铃时间信息。
AT24C02A是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。
掉电存储电路的电路图如图5所示。
图中R1、R2是上拉电阻,其作用是减少AT24C02A的静态功耗,由于AT24C02A的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。
图5掉电存储电路
每当设定一次打铃时间,系统就自动调用存储程序,将打铃时间信息保存在芯片内;
当系统重新上电的时候,自动调用读存储器程序,将存储器内的打铃时间等信息,读到缓存单元中,供主程序使用。
3.4信号输入电路的设计
信号输入电路采用按钮开关控制。
将单片机的P2口接开关的一端,将开关的另一端接地。
单片机复位以后,P2口变为高电平,当按下按钮开关时,对应的P2口就变为低电平,给单片机送入信号,开始对应的功能。
S1为调时和定时键,S2为转换键,S3为返回键,S4为加一键,S5为减一键,S6为确定键。
其他按键如果想设置其它功能可以使用。
通过软件编程可以使按钮开关实现多功能。
信号输入电路的电路图如图6所示。
图6信号输入电路
4结束语
这次课程设计基本达到了设计的要求,但是明显存在着问题,由于在编程方面的问题,使有的功能还没能实现。
为此,多次修改了程序,希望能够解决问题,遗憾的是问题仍然没有得到彻底解决。
这次单片机的综合实验我们学到了有用的知识,更重要的是学会了程序出问题时调试的方法,再一次熟悉了编程,学到了程序出问题后怎样去解决的基本方法。
参考文献
[1]阎石.数字电子技术基础(第三版)[M].北京:
高等教育出版社,1989
[2]蔡振江.单片机原理及应用.北京:
电子工业出版社,2007年2月,第1版
[3]童诗白,华成英.模拟电子技术基础.北京:
高等教育出版社,2001年,第3版
[4]李朝青.单片机原理及接口技术[M].北京:
北京航空大学出版社,2005年,第3版
[5]万光毅.单片机实验与实践教程.北京:
北京航空航天大学出版社,2006年,第2版
附录一
附录二
;
-------------程序初始化-------------
SBSEQU29H
SBMEQU2AH
SBHEQU2BH;
定义29H,2AH,2BH为显示缓冲区
MS100EQU2CH
SEQU2DH
MEQU2EH
HEQU2FH;
将2C-2Fh分别定义为,100毫秒,秒位,
;
分位,小时位
MSBITP2.0;
将p2.0定义为主菜单键
OKBITP2.1;
将p2.1定义为确定键
RESTBITP2.5;
将p2.5定义为返回键
ADBITP2.3;
将p2.3定义为前进键
SUBBITP2.4;
将p2.4定义为后退键
FMQBITP3.4;
将P3.4定义为蜂鸣器
HONGBITP0.1;
将p0.1定义为红色LED
LVBITP0.2;
将p0.2定义为绿LED
KGBIT08H;
08H位定义为闹铃开关
**********主程序***********
ORG0000H
SJMPMAIN
ORG0BH
AJMPZHD;
跳转到中断程序
ORG1BH
AJMPDL
ORG30H
MAIN:
SETBEA
SETBET0
SETBET1
MOVTMOD,#11H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTH1,#3CH
MOVTL1,#0B0H
CLRA
MOVR0,#20H
MOVR2,#59H
BACK1:
MOV@R0,A
INCR0
DJNZR2,BACK1
MOVR2,#23
MOVR0,#32H
MOV04H,#01
BACK2:
MOV@R0,04H
MOVA,R0
ADDA,#03
MOVR0,A
INC04H
DJNZR2,BACK2
MOVR1,A
MOVR2,A
MOVR3,A
MOVR4,A
MOVR5,A
MOV2FH,#12
mov2eh,#00
mov2dh,#00
mov30h,#01
SETBTR0
CLRLV
**********按键程序*********
START:
ACALLXSH
JBMS,NTJL
ACALLT12MS
CLRFMQ
JNBMS,$
SETBFMQ
INCR2
SETB01;
01H位是判断菜单键是否按下标志
CLR09H;
09H是响铃控制位
CLRHONG
SETBLV
CJNER2,#025,NT1;
判断M键按下次数
MOVR2,#00
NT1:
CJNER2,#00,NT1A
CLR01H
CLR04H
CLR05H
CLR06H
SETB09H
MOVR3,#00
MOVR4,#00
SETBHONG
ACALLXSH;
返回
NT1A:
CJNER2,#01,NT1B
SETB00H
MOVR4,#00;
使时间闪烁显示
SETB04H
NT1B:
CJNER2,#02,NT1C
CLR00H
MOVR4,#01
ACALLQHUAN1
使第1预存时间闪烁显示
NT1C:
CJNER2,#03,NT1D
MOVR4,#02
ACALLQHUAN1;
使第2预存时间闪烁显示
NT1D:
CJNER2,#04,NT1E
MOVR4,#03
使第3预存时间闪烁显示
NT1E:
CJNER2,#05,NT1F
MOVR4,#04
使第4预存时间闪烁显示
NT1F:
CJNER2,#06,NT1G
MOVR4,#05
使第5预存时间闪烁显示
NT1G:
CJNER2,#07,NT1H
使第6预存时间闪烁显示
NTJL:
SJMPNT2
NT1H:
CJNER2,#08,NT1I
MOVR4,#07
使第7预存时间闪烁显示
NT1I:
CJNER2,#09,NT1J
MOVR4,#08
使第8预存时间闪烁显示
NT1J:
CJNER2,#10,NT1K
MOVR4,#09
使第9预存时间闪烁显示
NT1K:
CJNER2,#11,NT1L
MOVR4,#10
使第10预存时间闪烁显示
NT1L:
CJNER2,#12,NT1M
MOVR4,#11
使第11预存时间闪烁显示
NT1M:
CJNER2,#13,NT1N
MOVR4,#12
使第12预存时间闪烁显示
NT1N:
CJNER2,#14,NT1O
MOVR4,#13
使第13预存时间闪烁显示
NT1O:
CJNER2,#15,NT1P
MOVR4,#14
使第14预存时间闪烁显示
NT1P:
CJNER2,#16,NT1Q
MOVR4,#15
使第15预存时间闪烁显示
NT1Q:
CJNER2,#17,NT1R
MOVR4,#16
使第16预存时间闪烁显示
NT1R:
CJNER2,#18,NT1S
MOVR4,#17
使第17预存时间闪烁显示
NT1S:
CJNER2,#19,NT1T
MOVR4,#18
使第18预存时间闪烁显示
NT1T:
CJNER2,#20,NT1V
MOVR4,#19
使第19预存时间闪烁显示
NT1V:
CJNER2,#21,NT1W
MOVR4,#20
使第20预存时间闪烁显示
NT1W:
CJNER2,#22,NT2
MOVR4,#21
使第21预存时间闪烁显示
NT2:
JBOK,NT3
JNBOK,$
JBHONG,NT3
JNB00H,NT2B;
00H位是判断时钟时间或定时时间标志
INCR3
CJNER3,#03,NT2AA
NT2AA:
CJNER3,#00,NT2AB
NT2AB:
CJNER3,#01,NT2AC
SETB05H
NT2AC:
CJNER3,#02,NT3
SETB06H
SJMPNT3
NT2B:
CPL04H
CPL05H
闪烁显示位改变
NT3:
JBAD,NT4
JBSUB,GONEXT
CPL09H
GONEXT:
JNB01H,NT4;
ACALLT200MS
MOVR0,18H
JB04H,A1A
04H位为1则最后两位加1
JB05H,A1F;
05H位为1则中间两位加1
JB06H,A1S;
06H位为1则最前两位加1
A1S:
INC@R0
CJNE@R0,#24,NT4
MOV@R0,#00
SJMPNT4
A1F:
JB00H,SK601
SK601:
CJNE@R0,#60,NT4
A1A:
使闪烁显示位加一
NT4:
JBSUB,NT5
JNB01H,NT5
JB04H,S2A;
04H位为1则最后两位减1
JB05H,S2F;
05H位为1则中间两位减1
JB06H,S2S;
06H位为1则最前两位减1
S2S:
DEC@R0
CJNE@R0,#0FFH,NT5
MOV@R0,#23
SJMPNT5
S2F:
JB00,SK602
SK602:
MOV@R0,#59
S2A:
NT5:
JBREST,NT6
JNBREST,$
显示时间
NT6:
JBKG,BACK3;
kg为一时响铃
CLRTR1
LJMPSTART
BACK3:
JNB09H,NO
SETBTR1
NO:
*********闪烁切换子程序*******
qhuan1:
RET
*********中断程序***********
ZHD:
PUSHACC
PUSHPSW
SETBRS1
SETBRS0
INCR5
CJNER5,#08,NEXT1
NEXT:
MOVR5,#00
CPL03H
NEXT1:
INCMS100
MOVA,MS100
CJNEA,#20,RETN3
MOVMS100,#0
INCS
MOVA,S
CJNEA,#60,RETN3
MOVS,#00
INCM
MOVA,M
MOVM,#0
INCH
MOVA,H
CJNEA,#24,RETN3
MOVH,#0
inc30h
mova,30h
cjnea,#08,retn3
**********打铃判断*********
RETN3:
CLRRS0
MOV15H,#23
MOVR1,#31H
BACKB:
MOVA,@R1
CJNEA,SBH,SKIP1;
小时相等时跳转到“分”比较程序
SJMPSKIP2
GO2:
INCR1
SKIP1:
DJNZ15H,BACKB
SJMPNO2
SKIP2:
DECR1
CJNEA,SBM,GO2
SETBKG
SJMPRETN2
NO2:
CLRKG
RETN2:
POPPSW
*******************************
RETN:
POPACC
RETI
******闹铃中断程序***********
DL:
MOVTH1,#00H
MOVTL1,#024H
INCR7
CJNER7,#08,GODL1
MOVR7,#07
INCR6
CJNER6,#07,GODL2
MOVR7,#00
MOVR6,#00
SJMPGO
GODL2:
GODL1:
CPLFMQ
GO:
*********12MS延时子程序*********
T12MS:
MOVR6,#18H
TM1A:
MOVR5,#0FFH
TM1B:
DJNZR5,TM1B
DJNZR6,TM1A
********256MS延时子程序******
T200MS:
MOVR6,#0ffH
TM2A:
TM2B:
DJNZR5,TM2B
DJNZ