51单片机简洁版+复杂版汇编数字钟.docx
- 文档编号:23985819
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:19
- 大小:288.33KB
51单片机简洁版+复杂版汇编数字钟.docx
《51单片机简洁版+复杂版汇编数字钟.docx》由会员分享,可在线阅读,更多相关《51单片机简洁版+复杂版汇编数字钟.docx(19页珍藏版)》请在冰豆网上搜索。
51单片机简洁版+复杂版汇编数字钟
51单片机简洁版汇编数字钟
/**********************************************
程序名称:
51单片机数码管电子钟汇编程序
简要说明:
实现24小时制电子钟,8位数码管显示,显示时分秒显示格式:
23-59-59(小时十位如果为0则不显示)
P0口输出段选信号,P2口输出位选信号
P1.0为调时按钮,P1.1为调分按钮;晶振12M
编写:
JiangX.net
**********************************************/
ORG0000H;程序入口地址
LJMPSTART
ORG000BH;定时器0中断入口地址
LJMPTIMER_0
K1BITP1.0;定义调时按键
K2BITP1.1;定义调分按键
START:
MOVTMOD,#01H;定时器0,工作模式1
MOVTH0,#03CH
MOVTL0,#0B0H;赋初值,定时50ms
SETBEA;开中断总开关
SETBTR0;开启定时器0
SETBET0;定时器0中断允许位
MOVR6,#0;用于控制走时的基准时钟源,计中断次数
MOVR5,#0;R5用于控制扫描按键的时间间隔
MOV20H,#0;秒个位寄存器清零
MOV21H,#0;秒十位寄存器清零
MOV22H,#0;分个位寄存器清零
MOV23H,#0;分十位寄存器清零
MOV24H,#0;时个位寄存器清零
MOV25H,#0;时十位寄存器清零
LJMPDISPLAY
TIMER_0:
CLREA
INCR6
INCR5
MOVTH0,#03CH
MOVTL0,#0B0H;重新赋初值,定时50ms
SETBEA
RETI
ADD_TIME:
CJNER6,#20,EXIT;定时器中断20次,1秒到
MOVR6,#0
INC20H
MOVA,20H
CJNEA,#10,EXIT;如果秒个位等于10,清零
MOV20H,#00H
INC21H
MOVA,21H
CJNEA,#6,EXIT;如果秒十位等于6,清零
MOV21H,#00H
INC22H
MIN:
MOVA,22H
CJNEA,#10,EXIT;如果分个位等于10,清零
MOV22H,#00H
INC23H
MOVA,23H
CJNEA,#6,EXIT;如果分十位等于6,清零
MOV23H,#00H
INC24H
HOUR:
MOVA,25H
CJNEA,#2,LOOP;如果时十位等于2,检查时个位
MOVA,24H
CJNEA,#4,EXIT;如果时个位等于4,清零
MOV24H,#00H;清零时个位
MOV25H,#00H;清零时十位
LJMPEXIT
LOOP:
MOVA,24H
CJNEA,#10,EXIT;如果时个位等于10,清零
MOV24H,#00H
INC25H
LJMPEXIT
EXIT:
LJMPDISPLAY;刷新完毕,跳转到显示
DISPLAY:
MOVDPTR,#TABLE
MOVA,20H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.7
LCALLDELAY
SETBP2.7;显示秒个位
MOVA,21H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.6
LCALLDELAY
SETBP2.6;显示秒十位
MOVA,#0BFH
MOVP0,A
CLRP2.5
LCALLDELAY
SETBP2.5;显示“-”
MOVA,22H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.4
LCALLDELAY
SETBP2.4;显示分个位
MOVA,23H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.3
LCALLDELAY
SETBP2.3;显示分十位
MOVA,#0BFH
MOVP0,A
CLRP2.2
LCALLDELAY
SETBP2.2;显示“-”
MOVA,24H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.1
LCALLDELAY
SETBP2.1;显示时个位
MOVDPTR,#TABLE1;该位使用TABLE1以消除前置0
MOVA,25H
MOVCA,@A+DPTR
MOVP0,A
CLRP2.0
LCALLDELAY
SETBP2.0;显示时十位
CJNER5,#4,EXIT0;当R5到4时,扫描按键
MOVR5,#0
KEY_SCAN:
JNBK1,ADD_HOUR
JNBK2,ADD_MIN
LJMPADD_TIME;无键按下,跳至走时
ADD_HOUR:
INC24H;小时加1
LJMPHOUR;更新
ADD_MIN:
INC22H;分钟加1
LJMPMIN;更新
EXIT0:
LJMPADD_TIME
DELAY:
MOVR7,#150;扫描延时
DJNZR7,$
RET
TABLE:
;数码管字形显示编码表
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;字形显示编码
TABLE1:
DB0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;小时位的十位数编码,该位如果为0则不显示
END;程序结束
硬件电路如图(点击放大):
汇编程序设计:
/**************************************************************
程序名称:
51单片机8位数码管数字钟汇编程序
简要说明:
实现24小时制电子钟,8位数码管显示,显示时分秒
显示格式:
23-59-59(小时十位如果为0则不显示)
通过3只按键来调整时间
调整选择键SET_KEY:
P1.0;通过选择键选择调整位,选中位闪烁
增加键ADD_KEY:
P1.1;按一次使选中位加1
减少键DEC_KEY;P1.2;按一次使选中位减1
如果长按ADD_KEY或DEC_KEY,识别后则进行调时快进,此时停止闪烁
如果选中位是秒,则按增加键或减少键都是将秒清零
P0口输出数码管段选信号,P2口输出数码管位选信号。
晶振12M
编写:
JiangX.net
最后更新:
08/12/31晚
**************************************************************/
ORG0000H;程序入口地址
LJMPSTART
ORG000BH;定时器0中断入口地址
LJMPTIMER_0
ORG0300H
/*****程序开始,初始化*****/
START:
SETB48H;使用一个bit位用于调时闪烁标志
SETB47H;使用一个bit位用于产生脉冲用于调时快进时基
MOVR1,#0;调整选择键功能标志:
0正常走时、1调时、2调分、3调秒
MOV20H,#00H;用于控制秒基准时钟源的产生
MOV21H,#00H;清零秒寄存器
MOV22H,#00H;清零分寄存器
MOV23H,#00H;清零时寄存器
MOV24H,#00H;用于控制调时闪烁的基准时钟的产生
MOVIP,#02H;IP,IE初始化
MOVIE,#82H
MOVTMOD,#01H;设定定时器0工作方式1
MOVTH0,#3CH
MOVTL0,#0B0H;赋定时初值,定时50ms
SETBTR0;启动定时器0
MOVSP,#40H;重设堆栈指针
/*****主程序*****/
MAIN:
LCALLDISPLAY;调用显示子程序
LCALLKEY_SCAN;调用按键检测子程序
JZMAIN;无键按下则返回重新循环
LCALLSET_KEY;调用选择键处理子程序
JB46H,MAIN;如果已进行长按调整(调时快进),则不再执行下面的单步调整
LCALLADD_KEY;调用增加键处理子程序,加一
LCALLDEC_KEY;调用减少键处理子程序,减一
LJMPMAIN;重新循环
/*****定时器中断服务程序*****/
TIMER_0:
PUSHACC
PUSHPSW;保护现场
MOVTH0,#3CH
MOVTL0,#0B0H;重新赋定时初值
CPL47H;产生脉冲用于调时快进时基
INC24H
MOVA,24H
CJNEA,#10,ADD_TIME;产生0.5秒基准时钟,用于调时闪烁
CPL48H;取反调时闪烁标志位
MOV24H,#00H
ADD_TIME:
;走时
INC20H
MOVA,20H
CJNEA,#20,RETI1;产生1秒基准时钟
MOV20H,#00H;一秒钟时间到,清零20H
MOVA,21H
ADDA,#01H
DAA;作十进制调整
MOV21H,A
CJNEA,#60H,RETI1
MOV21H,#00H;一分钟到
MOVA,22H
ADDA,#01H
DAA
MOV22H,A
CJNEA,#60H,RETI1
MOV22H,#00H;一小时到
MOVA,23H
ADDA,#01H
DAA
MOV23H,A
CJNEA,#24H,RETI1
MOV23H,#00H;到24点,清零小时
RETI1:
POPPSW
POPACC;恢复现场
RETI;中断返回
/*****显示处理*****/
DISPLAY:
MOVA,21H;秒
ANLA,#0FH
MOV2FH,A;转换出秒个位,存入2FH
MOVA,21H
ANLA,#0F0H
SWAPA
MOV2EH,A;转换出秒十位,存入2EH
JB46H,MIN;如果长按按键(调时快进),则跳过闪烁处理程序
CJNER1,#3,MIN;如果R1为3,闪烁秒位待调整
JB48H,MIN
MOV2FH,#0AH;使该位为10,查表得到使该位不显示的输出
MOV2EH,#0AH
MIN:
MOVA,22H;分
ANLA,#0FH
MOV2DH,A;转换出分个位,存入2DH
MOVA,22H
ANLA,#0F0H
SWAPA
MOV2CH,A;转换出分十位,存入2CH
JB46H,HOUR;如果长按按键(调时快进),则跳过闪烁处理程序
CJNER1,#2,HOUR;如果R1为2,闪烁分位待调整
JB48H,HOUR
MOV2DH,#0AH;使该位为10,查表得到使该位不显示的输出
MOV2CH,#0AH
HOUR:
MOVA,23H;时
ANLA,#0FH
MOV2BH,A;转换出时个位,存入2BH
MOVA,23H
ANLA,#0F0H
SWAPA
MOV2AH,A;转换出时十位,存入2AH
JB46H,DISP;如果长按按键(调时快进),则跳过闪烁处理程序
CJNER1,#1,DISP;如果R1为1,闪烁时位待调整
JB48H,DISP
MOV2BH,#0AH;使该位为10,查表得到使该位不显示的输出
MOV2AH,#0AH
/*****数码管动态扫描显示*****/
DISP:
MOVDPTR,#TABLE
MOVA,2FH
MOVCA,@A+DPTR
MOVP0,A
CLRP2.7
LCALLDELAY
SETBP2.7;显示秒个位
MOVA,2EH
MOVCA,@A+DPTR
MOVP0,A
CLRP2.6
LCALLDELAY
SETBP2.6;显示秒十位
MOVA,#0BFH
MOVP0,A
CLRP2.5
LCALLDELAY
SETBP2.5;显示“-”
MOVA,2DH
MOVCA,@A+DPTR
MOVP0,A
CLRP2.4
LCALLDELAY
SETBP2.4;显示分个位
MOVA,2CH
MOVCA,@A+DPTR
MOVP0,A
CLRP2.3
LCALLDELAY
SETBP2.3;显示分十位
MOVA,#0BFH
MOVP0,A
CLRP2.2
LCALLDELAY
SETBP2.2;显示“-”
MOVA,2BH
MOVCA,@A+DPTR
MOVP0,A
CLRP2.1
LCALLDELAY
SETBP2.1;显示时个位
MOVDPTR,#TABLE1;该位使用TABLE1以消除前置0
MOVA,2AH
MOVCA,@A+DPTR
MOVP0,A
CLRP2.0
LCALLDELAY
SETBP2.0;显示时十位
RET
/*****按键检测子程序*****/
KEY_SCAN:
CLR46H;关闭长按调整(调时快进)标志
MOVP1,#0FFH;将P1口设置成输入状态
MOVA,P1
CPLA
ANLA,#07H;P1口低3位连接3个按键,只判断该3位
JZEXIT_KEY;无键按下则返回
LCALLDELAY;延时去抖动
MOVA,P1;重新判断
CPLA
ANLA,#07H
JZEXIT_KEY;键盘去抖动
MOVR5,A;临时将键值存入R5
MOVR4,#00H;用于控制调时快进速度
;设置为00H是为了在进入长按处理前加长延时区分用户的长按与短按,防止误快进
LOOP:
;进入长按处理
LCALLDISPLAY;使长按时显示正常
MOVA,P1
CPLA
ANLA,#07H
JB47H,LOOP1
INCR4;调时快进间隔时间基准加1
LOOP1:
CJNER1,#03H,LOOP2;如果调秒时长按,则不处理
LJMPLOOP3
LOOP2:
CJNER4,#99H,LOOP3
MOVR4,#70H;确认用户长按后,重新设定起始值,加快调时快进速度
SETB46H;长按调整(调时快进)标志
LCALLADD_KEY
LCALLDEC_KEY
LOOP3:
JNZLOOP;等待键释放
MOVA,R5;输出键值
RET
EXIT_KEY:
RET
/*****延时子程序*****/
DELAY:
MOVR7,#150
DJNZR7,$
RET
/*****选择键处理子程序*****/
SET_KEY:
CJNER5,#01H,EXIT;选择键键值
INCR1;调整选择功能标志加一
CJNER1,#4,EXIT
MOVR1,#0
MOV24H,#00H;调时闪烁基准清零
RET
/*****增加键处理子程序*****/
ADD_KEY:
CJNER5,#02H,EXIT;增加键键值
CJNER1,#01H,NEXT1;选择键功能标志为1,调时,否则跳出
MOVA,23H
ADDA,#01H
DAA
MOV23H,A
CJNEA,#24H,EXIT
MOV23H,#00H
NEXT1:
CJNER1,#02H,NEXT2;选择键功能标志为2,调分,否则跳出
MOVA,22H
ADDA,#01H
DAA
MOV22H,A
CJNEA,#60H,EXIT
MOV22H,#00H
NEXT2:
CJNER1,#03H,EXIT;选择键功能标志为3,调秒,否则跳出
MOV21H,#00H;如增加键按下直接清零秒
RET
/*****减少键处理子程序*****/
DEC_KEY:
CJNER5,#04H,EXIT;减少键键值
CJNER1,#01H,NEXT3;选择键功能标志为1,调时,否则跳出
MOVA,23H
ADDA,#99H
DAA
MOV23H,A
CJNEA,#99H,EXIT
MOV23H,#23H
NEXT3:
CJNER1,#02H,NEXT4;选择键功能标志为2,调分,否则跳出
MOVA,22H
ADDA,#99H
DAA
MOV22H,A
CJNEA,#99H,EXIT
MOV22H,#59H
NEXT4:
CJNER1,#03H,EXIT;选择键功能标志为3,调秒,否则跳出
MOV21H,#00H;如较少键按下直接清零秒
RET
/*****万用返回子程序*****/
EXIT:
RET
/*****数码管字形编码表*****/
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;字形显示编码
TABLE1:
DB0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;小时位的十位数编码,该位如果为0则不显示
END;程序结束
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 简洁 复杂 汇编 数字