基于51单片机的自动打铃机设计

  • 格式:doc
  • 大小:2.74 MB
  • 文档页数:18

单片机系统课程设计课程设计名称:自动打铃器设计专业班级:XXXX学生姓名:XXXX学号:XXXXXXXX指导教师:XXX课程设计地点:XXXX课程设计时间:XXXXXXXXXX单片机系统课程设计任务书学生姓名专业班级自动化学号题目自动打铃器设计课题性质工程设计课题来源老师拟定指导老师XXX主要内容(参数)基于89c51单片机可以实现以下功能:1、根据自己需要设计打铃时间,到定时时间自动打铃。

2、8位LED动态显示,实现表24小时制计时和显示功能。

3、能设置当前时间4、可以随时更改打铃时间任务要求(进度)1、查阅有关资料,熟悉设计任务要求,确定设计方案,大概需要1——2天。

2、按照确定的方案设计单元电路,画出单元电路图,元件及元件参数的选择有依据,大概需要1——2天的时间3、软件设计及编写程序,大概需要1——2天的时间。

4、实验室调试,需要1——2天。

5、撰写课程设计报告。

要求内容完整、图表清晰、文理流畅、格式规范、方案合理设计正确。

主要参考资料[1]张迎新.单片机原理、应用及接口技术[M].北京:国防工业出版社,2004[2]李光飞.单片机课程设计实例[M].北京:北京航天航空大学出版社,2004[3]周润景,袁伟婷,景晓松.Proteus在MCS-51系统中的应用[M].北京:电子工业出版社,2006[4] 邓兴成.单片机原理与实践指导.北京:机械工业出版社,2010[5] 阎石.数字电子技术基础.北京:高等教育出版社,2009审查意见系(教研室)主任签字:年月日目录1概述 (5)1.1研究背景 (5)1.2设计思想及基本功能 (5)2总体设计 (5)2.1模块设计 (5)2.2程序流程图 (5)3硬件单元设计 (6)3.1电路设计总原理图 (7)3.2各模块电路设计 (7)3.2.1键盘扫描模块 (7)3.2.2时钟与复位模块 (8)3.2.3显示模块 (8)3.2.4响铃模块 (9)4软件设计 (9)4.1键盘扫描程序 (9)4.2主程序 (10)4.3显示程序 (13)4.4响铃程序 (14)5 总结 (17)6参考文献 (17)7附录 (18)1 概述1.1研究背景现代社会的发展越来越快,人们的时间观念也越来越强。

所以有准确的时间提醒是很重要的,比如学校工厂等都要有个准时的时间来提醒人们。

所以打铃器运用很广泛。

我们可以利用所学单片机知识制作一个自动打铃器可以实现学校到点打铃的工作。

1.2设计思想及基本功能利用51单片机设计以实现以下功能1 根据自己需要设计打铃时间,到定时时间自动打铃。

2 8位LED动态显示,实现表24小时制计时和显示功能。

3 能设置当前时间。

4可以随时更改打铃时间。

2 总体设计2.1 模块设计教学用电子打铃器主要由80C51单片机、键盘扫描模块、时钟和复位模块、打铃器模块、八段数码管显示模块等组成。

运用汇编语言来控制单片机80C51来实现、动态数码显示等功能。

且本设计中的80C51单片机是整个工作过程的核心,是整个设计灵魂,它控制了脉冲时序的产生,显示信号的发送控制显示LED的选择。

所用到的芯片元器件:80C51单片机,3个按键,1个蜂鸣器,4个八段LED数码管80C51是一种带4K字节存储器(的低电压、高性能CMOS 8位微处理器,俗称单片机。

2.2程序流程图开始初始化参数设置调用显示子程序调用打铃对比程序调用键盘子程序、开始 100ms 单元加1 分清 零,时单元 加1 秒 单 元 清 零,分单 元加1 时 单 元清 零100m s 单元清0秒单元加1 保护现场 返回100ms=0? 时=24? 分=60? 秒=60? 否 否否 否第一个图是主程序流程图第二的图是定时中断流程图3 硬件单元设计3.1电路设计总原理图3.2各模块设计3.2.1键盘扫描模块利用四个按键进行校时,按键K1是调整时间选择,按键K2进行小时加1,按键K3进行分钟加1,按键K4则调整时间结束返回主程序, K1接P1.1,K2接P1.2,K3接P1.3,K4接P1.4。

3.2.2时钟和复位模块3.2.3显示模块根据设计要求系统需要4个共阳LED,数码管显示电路使用80C51的动态显示功能。

4个LED八段(a、b、c、d、e、f、g、dp),数码管分别显示:“时”、“分”,用二极管的“点”作为时、分的间隔。

该系统采用共阳极数码管,对于共阳极数码管,其公共端必须接高电平。

当打铃的时候四个数码管中前三个不显示数据,最后一个显示课程节数。

3.2.4响铃模块打铃电路(接P3.7):当前时间与程序设定时间相同时,P3.7端输出高电平的方波,即打铃。

每次响铃时间是60S。

4软件设计中断服务程序通过定时器T0(工作方式为1),实现一日的24小时,首先得初始化,正常工作,主函数调用数码管显示程序显示当前时间,然后调用打铃对比函数,若当前时间与系统设定打铃时间相同是,响应打铃程序。

当需要对时间校正时,可以通过按键扫描处理程序进行校时。

//////////程序初始化//////////ALB EQU 20H //打铃设置标志BUF EQU 30H //30-33h连续四个字节存放显示器数据HOUR EQU 34H //存放小时变量MIN EQU 35H // 存放分钟变量SEC EQU 36H //存放秒钟变量DEDA EQU 37H // 存放5ms计数值HH EQU 38H // 打铃设置小时变量MM EQU 39H //打铃设置分钟变量;按键输入引脚K1 EQU P1.1K2 EQU P1.2K3 EQU P1.3K4 EQU P1.4;蜂鸣器和指示灯引脚定义SPK EQU P1.5WLED EQU P1.0 //工作指示灯引脚定义ORG 00HlJMP MAINORG 0BHlJMP T0_SRV/////////////主程序入口///////////MAIN:CLR ALB //清除闹铃标志MOV A,#80H //加载显示器初始值数据 ` MOV P0,AACALL BZ;ACALL BZACALL LED_BLACALL DELAY1 ;定时器T0的初始化ACALL INITLOOP:ACALL CONVACALL DISPLOOP2:ACALL CONVACALL LD1 //查询打铃时间MOV A,MINCJNE A,#10,AGNJMP LOOP2AGN:CJNE A,#55,LOOP3JMP LOOP2LOOP3:JB K1,M1JNB K1,$ACALL SETTIME M1: JMP LOOPjmp loopACALL DISPLD1:MOV A,HOURCLR CSUBB A,#8MOV DPTR,#TALE MOVC A,@A+DPTR CJNE A,HOUR,LL MOV A,MINCJNE A,#10,L ACALL BZMOV A,HOURCLR CSUBB A,#8MOV DPTR,#TABLE2 MOVC A,@A+DPTR MOV P0,AACALL DELAYL:CJNE A,#55,LL ACALL BZMOV A,HOURCLR CSUBB A,#8MOV DPTR,#TABLE2MOVC A,@A+DPTRMOV P0,AACALL DELAYLL:RETTALE:DB 08H,09H,0AH,0BHTABLE2:DB 0F9H,0A4H,0B0H,99H;中断服务程序T0_SRV: //定时器T0计时中断程序每隔5ms中断一次PUSH ACCMOV TL0,#LOW(65536-5000) //直接带公式法设置T0的初值,此方法为简便方法MOV TH0,#HIGH(65536-5000)//MOV TL0,#(8192-5000)MOD 32 //重加载初始值//MOV TH0,#(8192-50000)/32INC DEDA;秒输出MOV A,DEDACJNE A,#200,TT1MOV DEDA,#0CPL WLED //LED灯亮灭变换INC SECMOV A,SECCJNE A,#60,TT1 //是否1分钟到了;分输出INC MIN //分计数加一MOV SEC,#0 //秒计数清零MOV A,MINCJNE A,#60,TT1 //看是否一小时到了;时输出INC HOURMOV MIN,#0MOV A,HOURCJNE A,#24,TT1MOV SEC,#0MOV MIN,#0MOV HOUR,#0TT1:POP ACCRETI////////////////////实现显示功能的子程序///////////////////// CONV:;转换小时数据 //通过DIV指令进行十进制计时处理,并将中断程序处理后的数据分别存放入数码管显示内存中//其中BUF,BUF+1存放小时;BUF+2,BUF+3存放分钟、MOV A,HOURMOV B,#10DIV AB //将HOUR内的值转换为十位和个位分别表示的十进制数字,便于用两位数码管显示出来小时值MOV DPTR,#TABLE //DPTR指针指向表的首地址MOVC A,@A+DPTRMOV BUF,AMOV A,BMOVC A,@A+DPTRMOV BUF+1,AMOV A,MIN //开始转换分钟MOV B,#10DIV ABMOV DPTR,#TABLEMOVC A,@A+DPTRMOV BUF+2,AMOV A,BMOVC A,@A+DPTRMOV BUF+3,ARET/////////////////扫描显示子程序/////////////////////实际四个数码管是在轮流显示的,每一刻都只有一个数码管亮,利用人的视觉暂留来使人感觉是在同时显示DISP:MOV R0,#BUF //指向显示器缓冲区起始地址,即存入十位上小时地址MOV R2,#4 //扫描四次MOV A,#00001000B //扫描初值,只是使p2.3口打开S1:MOV P2,AMOV A,@R0MOV P0,AMOV A,P2MOV R5,#2ACALL DELAY //延时,以便显示字符稳定;EX:XXXX1011RR A //A向右移动一位INC R0 //指向BUF+1DJNZ R2,S1 //判断是否执行了四次扫描RET////////////设置打铃时间子程序////////////////// SET_ATIME:ACALL CONVANO:ACALL DISP;K2调整小时JB K2,N1JNB K2,$INC HHMOV A,HHCJNE A,#24,N11MOV HH,#0N11:ACALL CONVAACALL DISPJMP NO;K3调整分钟时间N1:JB K3,N2JNB K3,$INC MMMOV A,MMCJNE A,#60,N21MOV MM,#0N21:ACALL CONVA //加载打铃时间数据ACALL DISPJMP NO;K4设置完成N2:JB K1,NOJNB K1,$;设置完成ACALL LED_BLACALL CONV //加载现在时间数据CPL ALB //此处为判断是否启用闹铃JNB ALB,M31ACALL BZACALL BZACALL BZ //连鸣三声为启用闹铃JMP LOOPM31:ACALL BZ //闹铃停止,发出一声JMP LOOPRET//////////////执行闹铃时间处理子程序////////////// TIME_OUT:X1:ACALL LED_BLACALL BZJB K4,X1JNB K4,$ACALL LED_BLCLR ALB //清除闹铃位RET////////////检查打铃时间子程序//////////////// TIME_PRO:JB ALB,TI3RETTI3:MOV A,HOURMOV B,HHCJNE A,B,BKMOV A,MINMOV B,MMCJNE A,B,BKACALL TIME_OUT //执行检查时间处理BK:RETTAL:DB 0C6H,80H,90H,88H,83HTAL1:DB 0F9HEND5 总结刚拿到设计题目时,由于对设计相关知识的不熟悉,使得对此题目的无从入手,感觉挺难。