八个数码管共用一个总线,怎样让数码管显不一样的数
最近在学习单片机,单片机的MCU是STC89C52RC,看那图纸上八个数码管是共用一个数据总线,现在要几个管子同时都显,并且显的数不一样,哪位高手指教下~~!!(最好是用...
最近在学习单片机,单片机的MCU是STC89C52RC,看那图纸上八个数码管是共用一个数据总线,现在要几个管子同时都显,并且显的数不一样,哪位高手指教下~~!!(最好是用C写下)
数码管是共阳的 展开
数码管是共阳的 展开
展开全部
可以循环扫描。有不同的程序,你只要设置合适的扫描时间,由于LED余晖作用,人眼看见都亮。
ORG 0100H
MAIN: MOV R3,#00H ;字型码初始地址
LOOP: MOV DPRT,#TABLE ;字型码送数据指针
MOV A,R3
MOV A,@A+DPTR
MOV P1,A ;送显示
MOV R4,#0E8H ;循环显示某个字培陆碧符1S
DELAY: ACALL DISPLAY ;显示
DJNZ R4,#DELAY ;延时显示时间示到继续
INC R3 ;显示下个字符
CJNE R3,#0AH,LOOP ;示悉唯显示到9续续
AJMP MAIN ;返回主程序
DISPLAY:MOV R1,#08H ;共显示配举8位LED
MOV R5,#00H ;从第一位开始显示
DISP: MOV A,R5
MOV P3,A ;送地址数据
ACALL DELAY1 ;送位显示15MS
INC R5 ;指向下一位LED
DJNZ R1,DISP ;8位未显示完继续
RET
DELAY1: MOV R6,#10H ;延时子程序
LOOP1: MOV R7,#38H
LOOP2: DJNZ R7,LOOP2
DJNZ R6,LOOP1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END ;程序结束
ORG 0100H
MAIN: MOV R3,#00H ;字型码初始地址
LOOP: MOV DPRT,#TABLE ;字型码送数据指针
MOV A,R3
MOV A,@A+DPTR
MOV P1,A ;送显示
MOV R4,#0E8H ;循环显示某个字培陆碧符1S
DELAY: ACALL DISPLAY ;显示
DJNZ R4,#DELAY ;延时显示时间示到继续
INC R3 ;显示下个字符
CJNE R3,#0AH,LOOP ;示悉唯显示到9续续
AJMP MAIN ;返回主程序
DISPLAY:MOV R1,#08H ;共显示配举8位LED
MOV R5,#00H ;从第一位开始显示
DISP: MOV A,R5
MOV P3,A ;送地址数据
ACALL DELAY1 ;送位显示15MS
INC R5 ;指向下一位LED
DJNZ R1,DISP ;8位未显示完继续
RET
DELAY1: MOV R6,#10H ;延时子程序
LOOP1: MOV R7,#38H
LOOP2: DJNZ R7,LOOP2
DJNZ R6,LOOP1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END ;程序结束
展开全部
采用循环扫描的方法。
即森郑循环点亮此没颂每盏灯,在一个特定的时间点,只有一盏灯是亮的,此时数据线的数据就是那盏灯的数据,循环点亮每一盏灯,因为速度很快,给人眼的感觉就是几盏灯同时亮。
下面是察贺以前写的程序,给你参考一下:
/**********************************************************
Function: pos_display(uchar *c)
Description:每1MS扫描一次LED位置
Calls: none
Called By: initial()
Input: *c
Output: none
***********************************************************/
void pos_display(uchar *c)
{
if (pos ==0 )
{
L1 = 0;
L2 = 1;
L3 = 1;
L4 = 1;
}
if (pos == 1)
{
L1 = 1;
L2 = 0;
L3 = 1;
L4 = 1;
}
if (pos == 2)
{
L1 = 1;
L2 = 1;
L3 = 0;
L4 = 1;
}
if (pos == 3)
{
L1 = 1;
L2 = 1;
L3 = 1;
L4 = 0;
}
P0 = *c;
pos++;
if (pos == 4)
{
pos = 0;
}
}
即森郑循环点亮此没颂每盏灯,在一个特定的时间点,只有一盏灯是亮的,此时数据线的数据就是那盏灯的数据,循环点亮每一盏灯,因为速度很快,给人眼的感觉就是几盏灯同时亮。
下面是察贺以前写的程序,给你参考一下:
/**********************************************************
Function: pos_display(uchar *c)
Description:每1MS扫描一次LED位置
Calls: none
Called By: initial()
Input: *c
Output: none
***********************************************************/
void pos_display(uchar *c)
{
if (pos ==0 )
{
L1 = 0;
L2 = 1;
L3 = 1;
L4 = 1;
}
if (pos == 1)
{
L1 = 1;
L2 = 0;
L3 = 1;
L4 = 1;
}
if (pos == 2)
{
L1 = 1;
L2 = 1;
L3 = 0;
L4 = 1;
}
if (pos == 3)
{
L1 = 1;
L2 = 1;
L3 = 1;
L4 = 0;
}
P0 = *c;
pos++;
if (pos == 4)
{
pos = 0;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
动态
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询