微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机高手,进来看一下关于数码管显示不同数字的,

单片机高手,进来看一下关于数码管显示不同数字的,

时间:10-02 整理:3721RD 点击:
我会控制让任意数码管亮,但是不会让他

们显示不同的数字,和二极管遇到同样的问题,求解,我看的是郭天祥视频教程

就是这个编程,想不出来我想控制P0口,


此程序是于他的学习板配套的配套,其中有573锁存器

我知道,他用个的好像是89C51吧,用 P0口接的,我不懂怎么控制多个数码管显示不同的数字,根据他讲的,我只懂怎么控制各个显示相同数字 的,假如说让第一个数码管显示1,第二个显示2,该怎么变,是控制P0口吗?

如果是多个的话,一般是用动态显示的方法。有八个数码管的话,用两个口就够了。

语句中的wela=1;
p0=0xco;//0xc0换成二进制就是11000000,代表六个位同时有效,修改可控制每个位

这个我明白,你说的这个语句是控制6个数码管同时工作,dula=1;若P0=0xfe只能单纯的控制6个数码管同时显示0,也可以让他们显示任意一个数,但是怎么让数码管第一显示0,第二个数码管显示1,让他们持续一段时间

动态显示的话,假如说第一个数码管亮,让它显示16个数,我想问的是让两个数码管同时显示不同的数字…………==我表达能力太差了,

大致算法
for(i=10;1>0;i--)
{第一个数码管显示任意数字10ms,
第二个数码管显示任意数字10ms,



第6个数码管显示任意数字10ms,}
i的初始值自己装载,可以试下不同的值会有什么效果
这就是数码管的动态显示;

你这个是属于静态显示,原理跟显示一个数码管是一样的。
动态扫描,是需要段位跟位选位同时改变
可以先把每个数码管位选位也存到tablewe
num=1可以对应选中数码管1然后显示1
同理,

接着看他的视频说动态显示就明白了

问题解决了,昨天我问个人他说 是,可以多次打开位选,关闭,打开段选,关闭,用两次可以控制显示不同数码管,不过这种方法比较麻烦,要是数码管多了,要重复好几遍

嗯,现在明白了,你也在看吗?我看到中断那节,看了好几遍都没有看懂,现在只懂了一点

你好!我也是要一个这样的程序,用STC89C51单片机键盘输入,在2个4位七段数码管上显示8个数字的C语言程序,如输入后数码管显示 1162026。
你能不能发一个完整的C语言程序代码给我,我是新手,还不会编程,很想要一份程序来参考看看

#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
#define uchar unsigned char
#define uint unsigned int
uchar tt;
unsigned char code table[16]={
                                0x3f,0x06,0x5b,0x4f,
                                0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f,0x77,0x7c,
                                0x39,0x5e,0x79,0x71
                              };
void display();
void delay(uint z);
void init();
void main()
{
  tt=0;
  init();
  while(1)
  {
    if(tt == 40)
      {
         tt=0;
         wela=1;
         P0=0xff;
         wela=0;
         dula=1;
         P0=0x00;
         dula=0;
         delay(200);
      }
   
    display();
  }
      
}
void init()
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
void timer0() interrupt 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  tt++;
}
void delay(uint z)
{
  uint x,y;
   for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
void display()
{
  /*uint bai,shi,ge;
  bai=temp/100;
  shi=temp%100/10;
  ge=temp%10;
  */
  wela=1;
  P0=0xfe;
  wela=0;
  dula=1;
  P0=table[6];
  dula=0;
  delay(5);
  P0=0xff;
   
  wela=1;
  P0=0xfd;
  wela=0;
  dula=1;
  P0=table[5];
  dula=0;
  delay(5);
   P0=0xff;
  
  wela=1;
  P0=0xfb;
  wela=0;
  dula=1;
  P0=table[4];
  dula=0;
  delay(5);
  P0=0xff;

  wela=1;
  P0=0xf7;
  wela=0;
  dula=1;
  P0=table[3];
  dula=0;
  delay(5);  
  P0=0xff;

  wela=1;
  P0=0xef;
  wela=0;
  dula=1;
  P0=table[2];
  dula=0;
  delay(5);
  P0=0xff;
  wela=1;
  P0=0xdf;
  wela=0;
  dula=1;
  P0=table[1];
  dula=0;
  delay(5);
  P0=0xff;
  
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top