首页 热点资讯 义务教育 高等教育 出国留学 考研考公

四位数码管如何显示

发布网友 发布时间: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

图上管脚定义标的很详细,不知你想要数码管显示什么,

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com