电子打铃器毕业论文.doc

上传人:laozhun 文档编号:3989150 上传时间:2023-03-30 格式:DOC 页数:27 大小:1.33MB
返回 下载 相关 举报
电子打铃器毕业论文.doc_第1页
第1页 / 共27页
电子打铃器毕业论文.doc_第2页
第2页 / 共27页
电子打铃器毕业论文.doc_第3页
第3页 / 共27页
电子打铃器毕业论文.doc_第4页
第4页 / 共27页
电子打铃器毕业论文.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《电子打铃器毕业论文.doc》由会员分享,可在线阅读,更多相关《电子打铃器毕业论文.doc(27页珍藏版)》请在三一办公上搜索。

1、郑州交通职业学院毕 业 论 文(设 计)论文(设计)题目:基于单片机的电铃系统的设计与实现 所属系别 专业班级 姓名 学号 指导教师 撰写日期 2012 年 5 月摘 要 本文介绍了以AT89C51单片机为控制核心的自动打铃器产品,AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。该电路具有时钟功能,可通过产品上的设置键对要报警的时间点逐个的设置进去,打铃器只要走到设置好的时间就能报警。利用单片机及定时器设计的时钟,在每次加1的过程中,都与规定的时间作比较,如果相等就进行开关电铃,不等则返回,24小时累加为一天,如果天数大于5天时,电铃

2、也不打铃。要求按学生上下课响铃次序,周六周日不打铃,输出效果由报警模块与显示模块组成,显示模块主要采用数码管来显示时间,让人们可以看到自动打铃器的时间是否与我们生活的时间一致,如果有误差则可以通过按键对时间进行调整。该打铃器是一种电路比较简单,功能完善,而且比较实用的自动打铃器。它不但适用于学校及企业工厂等场所。 关键词:AT89C51,定时器,数码管显示 Take to This paper introduces the AT89C51 MCU as the control core of the automatic bell products, AT89C51 is a 4K flash

3、programmable and erasable read only memory of the low voltage, high performance CMOS 8 bit microprocessor, commonly known as the single chip microcomputer. The circuit has a clock function, through the product set key to alarm time point by setting in, ring a bell just walk to set up good time can a

4、larm. Using single chip computer and a timer design of the clock, in each plus 1 of the process, and the time for comparison, if equal to switch from bell, returns, 24 hours accumulated for a day, if the number of days more than 5 days, the bell is ringing. Required students to the school bell order

5、, Saturday Sunday bell, the output effect by the alarm module and a display module, display module is mainly used to display digital time, so that people can see automatic bell device whether the time and the time of our lives, if there is an error, the keys can adjust the time. The ringer circuit i

6、s a relatively simple, perfect function, and to compare the utility of automatic bell device. It does not only apply to the schools and enterprises factories etc.Key words: SCM, timer, digital display目 录1 设计目的52 设计要求53 总体设计方案53.1 设计思路53.2 关键芯片介绍53.3 总体电路方框流程图63.4 总程序流程图7 3.5 效时程序流程图83.6 效分及显示流程图94 个

7、部分电路设计104.1 效时与定时电路114.2 振荡电路125 整体电路图126 设计程序清单137 设计总结228 参考文献24 致谢25 引 言1 设计目的 根据设计要求做出一个电子打铃器,熟悉单片机的程序,在其过程中培养学生的动手能力。2 设计要求 要求按学生上下课铃响铃次序设计电子打铃器,周六周日不打铃。1 总体设计方案1.1 设计思路 利用单片机及定时器设计的一个时钟,在每次加1的过程中,都与规定的时间作比较,如果相等就进行开关电铃,不等则返回,24小时累加为一天,如果天数大于5天时,电铃也不打铃。1.2 关键芯片介绍 AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FP

8、EROM-Flash Programmable and Erasable read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机可擦除只读存储器可以反复查除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是他的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示

9、: 图1.21 AT89C51封装及管脚排列1.3 总体电路设计方框图 图1.32 总体电路系统框图1.4 总程序流程图 图1.43 总程序流程图 总程序流程图的定时器首先设定一个时间,执行程序时及进入记时程序。通过加以比较程序与设定的计时程序进行比较,如果不到计时时间执行中断返回指令。在此时如果效时键启动时可进行校时作用。而LED显示器也通过8051控制程序实时传来的数据进行显示工作。LED也是动态的显示方式。1.5 校时程序流程图 图1.54 校时程序流程图 首先进入校时显示模式,此时K1如果有按下,校时程序即可执行。此时如果K2手工操作下被按下则计时加一,达到与想要的结果一致即可停止K2

10、的操作,如果计时结束在现在时间之前则可一直按下直到到达24小时一个循环时候,然后再次按下达到想要的计时结果。而24小时也是校时循环终点。此时指示灯也有所变化。可以作为执行程序效果的参考。而校分流程图也对整体软件流程图产生影响,最终达到时间的精确。小时和分钟的实时显示是定时的基础。1.6 校分及显示流程图图1.65 校分及显示流程图首先进入进如入校时模式时看K1是否按下,如果按下则看K3是否按下,如果有则分钟加一,此便起到修改分钟的作用,如果分钟修改到达60分钟则分钟全部清零,分钟计时重新开始。如果K1键没按下,则小时和分钟数据进入显示缓存器,然后进入显示器显示,此时看K1键是否还在断开状态,如

11、果没有按下则时间还是显示而不做变化,如果K1键按下则此时进入定时器工作状态,因此K1键是程序运行的关键所在,在K1键进入工作状态的同时修改小时和分钟及定时器的工作程序才能进行。2 各部分电路设计2.1 校时与定时电路图图4.11 校时与定时电路图 按下K1(模式选择键),将模式选择为校时模式(模式指示灯黄灯亮),K2,K3,K4分别为时钟加一键,分钟加一键,秒钟加一键,K5无用。按下K1(模式选择键),将模式选择为定时模式(模式指示灯绿灯亮),K2为定时器组选择(本装置有24组定时器)键,K3,K4分别为定时器时钟加一键和定时器分钟加一键,K5为定时器状态选择键,每按K5一次,此组的定时器状态

12、改变一次,并将此组数据存入片内数据存储器中按下K1(模式选择键),将模式选择为工作模式(模式指示灯红灯亮),K2,K3,K4,K5无用。此模式为正常工作模式。2.2 振荡电路图4.22 振荡电路(为单片机提供时钟信号)3 整体电路图图31 整体电路图6 程序清单 READ EQU 0 WRITE EQU 2 EWEN EQU 4 EWDS EQU 6 ADR46 EQU 21H THIGH EQU 0F8H TLOW EQU 5FH TIMEN EQU 30 CS BIT P3.7 ;93C46 CS CLK BIT P3.6 DI BIT P3.5 DO BIT P3.4 ORG 0000H

13、 AJMP START ORG 000BH ;TIMER0中断起始地址 AJMP TIM0 ;跳至TIMER0中断子程序START:MOV SP,#60H ;设置堆栈在60H MOV 28H,#00 ;显示寄存器初值为00 MOV R6,#12H ;?时?寄存器值为12H MOV R5,#00H ;分寄存器值为00H MOV R4,#00H ;秒寄存器值为00H MOV TMOD,#01H ;设TIMER0为MODE1 MOV TH0,#THIGH ;计时中断为4000微秒 MOV TL0,#TLOW MOV IE,#82 ;TIMER中断使能 MOV R2,#250 ;中断250次 SETB

14、 TR0 ;启动TIMER0;键值处理程序:LOOP: SETB P0.5 ;工作模式 CLR P0.6 CLR P0.7 JB P0.0,N1 ;K1(模式选择键)按了?不是则跳至N1 ACALL DELAY ;消除抖动 JNB P0.0,$ ;K1(模式选择键)放开了? ACALL DELAY ;消除抖动 AJMP SET ;转到定时模式SETN1: MOV 2FH,R6 ;将时钟数据载入2FH中 MOV 2EH,R5 ;将分钟数据载入2EH中 MOV ADR46,#00 ;把93C46地址置0 SETB RS0 ;将工作寄存器组选择1区LOOP1:MOV A,#READ ;读93C46

15、ACALL TO93c46 MOV A,R3 ;取出定时器的状态 ANL A,#01H CJNE A,#01H,N2 ;定时器为关闭,则跳转至N2 MOV A,R4 ;取出定时器分钟数据 CJNE A,2FH,N2 ;定时器分钟数据与时钟分钟不同则转至N2 MOV A,R5 ;取出定时器时钟数据 CJNE A,2EH,N2 ;定时器时钟数据与时钟时钟不同则转至N2 SETB P2.1 ;定时器时间到,打铃 MOV A,ADR46 ;将93C46地址载入A中N2: CJNE A,#1EH,N3 ;到定时器数据表表尾?没到转至N3 MOV ADR46,#00 ;到表尾,置93C46地址为表头 AJ

16、MP LOOP1 ;转至LOOP1N3: INC ADR46 ;93C46地址加2 INC ADR46 AJMP LOOP1 ;转至LOOP1SET: CLR P0.5 ;校时模式 SETB p0.6 CLR P0.7LOOPS:JB P0.0,N11 ;K1(模式选择键)按了?不是则跳至N11 ACALL DELAY ;消除抖动 JNB P0.0,$ ;K1(模式选择键)放开了? ACALL DELAY ;消除抖动 AJMP SETTIME ;转至SETTIMEN11: JB P0.1,N13 ;K2(时钟加1键)按了?不是则跳至N13 ACALL DELAY ;消除抖动 MOV A,R6

17、;将时寄存器的值载入A ADD A,#01H ;A内容加1 DA A ;做十进制调整 MOV R6,A ;将A的值存入时寄存器 CJNE A,#24H,N12 ;是否超过24时?不是则跳至N12 MOV R6,#00H ;是则清除时寄存器的值为00N12: JNB P0.1,$ ;K2(时钟加1键)放开了? ACALL DELAY ;消除抖动N13: JB P0.2,N15 ;K3(分钟加1键)按了?不是则跳至N15 ACALL DELAY ;消除抖动 MOV A,R5 ;将分寄存器的值载入A ADD A,#01 ;A内容加1 DA A ;做十进制调整 MOV R5,A ;将A的值存入分寄存器

18、 CJNE A,#60H,N14 ;是否超过60分?不是则跳至N14 MOV R5,#00H ;是则清除分寄存器的值为00N14: JNB P0.2,$ ;K3(分钟加1键)放开了? ACALL DELAY ;消除抖动N15: JB P0.3,N17 ;K4(秒钟加1键)按了?不是则跳至N17 ACALL DELAY ;消除抖动 MOV A,R4 ;将秒寄存器的值载入A ADD A,#01 ;A内容加1 DA A ;做十进制调整 MOV R4,A ;将A的值存入秒寄存器 CJNE A,#60H,N16 ;是否超过60秒?不是则跳至N16 MOV R4,#00 ;是则清除分寄存器的值为00N16

19、: JNB P0.3,$ ;K4(秒钟加1键)放开了? ACALL DELAY ;消除抖动N17: AJMP LOOPS ;转至LOOPSSETTIME:CLR P0.5 ;定时模式 CLR P0.6 SETB P0.7 MOV ADR46,#00H MOV A,#READ ;读93C46地址为ADR46中的数据 ACALL To93c46LOOPB:ACALL DISP ;调用DISP JB P0.0,N21 ;K1(模式选择键)按了?不是则跳至N21 ACALL DELAY ;消除抖动 JNB P0.0,$ ;K1(模式选择键)放开了? ACALL DELAY ;消除抖动 AJMP LOO

20、P ;转至LOOPN21: JB P0.1,N22 ;K2(定时器组加1键)按了?不是则跳至N22 ACALL DELAY ;消除抖动 MOV A,ADR46 ;将地址载入A CLR C ;清除进位位 RRC A ;A右移1位 ADD A,#01H ;地址加1 MOV R6,A ;将A存入R6 CLR C ;清除进位位 RLC A ;A左移1位 MOV ADR46,A ;将A中地址存入ADR46 MOV A,#READ ;读93C46地址为ADR46中的数据 ACALL TO93c46 JNB P0.1,$ ;K2(定时器组加1键)放开了? ACALL DELAY ;消除抖动N22:JB P0

21、.2,N24 ;K3(定时器分钟加1键)按了?不是则跳至N24 ACALL DELAY ;消除抖动 MOV A,R4 ;将定时器分寄存器的值载入A ADD A,#01 ;A内容加1 DA A ;做十进制调整 MOV R4,A ;将A的值存入定时器分寄存器 CJNE A,#60H,N23 ;是否超过60分?不是则跳至N16 MOV R4,#00H ;是则清除分寄存器的值为00N23:JNB P0.2,$ ;K3(定时器分钟加1键)放开了? ACALL DELAY ;消除抖动N24:JB P0.3,N26 ;K4(定时器时钟加1键)按了?不是则跳至N26 ACALL DELAY ;消除抖动 MOV

22、 A,R5 ;将定时器时寄存器的值载入A ADD A,#01H ;A内容加1 DA A ;做十进制调整 MOV R5,A ;将A的值存入定时器时寄存器 CJNE A,#24H,N25 ;是否超过24时?不是则跳至N25 MOV R5,#00 ;是则清除分寄存器的值为00N25:JNB P0.3,$ ;K4(定时器时钟加1键)放开了? ACALL DELAY ;消除抖动N26:JB P0.4,N27 ;K5(改变定时器状态存储键)按了?不是则跳至N27 ACALL DELAY ;消除抖动 INC R3 ;改变R3最低位的值 ) MOV A,#WRITE ;将A的值写入93C46地址为ADR46中

23、 ACALL TO93c46 JNB P0.4,$ ;K5(改变定时器状态存储键)放开了? ACALL DELAY ;消除抖动N27:AJMP LOOPB ;转至LOOPB;读写93C46程序:TO93c46:SETB CS ;CS=1 SETB DI ;DI=1 SETB CLK ;CLK=1 ACALL DELAY CLR CLK ;CLK=0 ACALL DELAY MOV DPTR,#JPTBL46 JMP A+DPTR;JPTBL46:AJMP SREAD ;读 AJMP SWRITE ;写 AJMP SEWEN ;写使能 AJMP SEWDS ;写禁止SREAD:MOV A,ADR

24、46 ;地址载入A ADD A,#80H ;10XXXX读指令 ACALL SDT46 ;读入地址 ACALL RDT46 ;读定时器时钟数据 MOV R5,A ;存入R5 ACALL RDT46 ;读定时器分钟数据 MOV R4,A ;存入R4 INC ADR46 ;地址加1 MOV A,ADR46 ;地址载入A ADD A,#80H ;10XXXX读指令 ACALL SDT46 ;读入地址 ACALL RDT46 ;读定时器状态数据 ACALL RDT46 DEC ADR46 MOV R3,A ;存入R3 AJMP EX9346SWRITE:MOV A,ADR46 ;写入地址载入A ADD

25、 A,#40H ;01XXXX写指令 ACALL SDT46 ; 载入地址 MOV A,R5 ;载入定时器时钟数据 ACALL SDT46 ;写入定时器时钟数据 MOV A,R4 ;载入定时器分钟数据 ACALL SDT46 ;写入定时器分钟数据 INC ADR46 ;地址加1 MOV A,ADR46 ;写入地址载入A ADD A,#40H ;01XXXX写指令 ACALL SDT46 ;载入地址 MOV A,R3 ;载入定时器状态数据 DEC ADR46 ;地址减1 ACALL ADR46 ;写入定时器状态数据 AJMP EX9346 ;转至EX9346SEWEN:MOV A,#30H ;0

26、011XXXX写使能指令 ACALL SDT46 AJMP EX9346SEWDS:CLR A ;0000XXXX写禁止指令 ACALL SDT46EX9346:CLR CS ;CS=0 RETSDT46:MOV R2,#8 ;写入8位数据SD1: RLC A MOV DI,C SETB CLK ACALL DELAY CLR CLK ACALL DELAY DJNZ R2,SD1 RETRDT46:MOV R2,#8 ;读出8位数据RD1: SETB CLK ACALL DELAY CLR CLK ACALL DELAY MOV C,DO RLC A DJNZ R2,RD1 RETDELAY

27、:MOV R7,#0FH ; DJNZ R7,$ RETTIM0:MOV TH0,#THIGH ;重设计时4000微秒 MOV TL0,#TLOW PUSH ACC ;将A的值存入堆栈 PUSH PSW ;将PSW的值存入堆栈 CLR RS0 ;设置工作寄存器为0区 DJNZ R2,X2 ;计时1秒 MOV R2,#250 ACALL CLOCK ;调用计时子程序CLOCK ACALL DISP ;调用显示子程序X2:ACALL SCAN ;调用扫描子程序 POP PSW POP ACC RETI;显示器驱动程序:SCAN:MOV R0,#28H ;(28H)为扫描指针 INC R0 ;扫描指

28、针加1 CJNE R0,#6,X3 ;扫描完6个显示器?不是跳至X3 MOV R0,#00 ;是则扫描指针为0X3:MOV A,R0 ;扫描指针载入A ADD A,#20 ;A加常数20H(显示寄存器地址)=各时间显示区地址 ;存入R1=各时间显示地址 MOV R1,A ;扫描指针存入A MOV A,R0 ;将A高低4位交换 (P1高4位为扫描值, SWAP A ;低4位为显示数据值) ORL A,R1 ;扫描值+显示值 MOV R1,A ;输出至P1 RET;计时程序:CLOCK:MOV A,R4 ;R4为秒寄存器 ADD A,#01 ;加1 DA A ;做十进制调整 MOV R4,A ;存

29、入秒 寄存器 CJNE A,#TIMEN,X4 ;是否超过打零连续时间?不是则跳至X4 CLR P2.0 ;关铃X4:CJNE A,#60H,X5 ;是否超过60秒?不是则跳至X5 MOV R4,#00 ;是则清除为0 MOV A,R5 ;R5为分寄存器 ADD A,#01 ;加1 DA A ;做十进制调整 MOV R5,A ;存入分寄存器 CJNE A,#60H,X5 ;是否超过60分?不是则跳至X5 MOV R5,#00 ;是则清除为0MOV A,R6 ;R6为时寄存器 ADD A,#01 ;加1 DA A ;做十进制调整 MOV R6,A ;存入时寄存器 CJNE A,#60H,X5 ;

30、是否超过24时?不是则跳至X5 MOV R6,#00 ;是则清除为0X5:RET;显示程序:DISP:MOV R1,#20 ;(20H)为显示寄存器,R1=20H MOV A,R6 ;将时寄存器的内容存入A MOV B,#01H ;设B累加器的值为10H DIV AB ;A/B,商 (十位数)存入A,余数 (个位数)存入B MOV R1,B ;将B的内容存入 (20H) INC R1 ;R1=21H MOV R1,A ;将A的内容存入 (21H) INC R1 ;R1=22H MOV A,R5 ;将分寄存器的内容存入A MOV B,#01H ;设B累加器的值为10H DIV AB ;A/B,商 (十位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号