㈠ 用单片机控制4位LED数码管显示,先从左至右慢速动态扫描显示数字13572468 大佬求告知
主要程序如下:
uchar table[8]={1,3,5,7,2,4,6,8};//要显示的数字
uchar qian_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[qian_tab[ i]; delayms(5);wei1=1;
wei2=0;P0= table[qian_tab[ i+1];delayms(5); wei2=1;
wei3=0;P0= table[qian_tab[ i+2]; delayms(5);wei3=1;
wei4=0;P0= table[qian_tab[ i+3]; delayms(5);wei4=1;
}
}
}
㈡ c51单片机 怎样实现静态数码管动态显示的数字等于点亮LED灯的个数
c51单片机,静态数码管显示数字等于点亮LED灯的个数,这个很容易实野档郑现的。在P3口接8个LED灯,且负极接P3口,亮1个灯时,蠢渗P3=0xFE,再依次向左移位一次,从低位向左增加一个0,则亮灯数加一,同时,用一个变量计颂颂数,并送数码管显示就行了,一位共阳数码管接在P0口。仿真图如下。
㈢ 用51单片机控制4位led数码管,使其显示出想要的数字,程序怎样写,谢谢
模拟串口方式0:
#include"reg52.h"
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
P3_2=P3^2;
//模拟接受
sbit
P3_3=P3^3;
//模拟发送
uchar
code
smg[11]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//数码管编码0~
9
void
display(uchar
z);
main()
{
display(5);
display(0);
display(4);
while(1);
}
/************模拟串口显示**************/
void
display(uchar
z)
{
uchar
i;
uchar
temp;
temp
=
smg[z];
for(i=0;i<8;i++)
{
P3_3=
0;
if(temp
&
0x01)
P3_2=1;
else
P3_2
=
0;
P3_3=
1;
temp
=
temp>>1
;
}
}
串口}方式0:
void
display()
{
SM0=0;
SM1=0;
//方式0
for(i=0;i<3;i++)
{
SBUF=smg[snum[2-i]];
while(!TI)
;
TI=0;
delay(1000);
}
}
还有并行口方式
占用I/O不推荐
不过程序很简单
㈣ 用c语言单片机led灯显示数字“28”,如何编程
给LED编个数组,控制IO口,或者直接控制IO口,不过要看显示的28要多大,会占用比较多的IO口,道理和矩阵键盘差不多。
例程:
#include<reg52.h>//单片机头文件
voiddelay1ms(unsignedintms);//延时ms函数声明(可根据实际情况更改)
unsignedcharcodeled0[]={};//字码表,你自己把你要显示的字码放进去就可以了
voidmain()
{
unsignedcharw,i;
while(1)
{
//显示0
w=0x01;//行变量为第一行
for(i=0;i<8;i++)
{
P1=w;//行数据送P1口
P0=led0[i];
delayms(1);//列数据送P0口
w<<=1;//向下移动一行
}
}
}
voiddelay1ms(unsignedintms)
{
unsignedinti,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++)
}
㈤ 单片机开关控制LED数码管的编码
一,什么是数码管
数码管,其实就是由多个led组合在一起的组合显示块;有共阴极的,也有共阳极的。使用的数码管不同,里面包含的led个数也会有相关的差异。我们通常使用的数码管,里面有8个led灯,大家可以参照生活中的数码管器件就一目了然了,你会发现,数码管显示的每一个数字或字母,都是一段一段组合拼接起来的,并不是像写的那样圆滑。其中,组合的每一个段,就是一个led灯。
二,点亮一个数码管
2.1.在点亮数码管之前,你还必须弄清楚,改数码管的接是共阴极还是共阳极的接法;其次,还得弄清楚是那几个(或一个) IO口是IO口 的断选位(也就是控制显示哪一个数码管,通常由IO口控制一个译码器来实现,因为这样更节约IO口资源)。
2.2.弄清楚断选位之后,还得知道,是哪些IO口控制我们的数码管上的led;
比如:
P0.0 控制数码管上的led.0;(注意:数码管上对应的led位,可以参照原理图上的或查阅相关资料获得,这里仅仅举列)
P0.1-->led.1 P0.2-->led2 ......
2.3.想要点亮数码管很容易,只要开启对应的数码管断选位,再设置数码管上led的值为点亮(有的数码管是共阴极接法,有的是共阳极接法,根据具体的设计,给出相关的高或低电平即可)就OK了。但是,我们要在数码管上显示我们想要的数字增么办呢?这个时候,就是考研创造力的时候了,有的数码管的资料会直接给出它的真值表,但有的却不一定找得到。在这个时候,我们就得根据我们想要显示的数字,点亮并熄灭对应数码管上的led来实现。(推荐:你可以自己先实验,找出0-9,或其他想要显示的字符所对应的IO口的值,来保存起来,这样你就可以重复利用啦!)
三,点亮多个数码管
3.1 我们想要点亮多个数码管,首先可以根据2.1,弄清楚你的数码管的断选位,然后周期性的改变断选位的值,以此动态逐个显示你的数码管。
3.2 在显示多个数码管时,建议周期大于100hz,这样人眼难以识别起关和开的瞬间,我们看起来就像时很多个数码管同时点亮了一样。
四,动态显示数码管
4.1 ,在动态显示数码管的值时,建议先根据2.2和2.3,把对应的数码管显示参数照准,并保存下来,这样你用起来也方便。
4.2, 动态显示数码管,我们可以在规定的时间周期,改变数码管对应led的开关个数来实现,比如说:
0 在数码管中显示的值为0xc0 1是0xf9
那么我们就可以在规定的时间里,切换该值,从而达到动态效果。
4.3 我们应该注意的时,扫描数码管(即显示多个数码管)应该与设置数码管的值(数码管中led的状态更新)区分开,扫描周期我们可以放短一点,而改变它的值的周期我们可以一秒或者是2秒改变一次。
4.4 消除余晖,大家实验后,可能会发现,你显示的值有的时候并不是想要的,它会跳动或者是亮灭不清晰,这个我们就叫做余晖效应。
产生余晖效应的原因是因为你在选则下一个数码管的时候,还保留了上一个数码管的显示值,所以我们消除余晖,只需要在改变数码管显示值的时候,先关闭所有数码管的显示,在值跟新完成后我们再打开显示。这里你不用担心关闭和开启会有闪烁,更新值的时间会很短,肉眼时几乎察觉不到滴。
5,示列代码
/*
芯片:stc89c52
器件:38译码器等
编译环境:UV4,C语言
*/
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[] = {undefined
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};//数码管显示值真值表缓存数组
unsigned char LedBuff[6] = {undefined
0xff,0xff,0xff,0xff,0xff,0xff
};//数码管显示值缓存数组
void main()
{undefined
unsigned char i =0;
unsigned int cnt = 0;
unsigned long sec = 0;
ENLED = 0;
ADDR3 = 1;
TMOD = 0x01;
TH0 = 0xfc;
TL0 = 0x67;
TR0 = 1;
while(1)
{undefined
if(TF0==1)
{undefined
TF0 = 0;
TH0 = 0xfc;
TL0 = 0x67;
cnt++;
if(cnt>=1000)
{undefined
cnt = 0;
sec++;
LedBuff[0] = LedChar[sec%10];
LedBuff[1] = LedChar[sec/10%10];
LedBuff[2] = LedChar[sec/100%10];
LedBuff[3] = LedChar[sec/1000%10];
LedBuff[4] = LedChar[sec/10000%10];
LedBuff[5] = LedChar[sec/100000%10];
}
switch(i)
{undefined
case 0:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=LedBuff[0];ENLED = 0;break;
case 1:ENLED = 1;ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=LedBuff[1];ENLED = 0;break;
case 2:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=LedBuff[2];ENLED = 0;break;
case 3:ENLED = 1;ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=LedBuff[3];ENLED = 0;break;
case 4:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=LedBuff[4];ENLED = 0;break;
case 5:ENLED = 1;ADDR2=1;ADDR1=0;ADDR0=1;i=0;P0=LedBuff[5];ENLED = 0;break;
default:break;
}
}
}
}
以上代码,仅供参考,您需要根据自己原理图的设计来实现。