当前位置:文档之家› 东北石油大学单片机课程设计自动打铃控制器解析

东北石油大学单片机课程设计自动打铃控制器解析

第1章绪论本设计是根据我们所学习的单片机课程,按照大纲要求对我们进行的一次课程检验,是进行单片机课程训练的必要任务,也对我们掌握单片机应用有很大的帮助。

掌握单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。

近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。

当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。

单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。

而本文是用AT89C51单片机设计的一个自动打铃系统。

第2章总体设计思想2.1 基本原理利用单片机的基本原理和功能,控制自动打铃控制器,掌握单片机的最小电路和单片机最常见的外围扩展电路,利用C语言编程并结合单片机开发板上的功能设计实现一个综合程序“单片机多功能打铃器控制器”,完成常见外围组件的驱动。

2.2 设计框图图2.1 硬件电路设计设定51单片机工作在定时器工作方式1,每100ms产生一次中断,利用软件将基准100ms单元进行累加,当定时器产生10次中断就产生1S信号,这时秒单元加1。

同理,对分单元时单元和上下午单元计数,从而产生秒,分,时,上下午的值,通过五位七段显示器进行显示。

本系统采用四个按键,1键为功能键,另外三个做控制键。

按一下1键进入时间设置,接着按2键选择需要调整的位,按3键进行加数,按4键进行减数,按两下1键调整结束时钟继续走动。

当时钟时间与设置时间一致时,驱动电路动作进行打铃,按时间点不同打铃规则不同,此时按2键强制灭铃。

第3章系统主要硬件电路设计3.1 各功能模块程序实现原理分析图3.13.1.1 七段式数码管驱动模块采用动态扫描方式,通过一组单片机端口驱动并联在一起的LED发光管的一端(共阴或共阳端),LED发光管的另一脚接通用I/O口,控制其亮灭。

该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

3.1.2 蜂鸣器驱动模块采用压电式蜂鸣器,压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5-15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。

图3.2 蜂鸣器驱动电路3.1.3 按钮控制模块四个按钮的一端分别接地,另一端接单片机一个端口的四个引脚,当某一个按钮按下的时候,其对应的引脚就由高电平变成低电平,然后通过单片机扫描读取引脚的电平来判断按钮是否按下。

3.2 AT89C51单片机性能介绍AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

引脚说明:VCC:供电电压。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH 编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)。

P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

硬件电路包括七段式数码管驱动模块、蜂鸣器驱动模块、按钮控制模块等三大模块。

P1.0 1 40 VccP1.1 2 39 P0.0P1.2 3 38 P0.1P1.3 4 37 P0.2P1.4 5 36 P0.3P1.5 6 35 P0.4P1.6 7 34 P0.5P1.7 8 33 P0.6RST/Vpd 9 32 P0.7RXD P3.0 10 31 EA/VppTXD P3.1 11 30 ALE/-PINT0 P3.2 12 29 PSENINT1 P3.3 13 28 P2.7T0 P3.4 14 27 P2.6T1 P3.5 15 26 P2.5WR P3.6 16 25 P2.4RD P3.7 17 24 P2.3X2 18 23 P2.2X1 19 22 P2.1GND 20 21 P2.0图3.3 AT89C51引脚图第4章系统软件设计软件是该LED显示屏控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。

4.1系统软件设计的主要内容系统软件设计由三个模块编程组成:蜂鸣器打铃编程,七段显示管显示编程,按键编程。

4.2主程序流程设计主程序初始化,并打开中断,然后执行中断服务程序。

实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:23-59-59(小时十位如果为0则不显示)到预定时间启动蜂鸣器模拟打铃,蜂鸣器BEEP:P3.7打铃方式分起床、熄灯铃和上、下课铃两种系统使用4只按键,3只按键用来调整时间,另一只为强制打铃按钮调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁增加键ADD_KEY:P1.1;按一次使选中位加1减少键DEC_KEY;P1.2;按一次使选中位减1,如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁。

如图所示主程序开始初始化后,就跳转到中断服务程序,如正常走时,则往下进行打铃时间的比较,继续向下执行对打铃的判断程序;如不正常走时,则直接转到显示程序。

这以后,继续执行按键的检测,若有键按下,则取值打铃;反之,则返回到中断服务程序的开始继续执行。

主程序清单见附录。

主程序流程设计图:图4.14.3 主程序段BEEP EQU P3.7 ;定义蜂鸣器(电铃)控制信号输出口ORG 0000H ;程序入口地址LJMP STARTORG 000BH ;定时器0中断入口地址LJMP TIMER_0ORG 0100H;/*****程序开始,初始化*****/START:SETB BEEP ;关闭蜂鸣器(电铃)SETB 48H ;使用一个bit位用于调时闪烁标志SETB 47H ;使用一个bit位用于产生脉冲用于调时快进时基CLR 45H ;关闭响铃方式1标志CLR 44H ;关闭响铃方式2标志MOV R1,#0 ;调整选择键功能标志:0正常走时、1调时、2调分、3调秒MOV 20H,#00H ;用于控制秒基准时钟源的产生MOV 21H,#00H ;清零秒寄存器MOV 22H,#00H ;清零分寄存器MOV 23H,#00H ;清零时寄存器MOV 24H,#00H ;用于控制调时闪烁的基准时钟的产生MOV R2,#00H ;强制打铃标志MOV R3,#00H ;强制打铃时长标志第5章系统仿真5.1 仿真开发系统的功能一个单片机系统经过总体设计,完成了硬件和软件开发。

元器件安装后在系统存储器中放入编制好的应用程序,系统即可运行。

一般来说,仿真开发系统应具有如下的功能:1)用户样机硬件电路的诊断与检查;2)用户样机程序的输入与修改;3)程序的运行、调试(单步运行、设置断点)、排错、状态查询功能;4)将程序固化到EPROM芯片中。

但对于一个较完善的仿真开发系统,还应具备:1)有较全的开发软件,同时要求用户可用汇编语言编制应用软件;开发系统自动生成目标文件;并配有反汇编软件能将目标程序转换成汇编语言程序;有丰富的子程序可供用户选择调用。

2)有跟踪调试、运行的能力。

3)为了方便模块化软件调试,还应配置软件转储、程序文本打印功能。

5.2 仿真结果此系统的仿真效果很好,能实现设计要求和目的所规定的内容。

下面是两幅仿真结果图:图5.1图5.2第章总结通过本次自动打铃控制器的设计认识了单片机的使用方法,加深了对单片机的认识和了解学会了电路的基本设计思路和原理,掌握单片机设计步骤,知道这门课程在工作中的重要性,提高了通过查阅书籍等资料解决问题的能力,为进一步深化学习积累了宝贵的经验,将知识应用于生活中,运用知识解决实际问题,受益匪浅。

参考文献〔1〕严仲兴,王熔熔:《单片机原理与应用》,中国计划出版社,2001 .7〔2〕江力:《单片机原理与应用技术》,清华大学出版社,2006.5〔3〕徐爱钧,彭秀华:《单片机高级语言C51windows环境编程与应用》,北京电子工业出版社,2001.7〔4〕求是科技:《单片机典型模块设计实例导航》,北京人民邮电出版社,2004.5 〔5〕康华光:《电子技术基础:模拟部分》,北京高等教育出版社,1999.6〔6〕江太辉:《MCS-51系列单片机原理与应用》.广州:华南理工大学出版社,2004.6 (7)刘海宽单片机实验与实践教程东南大学出版社2009年1月出版(8)杨易德模拟电路重庆大学出版社2006年10月出版(9)廖先芸电子技术实践与训练高等教育出版社2005年6月出版(10)郭勇EDA技术基础机械工业出版社2009年1月出版附录1 系统硬件电路图附录2 程序清单BEEP EQU P3.7 ;定义蜂鸣器(电铃)控制信号输出口ORG 0000H ;程序入口地址LJMP STARTORG 000BH ;定时器0中断入口地址LJMP TIMER_0ORG 0100H;/*****程序开始,初始化*****/START:SETB BEEP ;关闭蜂鸣器(电铃)SETB 48H;使用一个bit位用于调时闪烁标志SETB 47H;使用一个bit位用于产生脉冲用于调时快进时基CLR 45H ;关闭响铃方式1标志CLR 44H;关闭响铃方式2标志MOV R1,#0;调整选择键功能标志:0正常走时、1调时、2调分、3调秒MOV 20H,#00H;用于控制秒基准时钟源的产生MOV 21H,#00H;清零秒寄存器MOV 22H,#00H;清零分寄存器MOV 23H,#00H;清零时寄存器MOV 24H,#00H;用于控制调时闪烁的基准时钟的产生MOV R2,#00H ;强制打铃标志MOV R3,#00H;强制打铃时长标志MOV IP,#02H;IP,IE初始化MOV IE,#82HMOV TMOD,#01H;设定定时器0工作方式1MOV TH0,#3CHMOV TL0,#0B0H;赋定时初值,定时50msSETB TR0;启动定时器0MOV SP,#40H;重设堆栈指针;/*****主程序*****/MAIN:CJNE R1,#00H,MAIN1 ;是否为正常走时状态LCALL BIJIAO1 ;调用起床、熄灯打铃比较子程序LCALL BIJIAO2 ;调用上、下课打铃比较子程序LCALL DALING1;调用响铃方式1执行子程序LCALL DALING2;调用响铃方式2执行子程序LCALL DALING3MAIN1:LCALL DISPLAY ;调用显示子程序LCALL KEY_SCAN;调用按键检测子程序JZ MAIN;无键按下则返回重新循环LCALL SET_KEY;调用选择键处理子程序JB 46H,MAIN;如果已进行长按调整(调时快进),则不再执行下面的单步调整LCALL ADD_KEY;调用增加键处理子程序LCALL DEC_KEY ;调用减少键处理子程序LCALL DALING_KEY ;处理强制打铃/强制关闭铃声键LJMP MAIN;重新循环;/*****定时中断服务程序*****/TIMER_0:PUSH ACCPUSH PSW ;保护现场MOV TH0,#3CHMOV TL0,#0B0H;重新赋定时初值CPL 47H ;产生脉冲用于调时快进时基INC 24HMOV A,24HCJNE A,#10,ADD_TIME ;产生0.5秒基准时钟,用于调时闪烁CPL 48H ;取反调时闪烁标志位MOV 24H,#00HADD_TIME:INC 20HMOV A,20HCJNE A,#20,RETI1 ;产生1秒基准时钟MOV 20H,#00H ;一秒钟时间到,清零20H CJNE R2,#01H,ADD_MINC R3ADD_M:MOV A,21HADD A,#01HDA A ;作十进制调整MOV 21H,ACJNE A,#60H,RETI1MOV 21H,#00H ;一分钟到MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,RETI1MOV 22H,#00H ;一小时到MOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,RETI1MOV 23H,#00H ;到24点,清零小时BIJIAO1:MOV A,23HCJNE A,#00H,B0MOV A,22HCJNE A,#01H,B0 ;6:00到SETB 45H ;开启响铃方式1RETB0: MOV A,23HCJNE A,#22H,EXIT_1MOV A,22HCJNE A,#30H,EXIT_1 ;22:30到SETB 45H ;开启响铃方式1RETEXIT_1:CLR 45HRET;/*****打铃时间对比程序(上、下课)*****/ BIJIAO2:MOV A,23HCJNE A,#07H,B1MOV A,22HCJNE A,#30H,B1 ;7:30SETB 44H ;开启响铃方式2RETB1: MOV A,23HCJNE A,#08H,B2MOV A,22HCJNE A,#20H,B2 ;8:20SETB 44HRETB2: MOV A,23HCJNE A,#08H,B3MOV A,22HCJNE A,#30H,B3 ;8:30 SETB 44HRETB3: MOV A,23HCJNE A,#09H,B4MOV A,22HCJNE A,#20H,B4 ;9:20 SETB 44HRETB4: MOV A,23HCJNE A,#09H,B5MOV A,22HCJNE A,#40H,B5 ;9:40 SETB 44HRETB5: MOV A,23HCJNE A,#10H,B6MOV A,22HCJNE A,#30H,B6 ;10:30 SETB 44HRETB6: MOV A,23HCJNE A,#10H,B7MOV A,22HCJNE A,#40H,B7 ;10:40 SETB 44HRETB7: MOV A,23HCJNE A,#11H,EXIT_2 MOV A,22HCJNE A,#30H,EXIT_2 ;11:30SETB 44HRETEXIT_2:CLR 44HRET;/*****响铃方式1程序(响5秒停2秒再响5秒)*****/ DALING1:JNB 45H,EXIT_DALINGMOV A,21H ;响铃起始时间由秒实时控制CJNE A,#05H,L1RETL1:JNC L2CPL BEEPLCALL DELAY1RETL2:MOV A,21HCJNE A,#07H,L3CPL BEEPLCALL DELAY1RETL3:JNC L4SETB BEEPLCALL DELAY1RETL4:MOV A,21HCJNE A,#12H,L5SETB BEEPLCALL DELAY1RETL5:JNC EXIT_DALINGCPL BEEPLCALL DELAY1RET;/*****响铃方式2程序(响5秒)*****/ DALING2:JNB 44H,EXIT_DALINGMOV A,21H ;响铃起始时间由秒实时控制CJNE A,#05H,L6SETB BEEPRETL6:JNC EXIT_DALINGCPL BEEPLCALL DELAY1RET;/*****响铃方式3程序*****/DALING3:CJNE R2,#01H,EXIT_DALING CJNE R3,#05H,DL3MOV R2,#00HMOV R3,#00HSETB BEEPRETDL3:CPL BEEPLCALL DELAY1RETEXIT_DALING:RETDELAY1:MOV R6,#10 ;短延时子程序X1:MOV R7,#80X2:DJNZ R7,X2DJNZ R6,X1RETEND ;程序结束21。

相关主题