单片机中如何将BCD码拆开_单片机bcd码是什么

本文介绍了如何在单片机中将秒数和分钟数的BCD码拆分为十位和个位,并提供了相应的转换代码。同时,展示了倒计时程序,包括扫描显示、消抖处理和模式选择。通过P0口输出显示,P2.7-P2.4作为扫描控制,P1.5-P1.7作为输入控制键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BCD:;//BCD码转换,

;//把t_sec及T_min中的秒数和分钟数转换成BCD码,并存在min10,min,sec10,sec中

MOV A,T_SEC;

MOV B,#10

DIV AB

MOV SEC10,A

MOV SEC,B  MOV A,T_MIN;

MOV B,#10

DIV AB

MOV MIN10,A

MOV MIN,B  next:

POP PSW

POP ACC

RETIINT:

PUSH ACC

PUSH PSW

CLR EX0;关闭外中断,用于阻止mode键的抖动而引起的中断。

CALL DELAY10;延时10ms

JB P1.7,jNEXTT0;10ms后,如果是1,则是抖动,结束中断。并开中断,相对地址太远了,弄了一座桥。mov r0,#0FFH

;//以下是对p1.7-p1.5进行扫描

modekey:

mov a,temp1;用于存放临时数码

MOVC A,@A+DPTR;查表

MOV P0,A;用于调节过程中的显示。只显示一个位数

mov p2,temp;用于存放临时控制码

call DELY1

MOV P2,#00H

CALL DELY1;为了与使扫描的亮度一样,用三个延时。

CALL DELY1

CALL DELY1jb p1.7,upkey

call delay10;延时10ms

jb p1.7,modekey;如果10ms后是1,则说明是抖动干扰,

jnb p1.7,$;等待松开

jmp mode;到mode处理jnextt0:jmp nextt0upkey:jb p1.6,beginkey

call delay10

jb p1.6,upkey

jnb p1.6,$

jmp upbeginkey:

jb p1.5,modekey

call delay10

jb p1.5,beginkey

jnb p1.5,$

jmp begin mode:  ;用于选择所要调节的数码管 。读数为倒计时过程中的时刻的值

inc r0

mov a,r0 m0:

cjne a,#00h,m1 //显示十位分钟

mov a,tmin10

mov temp,#80h

jmp m   m1:

cjne a,#01h,m2

mov a,tmin

mov temp,#40h

jmp m   m2:

cjne a,#02h,m3

mov a,tsec10

mov temp,#20h

jmp m   m3:

cjne a,#03h,m4

mov a,tsec

mov temp,#10h

jmp m  m4:jmp NEXTT0

m:

mov temp1,a   jmp modekey//跳回模式选择循环 up:

up0:  ;把每个BCD码,进行加一操作,然后再合起来。存放到分钟和秒钟的计数器中

cjne r0,#00h,up1

mov a,tmin10;

inc a

cjne a,#10,upt0

mov a,#00h

upt0:

mov tmin10,a

jmp u

up1:

cjne r0,#01h,up2

mov a,tmin

inc a

cjne a,#10,upt1

mov a,#00h

upt1:

mov tmin,a

jmp u

up2:

cjne r0,#02h,up3

mov a,tsec10

inc a

cjne a,#6,upt2

mov a,#00h

upt2:

mov tsec10,a

jmp u

up3:

cjne r0,#03h,u

mov a,tsec

inc a

cjne a,#10,upt3

mov a,#00h

upt3:

mov tsec,a

u:

mov temp1,a  jmp upkey begin:

mov sec10,tsec10

mov min10,tmin10

mov sec,tsec

mov min,tmin  mov a,tsec10

mov b,#10

mul ab

add a,tsec

mov t_sec,a

mov a,tmin10

mov b,#10

mul ab

add a,tmin

mov t_min,a  setb TR0   NEXTT0:

SETB EX0 //重新开外中断

POP PSW

POP ACC

RETIDELY1: ;//延时1ms,用于消除鬼影

MOV R4,#2

D1:MOV R5,#248

DJNZ R5,$

DJNZ R4,D1

RET

DELAY10:;//延时10ms用于消抖

MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET

//用于程序

DISPTAB:DB 00111111b,00000110b,01011011b,01001111b,01100110b,01101101b,01111101b,00000111b,01111111b,01101111b

DISPTABDP:DB 10111111b,10000110b,11011011b,11001111b,11100110b,11101101b,11111101b,10000111b,11111111b,11101111b

END;//倒计时使用说明。输出口为P0,扫描口为P2.7-p2.4分别对应,分钟十位,分钟个位,钞钟十位,钞钟个位

;//键盘输入口为P1.5-begin,p1.6-up,p1.7-mode,p1.4-stop

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值