本文目录一览:
四位数码管如何显示
使用LED时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段. 具体看图。
根据你要显示的东西,需要对数码管进行编码,主要是设置 位选(选中哪个数码管显示) 和 段选(数码管显示的具体内容)。
数码管的亮暗就是 发光二极管 导通与截止的过程,参照图。
另外数码管有静态显示和动态显示2种,4位的话一般都是采用动态显示。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。-4路数码动态显示
下面给出一个程序你参考下:
/*利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。到此保持住。(设晶振12MHZ)*/-4路数码动态显示
#include reg52.h
#include intrins.h
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x89,0x86,0xc7,0xc0,0xff};//0~9、hello
uchar temp,t0,t1,aa,bb,cc,bai,shi,ge,flag,flag1;
uint shu;
void init();
void display(uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uint z)
{
uint t1,y;
for(t1=z;t10;t1--)
for(y=110;y0;y--);
}
void main()
{
init();
while(1)
{
if(flag1!=1)
display(7,6,5,bai,shi,ge); //计数
else
display(10,11,12,12,13,14); //保持 hello
}
}
void init()
{
shu=432;
temp=0xfe;
P1=temp;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(flag!=1)//说明计数没有结束
{
if(t0==10)
{
t0=0;
temp=_crol_(temp,1);
P1=temp;
}
}
else
{
if(t0%10==0)//每500ms闪一次500*10(正好闪3次)
P1=~P1;
if(t0==60)//3miao 后关闭灯
{
TR0=0;
P1=0xff;
flag1=1;
}
}
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t1++;
if(t1==2)
{
t1=0;
shu--;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu==398)
{
TR0=0;//定时器关闭
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;//重启定时器
flag=1;//标志位定义
t0=0;//t0清零
P1=0xff;//关闭流水灯
TR1=0;//定时器关闭
}
}
}
void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge)
{//最高位显7
dula=1;
P0=table[aa];
dula=0;
P0=0x00;
wela=1;
P0=0x01;
wela=0;
delay(1);
//第二位显6
dula=1;
P0=table[bb];
dula=0;
P0=0x00;
wela=1;
P0=0x02;
wela=0;
delay(1);
//第三位显5
dula=1;
P0=table[cc];
dula=0;
P0=0x00;
wela=1;
P0=0x04;
wela=0;
delay(1);
dula=1;
P0=table[bai];
dula=0;
P0=0x00;
wela=1;
P0=0x08;
wela=0;
delay(1);
dula=1;
P0=table[shi];
dula=0;
P0=0x00;
wela=1;
P0=0x10;
wela=0;
delay(1);
dula=1;
P0=table[ge];
dula=0;
P0=0x00;
wela=1;
P0=0x20;
wela=0;
delay(1);
}
如何利用单片机让4位数码管显示?
程序如下(用的是STC89C52芯片):
#includereg52.h//52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
uint x,y;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码
void display(uchar,uchar,uchar,uchar);//声明子函数
void delay(int);//声明子函数
void main()
{
while(1)
{
display(1,2,3,4);//主程序始终调用数码管显示子程序
}
}
void display(uchar a,uchar b,uchar c,uchar d)
{
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
}
void delay(uint z)//延时子函数
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
扩展资料
led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。-4路数码动态显示
位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。-4路数码动态显示
参考资料来源:百度百科-数码管
4位数码管动态显示时,每次能显示几个字形码?
4个。
4位数码管动态显示时,每次能显示4个字形码。P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,动态显示1234字样。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一。