单片机驱动数码管显示问题
前不久刚弄的类似显示程序,调整了下给你,看看有用不。电路图是4位显示的,程序已经改成了2位显示。
;单片机内存分配申明!
TEMPER_LEQU28H;用于保存计数值
A_BITEQU20H;数码管个位数存放内存位置
B_BITEQU21H;数码管十位数存放内存位置
ORG0000H
LJMPMAIN
ORG0040H
MAIN:
MOVSP,60H
MOVA,#00H
MOVP2,A
STAR:
MOVTEMPER_L,#0;初始化计数器,从0开始
stlop:
ACALLDISPLAY;调用显示子程序
INCTEMPER_L;对计数器加1
MOVA,TEMPER_L
CJNEA,#100,NEXT;判断计数器是否满100?
MOVTEMPER_L,#0;满100就清零
NEXT:LJMPstlop;不满就循环执行
DISPLAY:
MOVA,TEMPER_L
MOVB,#10;10进制/10=10进制
DIVAB
MOVB_BIT,A;十位在a
MOVA_BIT,B;个位在b
MOVDPTR,#NUMTAB;指定查表启始地址
DPL1:MOVR7,#250;显示250次,数越小,显示频率越高,递增的越快。
DPLOP:MOVA,A_BIT;取个位数
MOVCA,@A+DPTR;查个位数的7段代码
MOVP0,A;送出个位的7段代码
SETBP2.3;开个位显示
ACALLD1MS;显示1ms
CLRP2.3
MOVA,B_BIT;取十位数
MOVCA,@A+DPTR;查十位数的7段代码
MOVP0,A;送出十位的7段代码
SETBP2.2;开十位显示
ACALLD1MS;显示1ms
CLRP2.2
DJNZR7,DPLOP;250次没完循环
RET
;1MS延时(按12MHZ算)
D1MS:MOVR5,#80
DJNZR5,$
RET
;7段数码管0~9数字的共阳显示代码
NUMTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
END
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇