基于51单片机的电子打铃器 - 图文
更新时间:2023-03-08 08:39:34 阅读量: 综合文库 文档下载
科信学院
课程设计说明书
(2010 /2011学年第二学期)
课程名称 :单片机原理及应用课程设计
题 目:基于单片机的教学用电子打铃器电路设计 专业班级 : 电子信息工程0801 学生姓名 : 李富恒 学 号: 080072109 指导教师 : 刘会军、吴开兴、马永强 设计周数 : 两周
设计成绩 :
2011年 6 月 23 日
目 录
1、课程设计目的 ......................................................... 2 2、总体设计 ............................................................. 2
2.1 模块设计......................................................... 2 2.2 程序流程图 ....................................................... 2 3、硬件单元设计 ......................................................... 4 3.1电路设计总原理图 .................................................... 4 3.2各模块电路设计 ..................................................... 4 3.2.1 键盘扫描模块 ................................................... 4 3.2.2 时钟和复位模块 ................................................. 4 3.2.3 显示模块 ....................................................... 5 3.2.4 响铃模块 ....................................................... 6 4、软件设计 ............................................................. 7 4.1 键盘扫描程序 ....................................................... 8 4.2 数码管显示程序 .................................................... 10 4.3 主程序 ........................................................... 11 4.4 响铃程序 ............................................................................................................................................................ 12 5、课程设计总结 ........................................................ 15 6、参考文献 ............................................................ 16
1
1.课程设计目的
通过设计学习单片机最小系统的基本设计方法,掌握单片机应用系统的开发调试过程。 (1)学习常用单片机开发工具功能、特点和使用方法。 (2)学会单片机控制系统程序的编制和调试方法。 (3)设计单片机打铃器硬件电路,绘制出电路原理图。 (4)编制并调试出键盘扫描程序和显示驱动程序。
(5)掌握单片机定时器的基本用法,编制出定时中断程序。 (6)要求设计具有电子时钟功能,并能显示时间值、课程节数。 2.总体设计 2.1 模块设计
教学用电子打铃器主要由80C51单片机、键盘扫描模块、时钟和复位模块、打铃器模块、八段数码管显示模块等组成。运用汇编语言来控制单片机80C51来实现、动态数码显示等功能。且本设计中的80C51单片机是整个工作过程的核心,是整个设计灵魂,它控制了脉冲时序的产生,显示信号的发送控制显示LED的选择。
所用到的芯片元器件:80C51单片机, 3个按键,1个蜂鸣器,4个八段LED数码管 80C51是一种带4K字节存储器(的低电压、高性能CMOS 8位微处理器,俗称单片机。 2.2 程序流程图
调用键盘子程序 图2.2(1) 主程序流 调用打铃对比程序 调用显示子程序 初始化参数设置 开始 图2.2(1) 主程序程序流程图
2
图2.2(2) 定时中断程序流程图
3
3.硬件单元设计
3.1 电路设计总原理图
图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。
4
3.2.2 时钟和复位模块
图3.2.2 时钟和复位模块
3.2.3显示模块及芯片说明
根据设计要求系统需要4个共阳LED,数码管显示电路使用80C51的动态显示功能。4个LED八段(a、b、c、d、e、f、g、dp),数码管分别显示: “时”、“分”,用二极管的“点”作为时、分的间隔。该系统采用共阳极数码管,对于共阳极数码管,其公共端必须接高电平。当打铃的时候四个数码管中前三个不显示数据,最后一个显示课程节数。
图3.2.3 显示模块
5
3.2.4 响铃模块
打铃电路(接P3.7):当前时间与程序设定时间相同时,P3.7端输出高电平的方波,即打铃。每次响铃时间是60S。
图3.2.4 响铃模块
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 //打铃设置分钟变量 ;按键输入引脚
6
K1 EQU P1.1 K2 EQU P1.2 K3 EQU P1.3 K4 EQU P1.4
;蜂鸣器和指示灯引脚定义 SPK EQU P1.5
WLED EQU P1.0 //工作指示灯引脚定义 ORG 00H lJMP MAIN ORG 0BH lJMP T0_SRV
/////////////主程序入口/////////// MAIN:
CLR ALB //清除闹铃标志
MOV A,#80H //加载显示器初始值数据 MOV P0,A ACALL BZ ;ACALL BZ ACALL LED_BL
ACALL DELAY1 ;定时器T0的初始化
ACALL INIT LOOP: ACALL CONV ACALL DISP LOOP2: ACALL CONV
7
`
ACALL LD1 //查询打铃时间
MOV A,MIN
CJNE A,#10,AGN JMP LOOP2 AGN:
CJNE A,#55,LOOP3 JMP LOOP2 LOOP3: JB K1,M1
JNB K1,$
ACALL SETTIME
M1: JMP LOOP jmp loop
ACALL DISP LD1:
MOV A,HOUR CLR C SUBB A,#8 MOV DPTR,#TALE
8
MOVC A,@A+DPTR CJNE A,HOUR,LL MOV A,MIN CJNE A,#10,L ACALL BZ MOV A,HOUR CLR C SUBB A,#8
MOV DPTR,#TABLE2 MOVC A,@A+DPTR MOV P0,A ACALL DELAY L:
CJNE A,#55,LL ACALL BZ
MOV A,HOUR
CLR C SUBB A,#8
MOV DPTR,#TABLE2 MOVC A,@A+DPTR MOV P0,A ACALL DELAY LL: RET TALE:
DB 08H,09H,0AH,0BH TABLE2:
DB 0F9H,0A4H,0B0H,99H
9
/////////实现走动功能的的子程序//////////// DELAY1: MOV TMOD,#00000001B
MOV IE,#10000010B
//延时60ms的子程序 设置T0工作在模式1 //启用定时器T0中断产生 //打开T0并将其设置为定时器
// MOV TCON,#00010000B
MOV TL0,#LOW(65536-5000) //直接带公式法设置T0的初值,此方法为简便
方法
MOV TH0,#HIGH(65536-5000) SETB TR0
//若TF0为1时代表T0定时器计数已满,有溢出程
序往下进行
;中断服务程序 T0_SRV: PUSH ACC
MOV TL0,#LOW(65536-5000) //直接带公式法设置T0的初值,此方法为简便方法 MOV TH0,#HIGH(65536-5000)
//MOV TL0,#(8192-5000)MOD 32 //重加载初始值 //MOV TH0,#(8192-50000)/32 INC DEDA ;秒输出 MOV A,DEDA CJNE A,#200,TT1 MOV DEDA,#0 CPL WLED
//若TF0为0时将一直循环这条程序语句; RET
//定时器T0计时中断程序每隔5ms中断一次
//LED灯亮灭变换
10
INC SEC MOV A,SEC CJNE A,#60,TT1 ;分输出
INC MIN //分计数加一 MOV SEC,#0 //秒计数清零 MOV A,MIN
CJNE A,#60,TT1 //看是否一小时到了 ;时输出 INC HOUR MOV MIN,#0 MOV A,HOUR CJNE A,#24,TT1 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 TT1: POP ACC RETI
////////////////////实现显示功能的子程序///////////////////// CONV:
;转换小时数据
//通过DIV指令进行十进制计时处理,并将中断程序处理后的数据分别存
//是否1分钟到了
放入数码管显示内存中
//其中BUF,BUF+1存放小时;BUF+2,BUF+3存放分钟 、
MOV A,HOUR MOV B,#10 DIV AB
//将HOUR内的值转换为十位和个位分别表示的十进制数字,便于用两位
11
数码管显示出来小时值
MOV DPTR,#TABLE //DPTR指针指向表的首地址 MOVC A,@A+DPTR MOV BUF,A MOV A,B MOVC A,@A+DPTR MOV BUF+1,A
MOV A,MIN //开始转换分钟 MOV B,#10 DIV AB
MOV DPTR,#TABLE MOVC A,@A+DPTR MOV BUF+2,A MOV A,B MOVC A,@A+DPTR MOV BUF+3,A RET
//////////共阳极数码管字符转换笔段码表/////// TABLE:
DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH
//共阴极///////////////////////
// TABLE:
//DB 3FH,06H,5BH,4FH,66H //DB 6DH,7DH,07H,7FH //DB 6FH,77H,7CH,39H
12
//DB 5EH,79H,71H
/////////////////扫描显示子程序///////////////////
//实际四个数码管是在轮流显示的,每一刻都只有一个数码管亮,利用人的视觉暂留来使人感觉是在同时显示 DISP:
MOV R0,#BUF //指向显示器缓冲区起始地址,即存入十位上小时地址 MOV R2,#4 //扫描四次
MOV A,#00001000B //扫描初值,只是使p2.3口打开 S1:
MOV P2,A MOV A,@R0 MOV P0,A MOV A,P2
MOV R5,#2
ACALL DELAY //延时,以便显示字符稳定 ;EX:XXXX1011 RR A INC R0
//A向右移动一位 //指向BUF+1
DJNZ R2,S1 //判断是否执行了四次扫描 RET
///////////////////实现调整时间子程序//////////////////// ;设置目前时间 SETTIME:
13
CLR TR0 //定时器暂停 MOV SEC,#0 //秒钟变量清零 L0:
ACALL DISP //调用扫描显示子程序 JB K2,L1 //K2等于一时跳转到L1 JNB K2,$ //若按下K2则等待放开 ;K2小时调整 INC HOUR MOV A,HOUR
CJNE A,#24,L11 //是否到了24小时,不到跳转到L11 MOV HOUR,#0 //小时变量清零 L11:
ACALL CONV //转换显示数据 ACALL DISP //扫描显示 JMP L0 L1: JB K3,L2 JNB K3,$ ;K3分钟调整 INC MIN MOV A,MIN CJNE A,#60,L21 MOV MIN,#0 L21: ACALL CONV ACALL DISP JMP L0
L2:JB K4,L0 //未按下K4则继续扫描 JNB K4,$
ACALL BZ //蜂鸣器响一声
14
;K4设置完成
ACALL LED_BL //LED闪动 SETB TR0 //启动定时器 RET
///////////////延时子程序/////////////
//DELAY:MOV R5,#20 //延时0.5s的延时子程序;所输出的频率是下一个延时子程序的2倍;
//LAY2: MOV R6,#100 //LAY1: MOV R7,#100 // DJNZ R7,$ // DJNZ R6,LAY1 // DJNZ R5,LAY2 // RET
DELAY:
//延时时间是:2msX(R5)
MOV R6,#10 D1:MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET
//////////////工作指示灯////////////// LED_BL: MOV R4,#6 LE1:CPL WLED
MOV R5,#25 //延时50ms
15
//工作指示灯闪烁
ACALL DELAY DJNZ R4,LE1 RET
/////////////计数单元清0子程序////////////// INIT:
MOV DEDA,#0 MOV SEC,#0 MOV MIN,#9 MOV HOUR,#8 RET
/////////////////蜂鸣器////////////////// BZ:MOV R6,#250 //使蜂鸣器响一声 B1:ACALL DEX CPL SPK DJNZ R6,B1 MOV R5,#50 ; CLR P2.2 ;CLR P2.3 ACALL DELAY RET
////////////蜂鸣器短暂延时子程序////////// DEX:MOV R7,#180 DE1:NOP
DJNZ R7,DE1 RET
/////////////加载打铃时间子程序////////////// CONVA: MOV A,HH MOV B,#10 DIV AB
//将HOUR内的值转换为十位和个位分别表示的十进制数字,便于用两位
16
数码管显示出来小时值
MOV DPTR,#TABLE //DPTR指针指向表的首地址 MOVC A,@A+DPTR MOV BUF,A MOV A,B MOVC A,@A+DPTR MOV BUF+1,A MOV A,MM MOV B,#10 DIV AB
MOV DPTR,#TABLE MOVC A,@A+DPTR MOV BUF+2,A MOV A,B MOVC A,@A+DPTR MOV BUF+3,A RET
//开始转换分钟
////////////设置打铃时间子程序////////////////// SET_ATIME: ACALL CONVA NO: ACALL DISP ;K2调整小时 JB K2,N1 JNB K2,$ INC HH MOV A,HH CJNE A,#24,N11 MOV HH,#0 N11:
17
ACALL CONVA ACALL DISP JMP NO
;K3调整分钟时间 N1:JB K3,N2 JNB K3,$ INC MM MOV A,MM CJNE A,#60,N21 MOV MM,#0
N21:ACALL CONVA //加载打铃时间数据 ACALL DISP
JMP NO
;K4设置完成 N2:JB K1,NO JNB K1,$ ;设置完成 ACALL LED_BL
ACALL CONV //加载现在时间数据 CPL ALB
//此处为判断是否启用闹铃
JNB ALB,M31 ACALL BZ ACALL BZ ACALL BZ JMP LOOP M31:
ACALL BZ //闹铃停止,发出一声 JMP LOOP RET
//////////////执行闹铃时间处理子程序//////////////
18
//连鸣三声为启用闹铃
TIME_OUT: X1:ACALL LED_BL ACALL BZ
JB K4,X1 JNB K4,$ ACALL LED_BL
CLR ALB //清除闹铃位 RET
////////////检查打铃时间子程序//////////////// TIME_PRO: JB ALB,TI3
RET
TI3: MOV A,HOUR MOV B,HH CJNE A,B,BK
MOV A,MIN MOV B,MM CJNE A,B,BK
ACALL TIME_OUT //执行检查时间处理 BK: RET TAL:
DB 0C6H,80H,90H,88H,83H TAL1: DB 0F9H END
19
本系统的仿真是在Proteus 7下实现的
6.课程设计总结
刚拿到设计题目时,由于对设计相关知识的不熟悉,使得对此题目的无从入手,感觉挺难。最后,在资料与同学的帮助下,对设计有了大概的了解,并在组员的合作下有了初步设计。在接下来的两天里,不停的对设计进行修改完善,得出最终方案,并开始着手硬件与软件的同步设计。伴随实物初成,对相关功能进行测试,再次修改设计软硬件,完善功能。
整个课设主要内容包括两大部分,分别是硬件设计和软件设计。硬件设计涉及单片机和各种必备元器件,并要进行电路焊接。对于此次的设计题目,硬件要求设计比较难,因所要焊接的导线较多,较复杂,因此这部分工作量很大。而软件设计也是此次设计的难点部分,编程语言选择了汇编语言,在熟悉程序运行软件的前提下,书写实现功能的程序。程序包含多个函数,通过对各个函数的调用去实现设计要求的功能。此外,还对设计进行了必要的软件仿真,终于在不懈的努力下顺利的完成的设计。
通过这次的课程设计,巩固了课本知识,加深了对单片机的了解。最后,感谢同学的配合,感谢老师悉心的指导帮助!!
7.参考文献
[1] 何立民.单片机高级教程应用与设计 .北京航空航天出版社,2007.1 [2] 刘文涛.单片机语言C51典型应用设计.人民邮电出版社,2005.10
20
课程设计 评 语 课程设计 成 绩
指导教师 (签字) 年 月 日 21
正在阅读:
基于51单片机的电子打铃器 - 图文03-08
有机化合物的鉴别05-28
加强和创新社会管理-提纲03-19
第三编 语文教材(上)05-28
广西养猪行业企业名录2018版8781家 - 图文04-01
危险化学品生产环节典型事故分析05-26
晚会主持人开场白台词02-16
医院超声科制度汇总03-08
9第九章绿色建筑试题12-21
“党在我心中”演讲稿:党旗飘飘06-08
- 《江苏省环境水质(地表水)自动监测预警系统运行管理办法(试行)》
- 安乐死合法化辩论赛立论稿(浙大新生赛)
- 公共科目模拟试卷公务员考试资料
- 我国固定资产投资FAI对GDP的影响
- 大学生创新创业训练计划项目申请书大创项目申报表
- 完美版—单片机控制步进电机
- 2013资阳中考化学试题
- 18.两位数减一位数退位(397道)
- 工程量计算规则
- 二年级操行评语(下)
- 第3章 流程控制语句
- 浅基桥墩加固技术
- 课题研究的主要方法
- 5100软件说明书 - 图文
- 车间技术员年终总结
- 关于印发《中铁建工集团开展项目管理实验室活动方案》的通知
- 经典诵读结题报告
- 地下水动力学习题答案
- 2018年全国各地高考数学模拟试题平面解析几何试题汇编(含答案解
- 街道办事处主任2018年度述职述廉报告
- 打铃器
- 单片机
- 基于
- 图文
- 电子
- 公司应收账款管理的现状及存在的问题、原因分析及建设与对策_毕
- UC矩阵(练习)
- 陈祖德 客房预定的价格和数量问题
- 2015届吉林省长春市十一中高三第二次阶段性测试数学试题及答
- 初三物理之杠杆(基础)
- 小学写字教学现状分析与策略研究开题报告
- 体育教研组工作总结
- 2017考研数学高数知识点梳理之洛必达法则
- 力与运动(三)(含答案)
- 7秘诀帮大龄女养出健康卵子 - 图文
- 商鞅变法塑造了中国的管理文化基因
- 督导征文
- LTE考试题库-多选题(含解析)
- 变压器设计
- 普药事业部2014年营销方案(学习稿) - 图文
- 2018届云南省昆明市高三上学期1月摸底调研考试理综试题word版含
- 浅谈我对班主任工作的认识(初稿)
- 汉代俑——造型丰富 不输秦俑
- 内蒙古通辽市地区自然概况
- 安全标准化记录全套表格11