你好,我不懂你的电路图是怎么的,但是数码管的小数点是这样的,P0=table1[ge];你这个是寻址的后面加个点就得了,给为 P0=table1[ge]+0x80;或者P0=table1[ge]|0x80应该都一样的;
0x80就是那个点亮,不懂你是公阳还是共阴的,如果是公阳的是0x7f。。。和共阴的相反
怎么用单片机数码管显示十进制???
4位数码管最大显示9999小于10000,所以可以按如下处理:
千位:n/1000
百位:(n/100)%10
十位:(n/10)%10
各位:n%10
单片机驱动数码管显示问题
前不久刚弄的类似显示程序,调整了下给你,看看有用不。电路图是4位显示的,程序已经改成了2位显示。
;单片机内存分配申明!
TEMPER_L EQU 28H ;用于保存计数值
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
ORG 0000H
LJMP MAIN
ORG 0040H
MAIN:
MOV SP,60H
MOV A,#00H
MOV P2,A
STAR:
MOV TEMPER_L,#0 ;初始化计数器,从0开始
stlop:
ACALL DISPLAY;调用显示子程序
INC TEMPER_L;对计数器加1
MOV A,TEMPER_L
CJNE A,#100,NEXT ;判断计数器是否满100?
MOV TEMPER_L,#0;满100就清零
NEXT: LJMP stlop;不满就循环执行
DISPLAY:
MOV A,TEMPER_L
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在a
MOV A_BIT,B ;个位在b
MOV DPTR,#NUMTAB ;指定查表启始地址
DPL1: MOV R7,#250 ;显示250次,数越小,显示频率越高,递增的越快。
DPLOP: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
SETB P2.3 ;开个位显示
ACALL D1MS ;显示1ms
CLR P2.3
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
SETB P2.2 ;开十位显示
ACALL D1MS ;显示1ms
CLR P2.2
DJNZ R7,DPLOP ;250次没完循环
RET
;1MS延时(按12MHZ算)
D1MS: MOV R5,#80
DJNZ R5,$
RET
;7段数码管0~9数字的共阳显示代码
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
END