利用单片机打铃器毕业论文设计_第1页
利用单片机打铃器毕业论文设计_第2页
利用单片机打铃器毕业论文设计_第3页
利用单片机打铃器毕业论文设计_第4页
利用单片机打铃器毕业论文设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、指导老师 一 题目 自动打铃器二 基本要求利用单片机的定时器设的一个时钟,在每秒加1的计时过程中,都于规定的时间进行比较,如果相等就进行开关电铃,不等则返回毕业设计报告写作要求一、封面二、内容提要三、目录四、正文1、概述所作题目的意义、本人所做的工作及系统的主要功能;2、硬件电路设计及描述;3、软件设计流程及描述;4、源程序代码。五 设计体会六、参考文献单片机原理及接口技术 李朝青 北京航空航天大学出版社。微机控制技术及应用韩全立 机械工业出版社目录一、引言.3二、单片机的结构和说明4 1.单片机的定义.4 2.单片机的组成.4 3.8051单片机的结构和引脚说明4 4.单片机的应用特点.6三

2、、总体设计方案.61设计思路.62硬件设计及引脚接线框图.7四、设计原理分析.81校时模式.82定时模式.83工作模式.84. 存储器93C46的相关介绍.8五、程序部分.81.程序分为五部分.82.部分寄存器及按键说明.83.程序流程图.84.程序清单.12六、方案论证.29七、总结与体会.28八、谢词.28九、参考文献.29十、总电路图.30自动打铃器摘要 文章介绍了一种以8051单片机为核心控制的并带有数码LED显示时.分.秒和以指示灯做标志的按键校时自动打铃器。一、引言单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积

3、小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。 按照内部数据通道的宽度,单片机可分为4位、8位、16位及32位等。单片机的中央处理器(CPU)和通用微处理器基本相同,只是增设了“面向控制”的处理功能。例如:位处理、查表、多种地址访问方式、多种跳转、乘除法运算、状态监测、中断处理等,增强了实时性。 单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器

4、空间的结构,称为普林斯顿(Princeton)结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。 单片微型计算机自从问世以来,作为微型计算机一个很重要的分支,应用广泛,发展迅速,尤其是美国Intel公司生产的MCS-51系列单片机,由于其具有集成度高,处理功能强,可靠性高,系统结构简单,价格低廉等优点,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成就。 本文讨论的单片机自动打铃器的核心是目前应用极为广泛的51系列单片机,配置了外围设备,构成了一个可编程的计时定时系统,具有体积小

5、,可靠性高,功能强等特点。不仅能满足所需要求而且还有很多功能可供开发,有着广泛的应用领域。 20世纪80年代中期以后,Intel公司以专利转让的形式把8051内核技术转让给许多半导体芯片生产厂家,如ATMEL、PHILIPS、ANALOG、DEVICES、DALLAS等。这些厂家生产的芯片是MCS-51系列的兼容产品,准确地说是与MCS-51指令系统兼容的单片机。这些兼容机与8051的系统结构(主要是指令系统)相同,采用CMOS工艺,因而,常用80C51系列来称呼所有具有8051指令系统的单片机,它们对8051单片机一般都作了一些扩充,更有特点。二、单片机的结构和说明.单片机的定义单片微型计算

6、机(Single-Chip Microcomputer),简称单片机。就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。2.单片机的组成单片机是由中央处理器(即CPU中的运算器和控制器)、只读存贮器(通常表示为ROM)、读写存贮器(又称随机存贮器通常表示为RAM)、输入/输出口(又分为并行口和串行口,表示为I/O口)等等组成。3.8051单片机的结构和引脚说明51系列单片机8031、8051及89c51/89s51均采用40Pin封装的双列直接DIP结构。下图是它们的引脚配置:40

7、个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:Pin20:接地脚。Pin40:正电源脚,工作时,接+5V电源。Pin19:时钟XTAL1脚,片内振荡电路的输入端。Pin18:时钟XTAL2脚,片内振荡电路的输出端。 8051的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体(2-12MHz)和振荡电容,振荡电容的值一般取10p-30p。另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。输入输出(I/O)引脚:Pin39-Pin32为P0.0-P0.7输入

8、输出脚。 Pin1-Pin8为P1.0-P1.7输入输出脚。 Pin21-Pin28为P2.0-P2.7输入输出脚。 Pin10-Pin17为P3.0-P3.7输入输出脚。 Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。 8051的复位方式可以是自动复位,也可以是手动复位,见下图。此外,RESET/Vpd还是一复用脚,Vcc掉电期间,此脚可接上备用电源, 以保证单片机内部RAM的数据不丢失。 Pin30:ALE/ 当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存

9、储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。如果单片机是EPROM,在编程其间, 将用于输入编程脉冲。Pin29: 当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器

10、指令。4.单片机的应用特点单片机的主要特点有:(1)可靠性高(2)便于扩展(3)控制功能强(4)低电压、低功耗(5)片内存储容量较小,除此之外,单片机还具有集成度高、体积小、性价比高、应用广泛、易于产品化等特点三、总体设计方案.设计思路利用单片机及定时器设计的一个时钟,在每次秒加1的计时过程中,都与规定的时间作比较,如果相等就进行开关电铃,不等则返回。.硬件设计及引脚接线框图 四、设计原理分析1.校时模式按下K1(模式选择键),将模式选择为校时模式(模式指示灯黄灯亮),K2,K3,K4分别为时钟加1键,分钟加1键,秒钟加1键,K5无用。2.定时模式按下K1(模式选择键),将模式选择为定时模式(

11、模式指示灯绿灯亮),K2为定时器组选择(本装置有24组定时器)键,K3,K4分别为定时器时钟加1键和定时器分钟加1键,K5为定时器状态选择键,每按K5一次,此组的定时器状态改变一次,并将此组数据存入93C46中。3.工作模式按下K1(模式选择键),将模式选择为工作模式(模式指示灯红灯亮),K2,K3,K4,K5无用。此模式为正常工作模式4.存储器93C46的相关介绍存储器AT93C46为SPI接口,1脚为CS,2脚为CLK,3脚为DI,4脚为DO,5脚为GND,6脚为ORG,7脚为NC,8脚为VCC。单5V电压,DIP8,64*16(ORG为HI)或128*8(ORG为LO),芯片及字的清除,

12、时钟最高为250KHZ。读(READ)操作:当下达10XXXX指令后,将地址(XXXXXX)的数据在CLK=HI时由DO输出。写(WRITE)操作:在写入之前,必须先下达写使能(EWEN)指令,然后在下达01XXXXXX指令后,当CLK为HI时,在把数据写入指定的地址(XXXXXX),而DO=0时,表示还在烧写,烧写完成后,DO会转为HI,写入动作完成后,必须再下达写禁止(ENDS)指令。写使能(EWEN):下达0011XXXX指令后,才可进行写入(WRITE)的数据清除。写禁止(EWDS):五、程序部分1.程序分为五部分1.初始化程序,2.键值处理程序,3.中断程序,4.显示程序,5.存储器

13、93C46读写程序2.部分寄存器及按键说明28H:扫描指针寄存器20H-25H:显示缓存寄存器R6:时钟寄存器R5:分钟寄存器R4:秒钟寄存器K1:模式选择键K2:时加1(定时器组加1)键K3:分加1(定时器时加1)键K4:秒加1(定时器分加1)键K5:定时器状态改变既存储键3程序流程图图3 总体软件流程图图4 校时及显示流程图图5 校分及显示流程图4.程序清单1.初始化程序:READ EQU 0 ;读93C46WRITE EQU 2 ;写入93C46EWEN EQU 4 ;93C46写入使能EWDS EQU 6 ;93C46写入禁止ADR46 EQU 21H ;93C46地址THIGH EQ

14、U 0F8HTLOW EQU 5FHTIMENEQU 30 ;打铃持续时间(30秒)CS BIT P3.7 ;93C46CSCLK BIT P3.6 ;93C46CLKDI BIT P3.5 ;93C46DIDO BIT P3.4 ;93C46DOORG 0000H ;主程序起始地址AJMP START ;跳至主程序ORG 000BH ;TIMER0中断起始地址AJMP TIM0 ;跳至TIMER0中断子程序START:MOV SP,#60H ;设置堆栈在60HMOV 28H,#00 ;显示寄存器初值为00MOV R6,#12H ; 时寄存器值为12HMOV R5,#00H ;“分”寄存器值为

15、00HMOV R4,#00H ;“秒”寄存器值为00HMOV TMOD,#01H ;设TIMER0为MODE1MOV TH0,#THIGH ;计时中断为4000微秒MOV TL0,#TLOWMOV IE,#82 ;TIMER中断使能MOV R2,#250 ;中断250次SETB TR0 ;启动TIMER02.键值处理程序:LOOP: SETB P0.5 ;工作模式CLR P0.6CLR P0.7JB P0.0,N1 ;K1(模式选择键)按了?不是则跳至N1ACALL DELAY ;消除抖动JNB P0.0,$ ;K1(模式选择键)放开了?ACALL DELAY ;消除抖动AJMP SET ;转

16、到定时模式SETN1: MOV 2FH,R6 ;将时钟数据载入2FH中MOV 2EH,R5 ;将分钟数据载入2EH中MOV ADR46,#00 ;把93C46地址置0SETB RS0 ;将工作寄存器组选择1区LOOP1: MOV A,#READ ;读93C46ACALL TO93c46MOV A,R3 ;取出定时器的状态ANL A,#01HCJNE A,#01H,N2 ;定时器为关闭,则跳转至N2MOV A,R4 ;取出定时器分钟数据CJNE A,2FH,N2 ;定时器分钟数据与时钟分钟不同则转至N2MOV A,R5 ;取出定时器时钟数据CJNE A,2EH,N2 ;定时器时钟数据与时钟时钟不

17、同则转至N2SETB P2.1 ;定时器时间到,打铃MOV A,ADR46 ;将93C46地址载入A中N2: CJNE A,#1EH,N3 ;到定时器数据表表尾?没到转至N3MOV ADR46,#00 ;到表尾,置93C46地址为表头AJMP LOOP1 ;转至LOOP1N3: INC ADR46 ;93C46地址加2INC ADR46AJMP LOOP1 ;转至LOOP1SET: CLR P0.5 ;校时模式SETB p0.6CLR P0.7LOOPS: JB P0.0,N11 ;K1(模式选择键)按了?不是则跳至N11ACALL DELAY ;消除抖动JNBP0.0,$ ;K1(模式选择键

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

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

20、;做十进制调整MOV R4,A ;将A的值存入秒寄存器CJNE A,#60H,N16 ;是否超过60秒?不是则跳至N16MOV R4,#00 ;是则清除分寄存器的值为00N16: JNB P0.3,$ ;K4(秒钟加1键)放开了?ACALL DELAY ;消除抖动N17: AJMP LOOPS ;转至LOOPSSETTIME:CLR P0.5 ;定时模式CLR P0.6SETB P0.7MOV ADR46,#00HMOV A,#READ ;读93C46地址为ADR46中的数据ACALL TO9346LOOPB:ACALL DISP ;调用DISPJB P0.0,N21 ;K1(模式选择键)按了

21、?不是则跳至N21ACALL DELAY ;消除抖动JNB P0.0,$ ;K1(模式选择键)放开了?ACALL DELAY ;消除抖动AJMP LOOP ;转至LOOPN21: JB P0.1,N22 ;K2(定时器组加1键)按了?不是则跳至N22ACALL DELAY ;消除抖动MOV A,ADR46 ;将地址载入ACLR C ;清除进位位RRC A ;A右移1位ADD A,#01H ;地址加1MOV R6,A ;将A存入R6CLR C ;清除进位位RLC A ;A左移1位MOV ADR46,A ;将A中地址存入ADR46MOV A,#READ ;读93C46地址为ADR46中的数据ACA

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

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

24、变R3最低位的值(表示定时器的状态,1表示开,0表示关)MOV A,#WRITE ;将A的值写入93C46地址为ADR46中ACALL TO9346JNB P0.4,$ ;K5(改变定时器状态存储键)放开了?ACALL DELAY ;消除抖动N27:AJMP LOOPB ;转至LOOPB3.读写93C46程序:TO9346:SETB CS ;CS=1SETB DI ;DI=1SETB CLK ;CLK=1ACALL DELAYCLR CLK ;CLK=0ACALL DELAYMOV DPTR,#JPTBL46JMP A+DPTR;JPTBL46:AJMPSREAD ;读AJMP SWRITE

25、;写AJMP SEWEN ;写使能AJMP SEWDS ;写禁止SREAD: MOV A,ADR46 ;地址载入AADD A,#80H ;10XXXX读指令ACALL SDT46 ;读入地址ACALL RDT46 ;读定时器时钟数据MOV R5,A ;存入R5ACALL RDT46 ;读定时器分钟数据MOV R4,A ;存入R4INC ADR46 ;地址加1MOV A,ADR46 ;地址载入AADD A,#80H ;10XXXX读指令ACALL SDT46 ;读入地址ACALL RDT46 ;读定时器状态数据ACALL RDT46DEC ADR46MOV R3,A ;存入R3AJMP EX93

26、46SWRITE:MOVA,ADR46 ;写入地址载入AADD A,#40H ;01XXXX写指令ACALL SDT46 ; 载入地址MOV A,R5 ;载入定时器时钟数据ACALL SDT46 ;写入定时器时钟数据MOV A,R4 ;载入定时器分钟数据ACALL SDT46 ;写入定时器分钟数据INC ADR46 ;地址加1MOV A,ADR46 ;写入地址载入AADD A,#40H ;01XXXX写指令ACALL SDT46 ;载入地址MOV A,R3 ;载入定时器状态数据DEC ADR46 ;地址减1ACALL ADR46 ;写入定时器状态数据AJMP EX9346 ;转至EX9346S

27、EWEN:MOVA,#30H ;0011XXXX写使能指令ACALL SDT46AJMP EX9346SEWDS:CLR A ;0000XXXX写禁止指令ACALL SDT46EX9346:CLRCS ;CS=0RETSDT46:MOV R2,#8 ;写入8位数据SD1: RLC AMOV DI,CSETB CLKACALL DELAYCLR CLKACALL DELAYDJNZ R2,SD1RETRDT46:MOV R2,#8 ;读出8位数据RD1: SETB CLKACALL DELAYCLR CLKACALL DELAYMOV C,DORLC ADJNZ R2,RD1RETDELAY:M

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

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

30、过打零连续时间?不是则跳至X4CLR P2.0 ;关铃X4:CJNE A,#60H,X5 ;是否超过60秒?不是则跳至X5MOV R4,#00 ;是则清除为0MOV A,R5 ;R5为分寄存器ADD A,#01 ;加1DA A ;做十进制调整MOV R5,A ;存入分寄存器CJNE A,#60H,X5 ;是否超过60分?不是则跳至X5MOV R5,#00 ;是则清除为0MOV A,R6 ;R6为时寄存器ADD A,#01 ;加1DA A ;做十进制调整MOV R6,A ;存入时寄存器CJNEA,#60H,X5 ;是否超过24时?不是则跳至X5MOV R6,#00 ;是则清除为0X5:RET5.显示程序:DISP:MOVR1,#20 ;(20H)为显示寄存器,R1=20HMOV A,R6 ;将时寄存器的内容存入AMOV B,#01H ;设B累加器的值为10HDIV AB ;A/B,商(十位数)存入A,余数(个位数)存入BMOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论