找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3163|回复: 8
打印 上一主题 下一主题
收起左侧

关于总线驱动数码管问题

[复制链接]
跳转到指定楼层
楼主
为什么用总线方式不能驱动数码管?请内行人指导下,程序如下:
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int

#define Lcd_com0   XBYTE[0xfff8]
#define Lcd_com1   XBYTE[0xfff9]
#define Lcd_com2   XBYTE[0xfffA]
#define Lcd_com3   XBYTE[0xfffB]
#define Lcd_com4   XBYTE[0xfffC]
#define Lcd_com5   XBYTE[0xfffD]
#define Lcd_com6   XBYTE[0xfffE]
#define Lcd_com7   XBYTE[0xfffF]


bit flag_2ms;
sbit led=P1^0;
uchar code DSY_CODE[]={        0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };

void T0int(void)
{
         TMOD=0X01;
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        EA=ET0=TR0=1;
}

void T0sev(void) interrupt 1
  {
    TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        flag_2ms=1;
  }

void display(void)
  {
   static uchar k;
   switch(k)
     {
      case 0:Lcd_com0=0xff;Lcd_com0=DSY_CODE[k];break;
          case 1:Lcd_com1=0xff;Lcd_com1=DSY_CODE[k];break;
          case 2:Lcd_com2=0xff;Lcd_com2=DSY_CODE[k];break;
          case 3:Lcd_com3=0xff;Lcd_com3=DSY_CODE[k];break;
          case 4:Lcd_com4=0xff;Lcd_com4=DSY_CODE[k];break;
          case 5:Lcd_com5=0xff;Lcd_com5=DSY_CODE[k];break;
          case 6:Lcd_com6=0xff;Lcd_com6=DSY_CODE[k];break;
          case 7:Lcd_com7=0xff;Lcd_com7=DSY_CODE[k];break;
  
           }
   k=++k%8;
  }

void main(void)
{        uint cnt;
    T0int();        
        while(1)
         {  
          if(flag_2ms)
            {
                 flag_2ms=0;
                 display();
                 if(++cnt>200){led=!led;cnt=0;}
                }

         }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2021-3-21 20:53 | 只看该作者
缺电路图 无法分析吧?有大神能猜测出这是用的什么驱动芯片吗?
回复

使用道具 举报

板凳
ID:275826 发表于 2021-3-21 21:58 | 只看该作者
51hei团团 发表于 2021-3-21 20:53
缺电路图 无法分析吧?有大神能猜测出这是用的什么驱动芯片吗?

就是74LS373和74LS138

Snipaste_2021-03-21_21-56-02.png (96.77 KB, 下载次数: 104)

Snipaste_2021-03-21_21-56-02.png
回复

使用道具 举报

地板
ID:275826 发表于 2021-3-21 22:00 | 只看该作者
51hei团团 发表于 2021-3-21 20:53
缺电路图 无法分析吧?有大神能猜测出这是用的什么驱动芯片吗?

你好,就是74373和74138
回复

使用道具 举报

5#
ID:275826 发表于 2021-3-21 22:02 | 只看该作者
这是电路图

Snipaste_2021-03-21_21-56-02.png (96.77 KB, 下载次数: 116)

Snipaste_2021-03-21_21-56-02.png
回复

使用道具 举报

6#
ID:213173 发表于 2021-3-22 06:24 | 只看该作者

楼主的硬件电路和软件的设计都有问题,按楼主的意图修改如下:


  1. #include <AT89X52.H>
  2. #include <intrins.h>
  3. #include <absacc.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. #define Lcd_com   P0
  7. //#define Lcd_com0   XBYTE[0xfff8]
  8. //#define Lcd_com1   XBYTE[0xfff9]
  9. //#define Lcd_com2   XBYTE[0xfffA]
  10. //#define Lcd_com3   XBYTE[0xfffB]
  11. //#define Lcd_com4   XBYTE[0xfffC]
  12. //#define Lcd_com5   XBYTE[0xfffD]
  13. //#define Lcd_com6   XBYTE[0xfffE]
  14. //#define Lcd_com7   XBYTE[0xfffF]

  15. sbit led =P1^0;
  16. sbit wela=P1^1;                        //位
  17. sbit dula=P1^2;                        //段

  18. bit flag_2ms;

  19. uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  20. void T0int(void)
  21. {
  22.         TMOD=0X01;
  23.         TH0=(65536-2000)/256;
  24.         TL0=(65536-2000)%256;
  25.         EA=ET0=TR0=1;
  26. }

  27. void T0sev(void) interrupt 1
  28. {
  29.         TH0=(65536-2000)/256;
  30.         TL0=(65536-2000)%256;
  31.         flag_2ms=1;
  32. }

  33. void display(void)
  34. {
  35.         static uchar k;
  36.         wela=0;
  37.         Lcd_com=DSY_CODE[k];
  38.         dula=1;
  39.         dula=0;
  40.         Lcd_com=k;
  41.         wela=1;
  42.         k=++k%8;
  43. }

  44. void main(void)
  45. {
  46.         uint cnt;
  47.         T0int();
  48.         while(1)
  49.         {  
  50.                 if(flag_2ms)
  51.                 {
  52.                         flag_2ms=0;
  53.                         display();
  54.                         if(++cnt>200)
  55.                         {
  56.                                 led=!led;
  57.                                 cnt=0;
  58.                         }
  59.                 }
  60.         }
  61. }
复制代码



回复

使用道具 举报

7#
ID:275826 发表于 2021-3-22 11:49 | 只看该作者
wulin 发表于 2021-3-22 06:24
楼主的硬件电路和软件的设计都有问题,按楼主的意图修改如下:

谢谢。我希望采用总线扩展形式驱动,你这个好像是端口分时驱动方式。但还是谢谢你
回复

使用道具 举报

8#
ID:332444 发表于 2021-3-22 15:26 | 只看该作者
锁存器用于存储段值或存储位值道理都是一样的,所以2个电路图都可以实现.
回复

使用道具 举报

9#
ID:275826 发表于 2021-3-22 16:02 | 只看该作者
xianfajushi 发表于 2021-3-22 15:26
锁存器用于存储段值或存储位值道理都是一样的,所以2个电路图都可以实现.

想用总线驱动方式,程序会简单很多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表