首页 > 电脑 > 用单片机控制4位LED数码管显示先从左至右慢速动态扫描显示数字1357

用单片机控制4位LED数码管显示先从左至右慢速动态扫描显示数字1357

电脑 2022-10-17

用单片机控制4位LED数码管显示,先从左至右慢速动态扫描显示数字13572468 大佬求告知

主要程序如下: uchar table[8]={1,3,5,7,2,4,6,8};//要显示的数字 uchar qiduan_tab[10]={.........};//七段码 while(1) { for(i=0;i<5;i++)//先显示1357,第二次显示3572 第三次显示5724 { for(j=0;j<20;j++)//刷新20次约0.4秒,推进一位 { wei1=0;P0= table[qiduan_tab[ i]; delayms(5);wei1=1; wei2=0;P0= table[qiduan_tab[ i+1];delayms(5); wei2=1; wei3=0;P0

用单片机控制4位LED数码管显示,先从左到右慢速动态扫描显示数字“1357”,“2468”,然后在

首先你要明确这是要在实验板上实现呢?还是只是画个仿真来实现呢? 那要仿真,首先你要画个仿真图,仿真图也不会画吗? 如果没有实验板,也没有仿真图,写了程序也没有用,那怎么执行程序呢?

如何利用单片机让4位数码管显示?

程序如下(用的是STC89C52芯片):

#include//52系列单片机头文件

#defineucharunsignedchar

#defineuintunsignedint

uintx,y;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//共阴极数码管编码

voiddisplay(uchar,uchar,uchar,uchar);//声明子函数

voiddelay(int);//声明子函数

voidmain()

{

while(1)

{

display(1,2,3,4);//主程序始终调用数码管显示子程序

}

}

voiddisplay(uchara,ucharb,ucharc,uchard)

{

P2=0xef;

P0=table[a];//给第一个数码管送"a"

delay(1);//延时1ms

P2=0xdf;

P0=table[b];//给第二个数码管送"b"

delay(1);//延时1ms

P2=0xbf;

P0=table[c];//给第三个数码管送"c"

delay(1);//延时1ms

P2=0x7f;

P0=table[d];//给第三个数码管送"d"

delay(1);//延时1ms

}

voiddelay(uintz)//延时子函数

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

扩展资料

led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。

位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

参考资料来源:百度百科-数码管

单片机按键控制4个LED,第一次按从左到右亮,第二次按从右到左亮。跪求程序!!我是stc89c52的。急!!

我这个是8个流水灯的,汇编的。除了你要的2种花样外,还有另2种花样。你可以参考

;4花样流水灯2010.05.11

ANEQUP3.0

ORG0000H

AJMPMAIN

ORG0003H

AJMPEX0INT

ORG0030H

MAIN:SETBEA

SETBEX0

SETBIT0

ACALLDISP

AJMPMAIN

EX0INT:INCR0

CJNER0,#5,RTI

MOVR0,#1

RTI:RETI

DISP:MOVR1,#8

LED1:CJNER0,#1,LED2

AJMPLED10

LED2:CJNER0,#2,LED3

AJMPLED20

LED3:CJNER0,#3,LED4

AJMPLED30

LED4:CJNER0,#4,LEDRT

AJMPLED40

LEDRT:RET

LED10:MOVA,#0FFH

MOVP1,A

ACALLDLY200

MOVA,#0FEH

LED101:MOVP1,A

ACALLDLY200

RLA

DJNZR1,LED101

AJMPDISP

LED20:;MOVR1,#8

MOVA,#0FFH

MOVP1,A

ACALLDLY200

MOVA,#7FH

LED201:MOVP1,A

ACALLDLY200

RRA

DJNZR1,LED201

AJMPDISP

LED30:MOVDPTR,#TAB

MOVA,R1

DECA

LED301:MOVCA,@A+DPTR

MOVP1,A

LCALLDLY200

MOVA,R1

DJNZR1,LED301

AJMPDISP

LED40:MOVDPTR,#TAB

MOVA,R1

DECA

LED401:MOVCA,@A+DPTR

CPLA

MOVP1,A

LCALLDLY200

MOVA,R1

DJNZR1,LED401

AJMPDISP

DLY200:;延时200ms

MOVR4,#04H

DL01:

MOVR3,#74H

DL00:

MOVR2,#0D6H

DJNZR2,$

DJNZR3,DL00

DJNZR4,DL01

NOP

RET

TAB:DB00000000B

DB00011000B

DB00111100B

DB01111110B

DB11111111B

DB01111110B

DB00111100B

DB00011000B

END

请问51单片机数码管怎么从左到右显示出我想要的数?比如1572942(没有规律)这部分该怎么写?

能显示1234567,说明你已经会动态扫描了;只是显示的是固定的值。你现在要做的就是实现任意数,那么你首先需要做一个数据,你看根据你显示的数值是0-9还是还有其他字符,我就以你只显示纯数字吧,就是0-9 ,那么你需要定义一个数组,有10个成员,从0-9 分别对应LED的段码, 这个段码具体根据你使用共阴或者共阳LED以及你IO口的接法有关,我就以你能显示1234567来说,你定义LEDTABLE[10]={ A,B,C,D,E,F,G,H,I,J},其中B=你显示1时的数据(段码),其他的雷同;把这十个数据都弄对,然后显示任意数的时候只需用这个数组的数据即可;比如显示312,那么第三个显示LE

标签:单片机 信息技术 led 数码 软件

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18