您好,欢迎来到九壹网。
搜索
您的当前位置:首页单片机电子时钟课程设计设计报告

单片机电子时钟课程设计设计报告

来源:九壹网
单片机电子时钟设计

一、作品功能介绍

该作品是个性化电子钟设计,技术上主要用单片机(ATS52)主控,6位LED数码显示,分别显示“小时:分钟:秒”。该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。

功能介绍:

(1)上电以后自动进入计时状态,起始于00:00:00。 (2)设计键盘调整时间,完成时间设计,并设置闹钟。 (3)定时时间为1/100秒,可采用定时器实现。

(4)采用LED数码管显示,时、分,秒采用数字显示。 (5)采用24小时制,具有方便的时间调校功能。 (6)具有时钟和秒表的切换功能。 使用方法:

开机后时钟在00:00:00起开始计时。

(1)长按进入调分状态:分单元闪烁,按加1,按减1.再长按进入 时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。

(2)(2)按进入设定闹时状态: 12:00: ,可进行分设定,按分加1,再按为时调整,按时加1,按调闹钟结束.在闹铃时可按停闹,不按闹铃1分钟。

(3)按下进入秒表状态:再按秒表又启动,按暂停,再按秒表清零,按退出秒表回到时钟状态。

二、电路原理图

如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块、电源模块、晶振模块、按键模块等组成。

1

电子时钟原理图

各个模块设计

1.单片机系统 ATS52 ATS52概述:是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。

ATS52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,ATS52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被

2

冻结,单片机一切工作停止,直到下一个中断或硬件复位为止……

主要性能:与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz~33Hz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒、看门狗定时器 、双数据指针 、掉电标识符 。

2、显示模块

LED数码管是由发光二极管构成的,亦称半导体数码管。将条状发光二极管按照共阴极(负极)或共阳极(正极)的方法连接,组成“8”字,再把发光二极管另一电极作笔段电极,就构成了LED数码管。若按规定使某些笔段上的发光二极管发光,就能显示从0~9的…系列数字。同荧光数码管(VFD)、辉光数码管(NRT)相比,它具有:体积小、功耗低、耐震动、寿命长、亮度高、单色性好、发光响应的时间短,能与TTL、CMOS电路兼容等的数显器件。+、-分别表示公共阳极和公共阴极。a~g是7个笔段电极,DP为小数点。另有一种字高为

7.6mm的超小型LED数码管,管脚从左右两排引出,小数点则是的。

本系统利用6位LED数码管显示时间,共阴极结构。LED数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。

3.按键模块

本设计中主要有三个控制按键,按键功能为: (1)为调时间模式,长按进入调分状态:分单元闪烁,按加1,按减1.再长按进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。

(2)按进入设定闹时状态: 12:00: ,可进行分设定,按分加1,再按为时调整,按时加1,按调闹钟结束.在闹铃时可按停闹,不按闹铃1分钟。

(3)按下进入秒表状态:再按秒表又启动,按暂停,再按秒表清零,按退出秒表回到时钟状态。

4.晶振模块

在ATS51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。

3

晶振电路

三、程序设计

源程序代码

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ATS52时钟程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

*****************************************************************定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁及秒表定时用,

、、为调整按钮,P0口为字符输出口,P2为扫描口,为蜂呜器口,采 用共阳显示管。

50H-55H为闹钟定时单元,60H-65H为秒表计时单元,70H-75H为显示时间单元,76H-79H 为分时计时单元。

03H标志=0时钟闪烁,=1秒表, 05H=0,不闹铃,=1要闹铃. 07H每秒改变一次,

用作间隔呜叫.

***************************************************************** DISPFIRST EQU 30H ;显示首址存放单元 BELL EQU

CONBS EQU 2FH ;存放报时次数 CLOCK EQU 2DH

**************************************** 中断入口程序 ****************************************

ORG 0000H ;程序执行开始地址 LJMP START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回

ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTTO执行

4

ORG 0013H ;外中断1中断程序入口 RETI ;外中断1中断返回

ORG 001BH ;定时器T1中断程序入口 LJMP INTT1 ;跳至INTT1执行

ORG 0023H ;串行中断程序入口地址 RETI ;串行中断程序返回 **************************************** 以下程序开始 ;;

**************************************** 整点报时用

QQQQ: MOV A,#10H MOV B,79H MUL AB ADD A,78H MOV CONBS,A BSLOOP: LCALL DS21MS LCALL DL1S LCALL DL1S LCALL DL1S

DJNZ CONBS,BSLOOP

CLR 08H ;清整点报时标志 AJMP START1

**************************************** 主程序开始 ;; ****************************************

START: LCALL ST ;上电显示00:00:00 MOV R0,#00H ;清00H-7FH内存单元 MOV R7,#80H ; CLEARDISP: MOV @R0,#00H ; INC R0 ; DJNZ R7,CLEARDISP ;

MOV 20H,#00H ;清20H(标志用) MOV 55H,#1 MOV 54H,#2

MOV 7AH,#0AH ;放入\"熄灭符\"数据

MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50MS定时初值(T0计时用)

5

MOV TH0,#3CH ;50MS定时初值

MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用) MOV TH1,#3CH ;50MS定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器

MOV R4,#14H ;1秒定时用计数值(50MS×20) MOV DISPFIRST,#70H ;显示单元为70-75H ;以下主程序循环

START1: LCALL DISPLAY ;调用显示子程序

JNB ,SETMM1 ;口为0时转时间调整程序 JNB ,TSFUN ;定时闹铃设定

JNB ,FUNPT ;秒表功能(STOP,RUN,CLR) JB 08H, QQQQ

AJMP START1 ;口为1时跳回START1 FUNPT: LJMP FUNPTT START12: LJMP START1

以下闹铃时间设定程序,按进入设定 TSFUN: LCALL DS20MS

JB ,START1 ;

WAIT113: JNB ,WAIT113 ;等待键释放

JB 05H,CLOSESP ;闹铃已开的话,关闹铃

MOV DISPFIRST,#52H ;进入闹铃设定程序,显示52-55H闹钟定时单元

DSWAIT: SETB EA LCALL DISPLAY

JNB ,DSFINC ;分加1 JNB ,DSDEC ;分减1

JNB ,DSSFU ;进入时调整 AJMP DSWAIT

CLOSESP: CLR 05H ;关闹铃标志 CLR BELL AJMP START1

DSSFU: LCALL DS20MS ;消抖 JB , DSWAIT

LJMP DSSFUNN ;进入时调整

6

; SETMM1: LJMP SETMM ;转到时间调整程序SETMM DSFINC : LCALL DS20MS ;消抖 JB , DSWAIT

DSWAIT12: LCALL DISPLAY ;等键 释放 JNB , DSWAIT12 CLR EA

MOV R0,#53H ;

LCALL ADD1 ;闹铃设定分加1 MOV A,R3 ;分数据放入A CLR C ;清进位标志 CJNE A,#60H,ADDHH22 ; ADDHH22: JC DSWAIT ;小于60分时返回

ACALL CLR0 ;大于或等于60分时分计时单元清0 AJMP DSWAIT

DSDEC : LCALL DS20MS ;消抖 JB , DSWAIT

DSWAITEE: LCALL DISPLAY ;等键 释放 JNB , DSWAITEE CLR EA

MOV R0,#53H ;

LCALL sub1 ;闹铃设定分减1 LJMP DSWAIT

;以下秒表暂停\\清零功能程序

;按下切换秒表功能,再按开始计时,暂停或清0,最后按退出秒表回到时钟计时 FUNPTT: LCALL DS20MS JB ,START12 WAIT22: JNB ,WAIT21 CPL 03H

JNB 03H,TIMFUN

MOV DISPFIRST,#60H ;显示秒表数据单元 MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV H,#00H MOV 65H,#00H

MOV TL1,#0F0H ;10MS定时初值

7

MOV TH1,#0D8H ;10MS定时初值

WAIT88:LCALL DS20MS JB ,WAIT81 WAIT99:JNB ,WAIT99

SETB TR1 ;T1运行控制软件 SETB ET1 ;T1溢出中断允许 WAIT33: LCALL DS20MS JB ,WAIT31 WAIT44: JNB ,WAIT41 CLR ET1 CLR TR1 WAIT55: LCALL DS20MS JB ,WAIT51 WAIT66: JNB ,WAIT61 MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV H,#00H MOV 65H,#00H

TIMFUN:MOV DISPFIRST,#72H ; CLR ET1 CLR TR1 AJMP FUNSS11 FUNSS11: AJMP START1 ;以下键等待释放时显示不会熄灭用 WAIT21: LCALL DISPLAY AJMP WAIT22 WAIT31: LCALL DISPLAY AJMP WAIT33 WAIT41: LCALL DISPLAY AJMP WAIT44 WAIT51: LCALL DISPLAY AJMP WAIT55

8

显示时钟数据单元

WAIT61: LCALL DISPLAY AJMP WAIT66 WAIT81: LCALL DISPLAY AJMP WAIT88 WAIT91: LCALL DISPLAY AJMP WAIT99

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1秒计时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;T0中断服务程序

INTT0: PUSH ACC ;累加器入栈保护 PUSH PSW ;状态字入栈保护 CLR ET0 ;关T0中断允许 CLR TR0 ;关闭定时器T0

MOV A,#0B7H ;中断响应时间同步修正 ADD A,TL0 ;低8位初值修正

MOV TL0,A ;重装初值(低8位修正值) MOV A,#3CH ;高8位初值修正 ADDC A,TH0 ;

MOV TH0,A ;重装初值(高8位修正值) SETB TR0 ;开启定时器T0

DJNZ R4, OUTT0 ;20次中断未到中断退出

ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值

CPL 07H ;闹铃时间隔呜叫用

MOV R0,#71H ;指向秒计时单元(71H-72H) ACALL ADD1 ;调用加1程序(加1秒操作) MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)

CLR C ;清进位标志 CJNE A,#60H,ADDMM ;

ADDMM: JC OUTT0 ;小于60秒时中断退出

ACALL CLR0 ;大于或等于60秒时对秒计时单元清0

MOV R0,#77H ;指向分计时单元(76H-77H) ACALL ADD1 ;分计时单元加1分钟 MOV A,R3 ;分数据放入A CLR C ;清进位标志

9

CJNE A,#60H,ADDHH ;

ADDHH: JC OUTT0 ;小于60分时中断退出

ACALL CLR0 ;大于或等于60分时分计时单元清0 LCALL DS20MS ;正点报时 SETB 08H

MOV R0,#79H ;指向小时计时单元(78H-79H) ACALL ADD1 ;小时计时单元加1小时 MOV A,R3 ;时数据放入A CLR C ;清进位标志 CJNE A,#24H,HOUR ;

HOUR: JC OUTT0 ;小于24小时中断退出

ACALL CLR0 ;大于或等于24小时小时计时单元清0

OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移

MOV 73H,77H ;入对应显示单元 MOV 74H,78H ; MOV 75H,79H ; LCALL BAOJ

POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 SETB ET0 ;开放T0中断 RETI ;中断返回 ;**************************************** ;; 闪动调时程序\\秒表功能程序 ;; ;****************************************

;T1中断服务程序,用作时间调整时调整单元闪烁指示或秒表计时 INTT1: PUSH ACC ;中断现场保护 PUSH PSW ;

JB 03H, MMFUN ;=1时秒表

MOV TL1, #0B0H ;装定时器T1定时初值 MOV TH1, #3CH ;

DJNZ R2,INTT1OUT ;秒未到退出中断(50MS中断6次) MOV R2,#06H ;重装秒定时用初值

CPL 02H ;秒定时到对闪烁标志取反 JB 02H,FLASH1 ;02H位为1时显示单元\"熄灭\" MOV 72H,76H ;02H位为0时正常显示 MOV 73H,77H ;

10

MOV 74H,78H ; MOV 75H,79H ;

INTT1OUT: POP PSW ;恢复现场 POP ACC ;

RETI ;中断退出

FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制 MOV 72H,7AH ;01H位为0时,\"熄灭符\"数据放入分 MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据 MOV 74H,78H ; MOV 75H,79H ; AJMP INTT1OUT ;FLASH2: MOV 72H,76H ;01H MOV 73H,77H ; MOV 74H,7AH ; MOV 75H,7AH ; AJMP INTT1OUT ;;

MMFUN : CLR TR1 MOV A,#0F7H ;(10ms)

ADD A,TL1 ; MOV TL1,A ; MOV A,#0D8H ; ADDC A,TH1 ; MOV TH1,A ; SETB TR1 ; MOV R0,#61H ; ACALL ADD1 ; CLR C ; MOV A,R3 ; JZ FSS1 ; AJMP OUTT01 ; FSS1: ACALL CLR0 ;0

MOV ACALL ADD1 ; MOV A,R3 ; CLR C ;

R0,#63H ;

转中断退出

位为1时,\"熄灭符\"数据放入小时 显示单元(74H-75H),小时数据将不显示

转中断退出 中断响应时间同步修正,重装初值低8位初值修正

重装初值(低8位修正值) 高8位初值修正

重装初值(高8位修正值) 开启定时器T1

指向秒计时单元(71H-72H) 调用加1程序(加1秒操作)

加1后为00,C=0 加1后不为00,C=1

大于或等于60秒时对秒计时单元清指向分计时单元(76H-77H) 分计时单元加1分钟 分数据放入A 清进位标志

11

CJNE A,#60H,ADDHH1 ;

ADDHH1: JC OUTT01 ;小于60分时中断退出

LCALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#65H ;指向小时计时单元(78H-79H) ACALL ADD1 ;小时计时单元加1小时 OUTT01:

POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 RETI ;中断返回 **************************************** ;; 加1子 程 序 ;; ;****************************************

ADD1: MOV A,@R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换 ORL A,@R0 ;前一地址中数据放入A中低四位 ADD A,#01H ;A加1操作 DA A ;十进制调整 MOV R3,A ;移入R3寄存器 ANL A,#0FH ;高四位变0

MOV @R0,A ;放回前一地址单元 MOV A,R3 ;取回R3中暂存数据 INC R0 ;指向当前地址单元

SWAP A ;A中数据高四位与低四位交换 ANL A,#0FH ;高四位变0

MOV @R0,A ;数据放入当削地址单元中 RET ;子程序返回 ;**************************************** ;; 分减1子 程 序 ;; ;**************************************** ;

SUB1: MOV A,@R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换 ORL A,@R0 ;前一地址中数据放入A中低四位 JZ SUB11

DEC A ;A减1操作 SUB111: MOV R3,A ;移入R3寄存器

12

ANL A,#0FH ;高四位变0 CLR C ;清进位标志 SUBB A,#0AH SUB1111: JC SUB1110

MOV @R0,#09H ;大于等于0AH,为9 SUB110: MOV A,R3 ;取回R3中暂存数据

INC R0 ;指向当前地址单元

SWAP A ;A中数据高四位与低四位交换 ANL A,#0FH ;高四位变0

MOV @R0,A ;数据放入当削地址单元中 RET ;子程序返回 ;

SUB11: MOV A,#59H AJMP SUB111

SUB1110:MOV A,R3 ;移入R3寄存器 ANL A,#0FH ;高四位变0 MOV @R0,A AJMP SUB110

;**************************************** ;; 时减1子 程 序 ;; ;****************************************

SUBB1:MOV A,@R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址

SWAP A ;A中数据高四位与低四位交换 ORL A,@R0 ;前一地址中数据放入A中低四位 JZ SUBB11 ;00减1为23(小时) DEC A ;A减1操作 SUBB111:MOV R3,A ;移入R3寄存器 ANL A,#0FH ;高四位变0 CLR C ;清进位标志

SUBB A,#0AH ;时个位大于9为9 SUBB1111: JC SUBB1110 ;

MOV @R0,#09H ;大于等于0AH,为9 SUBB110: MOV A,R3 ;取回R3中暂存数据 INC R0 ;指向当前地址单元

SWAP A ;A中数据高四位与低四位交换 ANL A,#0FH ;高四位变0

13

MOV @R0,A ;时十位数数据放入 RET ;子程序返回 ;

SUBB11: MOV A,#23H AJMP SUBB111

SUBB1110:MOV A,R3 ;时个位小于0A不处理 ANL A,#0FH ;高四位变0 MOV @R0,A ;个位移入 AJMP SUBB110

;**************************************** ;; 清零程序 ;; ;**************************************** ;对计时单元复零用

CLR0: CLR A ;清累加器

MOV @R0,A ;清当前地址单元 DEC R0 ;指向前一地址 MOV @R0,A ;前一地址单元清0 RET ;子程序返回 ;

;**************************************** ;; 时钟时间调整程序 ;; ;**************************************** ;当调时按键按下时进入此程序 SETMM: CLR ET0 ;关定时器T0中断 CLR TR0 ;关闭定时器T0

LCALL DL1S ;调用1秒延时程序 LCALL DS20MS ;消抖

JB ,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电) MOV R2,#06H ;进入调时状态,赋闪烁定时初值 MOV 70H,#00H ;调时时秒单元为00 秒 MOV 71H,#00H SETB ET1 ;允许T1中断 SETB TR1 ;开启定时器T1

SET2: JNB ,SET1 ;口为0(键未释放),等待

SETB 00H ;键释放,分调整闪烁标志置1 SET4: JB ,SET3 ;等待键按下

14

LCALL DL05S ;有键按下,延时秒 LCALL DS20MS ;消抖

JNB ,SETHH ;按下时间大于秒转调小时状态 MOV R0,#77H ;按下时间小于秒加1分钟操作 LCALL ADD1 ;调用加1子程序 MOV A,R3 ;取调整单元数据 CLR C ;清进位标志 CJNE A,#60H,HHH ;调整单元数据与60比较

HHH: JC SET4 ;调整单元数据小于60转SET4循环 LCALL CLR0 ;调整单元数据大于或等于60时清0 CLR C ;清进位标志

AJMP SET4 ;跳转到SET4循环 CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断 SETB TR0 ;开启T0定时器(开时钟) CLOSE: JB ,CLOSE ;无按键按下,等待。 LCALL DS20MS ;消抖

JB ,CLOSE ;是干扰返回CLOSE等待 WAITH: JNB ,WAITH ;等待键释放

LJMP START1 ;返回主程序(LED数据显示亮) SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态) SETB 01H ;小时调整标志置1 SETHH1: JNB ,SET5 ;等待键释放 SET6: JB ,SET7 ;等待按键按下

LCALL DL05S ;有键按下延时秒 LCALL DS20MS ;消抖

JNB ,SETOUT ;按下时间大于秒退出时间调整 MOV R0,#79H ;按下时间小于秒加1小时操作 LCALL ADD1 ;调加1子程序 MOV A,R3 ; CLR C ; CJNE A,#24H,HOUU ;计时单元数据与24比较 HOUU: JC SET6 ;小于24转SET6循环

LCALL CLR0 ;大于或等于24时清0操作 AJMP SET6 ;跳转到SET6循环

SETOUT: JNB ,SETOUT1 ;调时退出程序。等待键释放 LCALL DS20MS ;消抖

JNB ,SETOUT ;是抖动,返回SETOUT再等待 CLR 01H ;清调小时标志

15

CLR 00H ;清调分标志 CLR 02H ;清闪烁标志 CLR TR1 ;关闭定时器T1 CLR ET1 ;关定时器T1中断 SETB TR0 ;开启定时器T0

SETB ET0 ;开定时器T0中断(计时开始) LJMP START1 ;跳回主程序

SET1: LCALL DISPLAY ;键释放等待时调用显示程序(调分)

AJMP SET2 ; SET3: LCALL DISPLAY ; JNB , FUNSUB ; AJMP SET4 ; SET5: LCALL DISPLAY ;小时)

AJMP SETHH1 ; SET7: LCALL DISPLAY ; JNB , FUNSUBB ; AJMP SET6 ; SETOUT1: LCALL DISPLAY ; AJMP SETOUT ;;FUNSUB,分减1程序

FUNSUB: LCALL DS20MS ; JB ,SET41 ; FUNSUB1: JNB ,FUNSUB1 ; MOV R0,#77H ; LCALL SUB1 ; LJMP SET4 ;;

SET41: LJMP SET4 ;;FUNSUBB,时减1程序 ; FUNSUBB: LCALL DS20MS ; JB ,SET61 ; FUNSUBB1: JNB ,FUNSUBB1 ; MOV R0,#79H ; LCALL SUBB1 ; LJMP SET6 ; ;

16

防止键按下时无时钟显示 等待调分按键时时钟显示用 减1分操作 调分等待

键释放等待时调用显示程序(调防止键按下时无时钟显示 等待调小时按键时时钟显示用 小时减1操作 调时等待

退出时钟调整时键释放等待 防止键按下时无时钟显示 消抖

干扰,返回调分等待 等待键放开

分减1程序 返回调分等待

消抖

干扰,返回调时等待 等待键放开

时减1程序 返回调时等待 SET61: LJMP SET6

;*************************************** ;; 显示程序 ;; ;***************************************

; 显示数据在70H-75H单元内,用六位LED共阳数码管显示,P0口输出段码数据,P2口作

; 扫描控制,每个LED数码管亮1MS时间再逐位循环。

DISPLAY: MOV R1,DISPFIRST ;指向显示数据首址 MOV R5,#0FEH ;扫描控制字初值 PLAY: MOV A,R5 ;扫描字放入A MOV P2,A ;从P2口输出 MOV A,@R1 ;取显示数据到A MOV DPTR,#TAB ;取段码表地址 MOVC A,@A+DPTR ;查显示数据对应段码

MOV P0,A ;段码放入P1口 MOV A,R5 ;

JB ,LOOP5 ;小数点处理 CLR ;

LOOP5: JB ,LOOP6 ;小数点处理

CLR ;

LOOP6: LCALL DL1MS ;显示1MS

INC R1 ;指向下一地址

MOV A,R5 ;扫描控制字放入A JNB ,ENDOUT ;=0时一次显示结束 RL A ;A中数据循环左移 MOV R5,A ;放回R5内 MOV P0,#0FFH AJMP PLAY ;跳回PLAY循环 ENDOUT: MOV P2,#0FFH ;一次显示结束,P2口复位 MOV P0,#0FFH ;P0口复位 RET ;子程序返回 TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH

;共阴段码表 \"0\"\"1\"\"2\" \"3\"\"4\"\"5\"\"6\"\"7\" \"8\"\"9\"\"不亮\"“A”“-” ;

;**************************** ; SDISPLAY ,上电显示子程序 ;****************************

17

;不带小数点显示,有“A”“-”显示功能

SDISPLAY: MOV R1,DISPFIRST

MOV R5,#0FEH ;扫描控制字初值 SPLAY: MOV A,R5 ;扫描字放入A MOV P2,A ;从P2口输出 MOV A,@R1 ;取显示数据到A MOV DPTR,#TABS ;取段码表地址 MOVC A,@A+DPTR ;查显示数据对应段码

MOV P0,A ;段码放入P1口 MOV A,R5 ; LCALL DL1MS ;显示1MS

INC R1 ;指向下一地址

MOV A,R5 ;扫描控制字放入A JNB ,ENDOUTS ;=0时一次显示结束 RL A ;A中数据循环左移 MOV R5,A ;放回R5内 AJMP SPLAY ;跳回PLAY循环 ENDOUTS: MOV P2,#0FFH ;一次显示结束,P2口复位 MOV P0,#0FFH ;P0口复位 RET ;子程序返回

TABS:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0C6H,0BFH,88H

; 显示数 \"0 1 2 3 4 5 6 7 8 9 不亮 C - A \"

; 内存数 \"0 1 2 3 4 5 6 7 8 9 0AH 0BH 0CH 0DH \"

STAB:DB

0AH,0AH,0AH,0AH,0AH,09H,06H,04H,02H,00H,00H,06H,00H,01H,03H,0AH DB

0AH,09H,01H,0CH,06H,00H,0CH,09H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH

; 注:0A不亮,0B显示“A”,0C显示“-” ;************************************* ;以下是闹铃时间设定程序中的时调整程序 ;*************************************

DSSFUNN: LCALL DISPLAY ;等待键释放 JNB , DSSFUNN WAITSS: SETB EA LCALL DISPLAY

JNB ,FFFF ;时加1键

18

JNB ,DDDD ;时减1

JNB ,OOOO ;闹铃设定退出键 AJMP WAITSS

OOOO: LCALL DS20MS ;消抖 JB ,WAITSS

DSSFUNNM: LCALL DISPLAY ;键释放等待 JNB , DSSFUNNM MOV DISPFIRST,#72H LJMP START1

FFFF: LCALL DS20MS ;消抖 JB , WAITSS

DSSFUNMM: LCALL DISPLAY ;键释放等待 JNB , DSSFUNMM CLR EA

MOV R0,#55H LCALL ADD1

MOV A,R3 ;

CLR C ; CJNE A,#24H,ADDHH33N ; ADDHH33N: JC WAITSS ;小于24点返回

ACALL CLR0 ;大于等于24点清零 AJMP WAITSS

DDDD : LCALL DS20MS ;消抖 ; JB , WAITSS

DSSFUNDD: LCALL DISPLAY ;键释放等待 JNB , DSSFUNDD CLR EA

MOV R0,#55H LCALL SUBB1 LJMP WAITSS ;********************* ;以下是闹铃判断子程序 ;*********************

BAOJ: MOV A,79H ;从时十位、个位、分十位、分个位顺序比较

CJNE A,55H,BBAO MOV A,78H

19

CLR C

BB3: CJNE A,54H,BBAO MOV A,77H CLR C

CJNE A,53H,BBAO MOV A,76H CLR C

; CJNE A,52H,BBAO ; CLR C ; CLR BELL ; RET

BB2: CJNE A,52H,BBAO

JNB 07H,BBAO ;07H在1秒到时会取反

CLR BELL ;时分相同时呜叫(1秒间隔叫) RET ;

BBAO: SETB BELL ;不相同或闹铃不开 RET

;*********************************************************** 上电显示程序

;***********************************************************

ST: MOV R0,#40H ;将显示内容移入40H-5FH单元 MOV R2,#20H ; MOV R3,#00H ; CLR A ; MOV DPTR,#STAB ; SLOOP: MOVC A,@A+DPTR ; MOV @R0,A ; MOV A,R3 ; INC A ; MOV R3,A ; INC R0 ;

DJNZ R2,SLOOP ;移入完毕

MOV DISPFIRST,#40H ;以下程序从左往右移 SSLOOP: MOV R2,#50 ;控制移动速度 SSLOOP1: LCALL SDISPLAY ;

20

DJNZ R2,SSLOOP1 ; INC DISPFIRST MOV A,DISPFIRST

CJNE A,#5AH, SSLOOP ;

MOV DISPFIRST,#5AH ;以下程序从右往左移 MOV R3,#1BH ;显示27个单元 SSLOOP2: MOV R2,#100 ;控制移动速度

SSLOOP12: LCALL SDISPLAY ; DJNZ R2,SSLOOP12 ; DEC DISPFIRST

DJNZ R3,SSLOOP2 ; RET

;******************************************* ;; 延时程序 ;; ;******************************************* ;

;1MS延时程序,LED显示程序用 DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET

;延时程序,采用调用显示子程序以改善LED的显示闪烁现象 DS20MS: ;CLR BELL LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY

; SETB BELL RET

DS21MS: CLR BELL LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY

SETB BELL RET

;延时程序,用作按键时间的长短判断 DL1S: LCALL DL05S LCALL DL05S

21

RET

DL05S: MOV R3,#20H ;8毫秒*32=秒 DL05S1: LCALL DISPLAY DJNZ R3,DL05S1 RET

;******************************************************** END ;程序结束 四、仿真分析

22

图一 原理图

23

图二 仿真图一

24

图三 仿真图二

25

平时作业

单片机的特点和应用 1、单片机的特点

(1)高集成度,体积小,高可靠性

单片机将各功能部件集成在一块晶体芯片上,集成度很高,体积自然也是最小的。芯片本身是按工业测控环境要求设计的,内部布线很短,其抗工业噪音性能优于一般通用的CPU。单片机程序指令,常数及表格等固化在ROM中不易破坏,许多信号通道均在一个芯片内,故可靠性高。

(2)控制功能强

为了满足对对象的控制要求,单片机的指令系统均有极丰富的条件:分支转移能力,I/O口的逻辑操作及位处理能力,非常适用于专门的控制功能。

(3)低电压,低功耗,便于生产便携式产品

为了满足广泛使用于便携式系统,许多单片机内的工作电压仅为~,而工作电流仅为数百微安。

(4)易扩展

片内具有计算机正常运行所必需的部件。芯片外部有许多供扩展用的三总线及并行、串行输入/输出管脚,很容易构成各种规模的计算机应用系统。

(5)优异的性能价格比

单片机的性能极高。为了提高速度和运行效率,单片机已开始使用RISC流水线和DSP等技术。单片机的寻址能力也已突破KB的,有的已可达到1MB和16MB,片内的ROM容量可达62MB,RAM容量则可达2MB。由于单片机的广泛使用,因而销量极大,各大公司的商业竞争更使其价格十分低廉,其性能价格比极高。

2、单片机的应用领域

(1)单片机在智能仪器仪表中的应用

在各类仪器仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。

(2)单片机在机电一体化中的应用

机电一体化是机械工业发展的方向。机电一体化产品是指集成机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功能强等优点,可大大提高机器的自动化、智能化程度。

(3)单片机在日常生活及家用电器领域的应用

自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、空调器、电子玩具、 电饭煲、视听音响设备等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们喜爱。单片机将使人类生活更加方便、舒适、丰富多彩。

26

(4)在实时过程控制中的应用

用单片机实时进行数据处理和控制,使系统保持最佳工作状态,提高系统的工作效率和产品的质量。

(5)办公自动化设备

现代办公室使用的大量通信和办公设备多数嵌入了单片机。如打印机、复印机、传真机、绘图机、考勤机、电话以及通用计算机中的键盘译码、磁盘驱动等。

(6)商业营销设备

在商业营销系统中已广泛使用的电子称、收款机、条形码阅读器、IC卡刷卡机、出租车计价器以及仓储安全监测系统、商场保安系统、空气调节系统、冷冻保险系统等都采用了单片机控制。

(7)在计算机网络和通信领域中的应用

现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。

(8)单片机在医用设备领域中的应用

单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。

(9)汽车电子产品

现代汽车的集中显示系统、动力监测控制系统、自动驾驶系统、通信系统和运行监视器(黑匣子)等都离不开单片机。

(10)航空航天系统和国防军事、尖端武器等领域 单片机的应用更是不言而喻。

综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次。

27

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务