发布网友 发布时间:2022-04-22 04:32
共3个回答
热心网友 时间:2023-06-22 09:04
使用LED时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段. 具体看图。
根据你要显示的东西,需要对数码管进行编码,主要是设置 位选(选中哪个数码管显示) 和 段选(数码管显示的具体内容)。
数码管的亮暗就是 发光二极管 导通与截止的过程,参照图。
另外数码管有静态显示和动态显示2种,4位的话一般都是采用动态显示。
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
下面给出一个程序你参考下:
/*利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。到此保持住。(设晶振12MHZ)*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit la=P2^6;
sbit wela=P2^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x,0x86,0xc7,0xc0,0xff};//0~9、hello
uchar temp,t0,t1,aa,bb,cc,,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;t1>0;t1--)
for(y=110;y>0;y--);
}
void main()
{
init();
while(1)
{
if(flag1!=1)
display(7,6,5,,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--;
=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 ,uchar shi,uchar ge)
{//最高位显7
la=1;
P0=table[aa];
la=0;
P0=0x00;
wela=1;
P0=0x01;
wela=0;
delay(1);
//第二位显6
la=1;
P0=table[bb];
la=0;
P0=0x00;
wela=1;
P0=0x02;
wela=0;
delay(1);
//第三位显5
la=1;
P0=table[cc];
la=0;
P0=0x00;
wela=1;
P0=0x04;
wela=0;
delay(1);
la=1;
P0=table[];
la=0;
P0=0x00;
wela=1;
P0=0x08;
wela=0;
delay(1);
la=1;
P0=table[shi];
la=0;
P0=0x00;
wela=1;
P0=0x10;
wela=0;
delay(1);
la=1;
P0=table[ge];
la=0;
P0=0x00;
wela=1;
P0=0x20;
wela=0;
delay(1);
}
热心网友 时间:2023-06-22 09:05
这个还是很初级的,驱动一个你会吧,就是如果共阴的,给某一段高电平就点亮,共阳的相反,驱动四个就是用查询方式点亮,当查询的速度足够快,人看上去就是四个同时点亮了,其他的有什么不懂的可以给我留言
热心网友 时间:2023-06-22 09:05
图上管脚定义标的很详细,不知你想要数码管显示什么,