14221019魏宏波单片机电子钟课程设计报告

 

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

姓名:魏宏波 学号:14221019 指导老师:黄赞武2016.04.27

一. 设计的任务及要求:

利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟。

任务:

通过电子时钟综合设计,学会利用 8051 定时器时间计时处理功能,了解按键扫描及控制LED数码管显示原理,掌握单片机和按键以及LED数码管硬件电路设计及控制程序的设计方法。思考按键消除抖动、LED 动态显示与静态显示的特点,从而提高解决实际问题的能力。

要求:

1.在 4 位数码管上显示当前时间。显示格式“时时分分”。

2.由 LED 闪动做秒显示。

3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。

二. 工作原理:

LED数码管:

蜂鸣器:

按键:

三. 软件设计流程及描述:

总设计框图:

显示部分:

显示部分分为时钟显示、闹钟显示和秒显示三部分,主要由时钟显示子程序和闹钟显示子程序构成,秒显示较为简单。闹钟显示与时钟显示编程流程大致相同。

流程图如下:

按键扫描及处理框图:

闹铃部分:

设计思路及原理:音节由不同频率的方波产生,音节与频率的关系如下表所示。要产生音频方波,设计利用延时来建立音符表NOTE,表格中的数存R3*20us,其倒数1/(R3*2*10us)对应相应音符的频率。

另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍。设计利用T1中断产生10ms延时,取1/4拍为

NOTE: DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60H

DB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50H

METRE: DB 20H,20H,20H,20H,20H,20H,20H,20H,20H

DB 20H,20H,20H,20H,20H,20H,20H,20H,20H

四. 源程序及代码:

;程序主要包括MAIN函数,T0/T1中断程序,时间、闹钟显示程序,按键扫描、处理程序

;/主函数/预置T0\T1工作方式,置初值,预置时钟、闹钟,置位数码管 ORG 0000H AJMP MAIN ;跳转到主程序MAIN执行 ORG 000BH AJMP INTT0 ;跳到INTT0执行 ORG 001BH LJMP INTT1 ;跳到INTT1执行 ORG 02B0H

MAIN:MOV SP,#80H MOV TMOD,#11H ;设置定时器T0、T1工作于方式1 MOV TH0,#0ECH ;装入时钟定时初值(5ms) MOV TL0,#78H MOV TH1,#0D8H ;装入闹铃定时初值(10ms) MOV TL1,#0F0H MOV R1,#00H ;确保首次默认闹铃工作 MOV 22H,#00H ;预置时钟分钟 MOV 23H,#00H ;预置时钟小时

SETB P1.7 ;LED7显示秒;置位P1.7,发光二极管LED8灭 SETB EA ;开放总中断

SETB ET0 ;允许T0中断

SETB TR0 ;开启定时器T0

LOOP:LCALL DISPT ;调用时间显示子程序

LCALL RING ;调用闹铃处理子程序

LCALL KEY ;调用按键扫描子程序

JZ LOOP ;无键按下则循环

LCALL CASE ;有键按下则转按键处理子程序执行 SJMP LOOP ;返回循环

;/ T0一秒定时中断程序INTT0/正常时钟计时

INTT0:PUSH PSW ;状态字入栈保护

PUSH ACC ;累加器入栈保护

MOV TH0,#0ECH ;装入计数初值,12MHZ晶振,形成1S中断 MOV TL0,#78H

INC 20H

MOV A,20H

CJNE A,#200,RETURN

CPL P1.67 ;一秒到LED8亮,用于显示秒

MOV 20H,#00 ;一秒到清20H

MOV A,21H

ADD A,#01H

DA A

MOV 21H,A

CJNE A,#60H,RETURN

MOV 21H,#00 ;一分到,21H单元清零

MOV A,22H

ADD A,#01H

DA A

MOV 22H,A

CJNE A,#60H,RETURN

MOV 22H,#00 ;一小时到,22H单元清零

MOV A,23H

ADD A,#01H

DA A

MOV 23H,A

CJNE A,#24H,RETURN MOV 30H,#03H MOV 31H,#00H ;预置闹铃分钟 ;预置闹铃小时

MOV 23H,#00H ;满24,23H单元清零 RETURN:

POP ACC

POP PSW

RETI

;/时间显示子程序/

DISPT: MOV A,22H

ANL A,#0FH

MOV 2AH,A ;时钟分的低位

MOV A,22H

ANL A,#0F0H

SWAP A

MOV 2BH,A ;时钟分的高位

MOV A,23H

ANL A,#0FH

MOV 2CH,A ;时钟时的低位 MOV A,23H

ANL A,#0F0H

SWAP A

MOV 2DH,A ;时钟时的高位

LED1: SETB P2.3

MOV A,2DH

MOV DPTR,#TAB

MOVC A,@A+DPTR

CLR P2.0 ;选通数码管1

MOV P0,A ;显示时钟时的十位部分 LCALL DELAY

LED2: SETB P2.0

MOV A,2CH

MOV DPTR,#TAB

MOVC A,@A+DPTR

CLR P2.1 ;选通数码管2

MOV P0,A ;显示时钟时的个位部分 LCALL DELAY

LED3: SETB P2.1

MOV A,2BH

MOV DPTR,#TAB

MOVC A,@A+DPTR

CLR P2.2 ;选通数码管3

MOV P0,A ;显示时钟分的十位部分

LCALL DELAY

LED4: SETB P2.2

MOV A,2AH

JB P1.6,TA

TA: MOV DPTR,#TAB

MOVC A,@A+DPTR

CLR P2.3 ;选通数码管4

MOV P0,A ;显示时钟分的个位部分

LCALL DELAY

RET

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共阳数码管的时间显示码

;/按键扫描程序/ 开关接P3口,判断按键情况

KEY: MOV P3,#0FFH

MOV A,P3

CPL A

ANL A,#2CH

JZ RETK ;无键按下则返回

LCALL DELAY ;延时消抖

MOV A,P3

CPL A

ANL A,#2CH

JZ RETK ;键盘去抖动

MOV R6,A ;将键值存入R6

LOOP1: LCALL DISPT;

MOV A,P3

CPL A

ANL A,#2CH

JNZ LOOP1 ;等待键释放

MOV A,R6

RETK: RET

;/按键处理子程序/根据按键情况进行处理

CASE: MOV A,R6

CLR P1.0 ;发光二极管LED1亮

JB ACC.2,SETH ;转调整时

JB ACC.3,SETM ;转调整分

JB ACC.5,SETR ;转闹铃设置

WAITCASE:LCALL DISPT ;无键按下时等待

LCALL KEY

JZ WAITCASE

;/时间调整程序/ 按键调整时间

SETT: LCALL DISPT

LCALL KEY

JZ SETT

MOV A,R6

JB ACC.2,SETH

JB ACC.3,SETM

JB ACC.5,KEYGO ;第二次按为确认离开

KEYGO: SETB P1.0 ;发光二极管LED1、LED2灭 SETB P1.1

RET

SETH: MOV A,23H ;调整时钟时,时加1 ADD A,#01H

DA A ;十进制调整

MOV 23H,A

CJNE A,#24H,HD ;判断是否到24,不到继续 MOV 23H,#00H ;到24时清零

HD: LJMP SETT

SETM: MOV A,22H ;分加1

ADD A,#01H

DA A ;十进制调整

MOV 22H,A

CJNE A,#60H,MD ;判断是否到1小时,不到继续 MOV 22H,#00H ;到1小时则清零

MD: LJMP SETT

;/闹铃时间调整按键扫描及处理子程序/

KEYR: MOV P3,#0FFH

MOV A,P3

CPL A

ANL A,#2CH

JZ RETK ;无键按下则返回

LCALL DISPR ;延时消抖

MOV A,P3

CPL A

ANL A,#2CH

JZ RETK ;键盘去抖动

MOV R6,A ;将键值存入R6

LJMP LOOPR

LOOPR: LCALL DISPR

MOV A,P3

CPL A

ANL A,#2CH

JNZ LOOPR MOV A,R6 AJMP RETK

;/设置闹铃时间/

SETR: SETB P1.0 CLR P1.1 LCALL DISPR

MOV R1,#00H MOV 53H,#03H LCALL KEYR JZ SETR

MOV A,R6

JB ACC.2,SETRH JB ACC.3,SETRM

JB ACC.5,KEYGO

SETRH: MOV A,31H ADD A,#01H

DA A MOV 31H,A

CJNE A,#24H,RHD MOV 31H,#00H RHD: LJMP SETR

SETRM: MOV A,30H ADD A,#01H

DA A MOV 30H,A

CJNE A,#60H,RMD MOV 30H,#00H RMD: LJMP SETR

;/闹钟设置显示子程序/ DISPR: MOV A,30H

ANL A,#0FH MOV 3AH,A MOV A,30H

ANL A,#0F0H SWAP A MOV 3BH,A

MOV A,31H ANL A,#0FH ;等待键释放 ;发光二极管LED1灭 ;发光二极管LED2亮,改显示状态 ;设置闹钟时重设R1,用于检测闹铃播放与否;重设闹铃次数 ;闹铃时间调整按键检测 ;第二次按为确认离开 ;闹钟时加1 ;十进制调整 ;判断是否到24,不到继续 ;到24时则清零 ;闹钟分加1 ;十进制调整 ;判断是否到1小时,不到继续 ;到1小时则清零 ;屏蔽高四位 ;保留低位送3AH ;屏蔽低四位 ;高四位与第四位交换 ;将保留的高4位送3BH

MOV 3CH,A ;低位 MOV A,31H

ANL A,#0F0H

SWAP A

MOV 3DH,A ;高位

LEDR1: SETB P2.3

MOV A,3DH

MOV DPTR,#TAB

MOVC A,@A+DPTR CLR P2.0

MOV P0,A

LCALL DELAY

LEDR2: SETB P2.0

MOV A,3CH

MOV DPTR,#TAB

MOVC A,@A+DPTR CLR P2.1

MOV P0,A

LCALL DELAY

LEDR3: SETB P2.1

MOV A,3BH

MOV DPTR,#TAB

MOVC A,@A+DPTR CLR P2.2

MOV P0,A

LCALL DELAY

LEDR4: SETB P2.2

MOV A,3AH

MOV DPTR,#TAB

MOVC A,@A+DPTR CLR P2.3

MOV P0,A

LCALL DELAY

RET

;/延时子程序/

DELAY: MOV R5,#2 D1: MOV R4,#250

D2: DJNZ R4,D2

DJNZ R5,D1

RET

;/闹铃检测程序/

RING: MOV A,23H ;比较时 CJNE A,31H,RETR

MOV A,22H ;比较分

CJNE A,30H,RETR

LCALL SING

RETR: RET

;/定时器T1中断子程序/

INTT1: PUSH PSW ;状态字入栈保护

PUSH ACC ;累加器入栈保护

INC 50H ;中断服务程序,中断计数器加1

MOV TH1,#0D8H ;装入计数初值,12M晶振,形成10MS中断 MOV TL1,#0F0H

POP ACC

POP PSW

RETI

;/响铃子程序/

SING: CJNE R1,#01H,SING1 ;判断是否已经闹铃过一次

LJMP RETS

SING1: SETB ET1

MOV 50H,#00H ;中断计数器清0

MOV 51H,#00H ;音符指针

MOV 52H,#00H ;节拍码指针

MOV 53H,#03H ;设置闹钟不退出响铃次数

GETNOT: MOV A,51H

MOV DPTR,#NOTE ;表头地址送DPTR

MOVC A,@A+DPTR ;查表取音符码

JZ ENDP ;是00H,则结束

MOV R6,A ;存R6

INC 51H

CJNE A,#0FFH,GETMET ;不为0FFH,转取节拍码

LJMP PAUSE ;转休止播放

LJMP GETNOT ;取音符码

GETMET: MOV A,52H

MOV DPTR,#METRE ;取节拍码首地址

MOVC A,@A+DPTR ;取节拍代码送R7

MOV R7,A

INC 52H

PLAY: SETB TR1 ;启动计数

CPL P2.4

LCALL KEY

JNZ RETS

MOV A,R6

MOV R3,A ;音符码存R3

LCALL DELAY1

MOV A,R7 ;取节拍码放A与中断计数比较

CJNE A,50H,PLAY ;中断计数器(50H)=R7否,不等继续循环 MOV 50H,#00H ;等于,则取下一代码

LCALL DISPT

CLR TR1

LJMP GETNOT

RETS: SETB P2.4 ;置位蜂鸣器,否则可能产生啸叫 MOV R1,#01H ;表明播放过一次

CLR A ;清除A,防止进入按键处理子程序 LJMP RETR

PAUSE: CLR TR1 ;休止100毫秒

MOV R2,#0DH

DELAY2: MOV R3,#0FFH

LCALL DELAY1

DJNZ R2,DELAY2

RET

ENDP: SETB P2.4

MOV R2,#0C7H ;歌曲结束,延时1秒后继续

END1M: MOV R3,#00H

LCALL DELAY1

DJNZ R2,END1M

DJNZ 53H,SING

RET

DELAY1: NOP ;R3为01H时,DELAY延时为20uS DELAY3: MOV R4,#02H

DELAY4: DJNZ R4,DELAY4

DJNZ R3,DELAY3

RET

NOTE: DB 60H,60H,7FH,98H,7FH,60H,60H,7FH,60H

DB 98H,7FH,60H,7FH,98H,60H,7FH,98H,50H

METRE: DB 20H,20H,20H,20H,20H,20H,20H,20H,20H

DB 20H,20H,20H,20H, 20H,20H,20H,20H,20H

END

www.99jianzhu.com/包含内容:建筑图纸、PDF/word/ppt 流程,表格,案例,最新,免费下载,施工方案、工程书籍、建筑论文、合同表格、标准规范、CAD图纸等内容。


TOP最近更新内容

    长城小学关爱留守儿童工作制度
    园林史名词解释
  • 上一篇:【2015】哥伦比亚:坚定信念,执着女孩喜迎offer雨
  • 下一篇:C语言程序设计总结