基于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

本文来源:https://www.bwwdw.com/article/8c23.html

Top