找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1868|回复: 7
收起左侧

求助一下各位单片机大神,怎么动态显示0-9,实在搞不懂了

[复制链接]
ID:481163 发表于 2020-3-29 22:43 | 显示全部楼层 |阅读模式
51hei截图20200329223944.png
#include "reg51.h"        
#include<intrins.h>

typedef unsigned int u16;         
typedef unsigned char u8;

sbit SRCLK=P0^0;
sbit RCLK=P0^2;
sbit SER=P0^1;


u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ÏÔê¾0~FμÄÖμ

void delay(u16 t)
{
        while(t--);
}

void Hc595SendByte(u8 dat)
{
        u8 a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
                SER=dat>>7;
                dat<<=1;

                SRCLK=1;
                _nop_();
                _nop_();
                SRCLK=0;        
        }

        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
}

void main()
{               
        u8 i;
        while(1)
        {
                for(i=0;i<8;i++)
                {
                        Hc595SendByte(smgduan[6]);
                        delay(100);
                        Hc595SendByte(0x00);
                }
        }        
}


74HC595-动态数码管.rar

76.03 KB, 下载次数: 6

回复

使用道具 举报

ID:699194 发表于 2020-3-29 22:59 | 显示全部楼层
你的数码管是共阴还是共阳的???
回复

使用道具 举报

ID:699194 发表于 2020-3-29 23:01 | 显示全部楼层
你用一下这个程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint i)
{
    uint x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=148;x++);

}
void main(void)
{
    uchar i=0;
        while(1)
        {
        P0=0;
        P0=table[i];
        delay(500);
        i=i+1;
        if(i==10)
        i=0;
        }
}
回复

使用道具 举报

ID:481163 发表于 2020-3-30 09:40 | 显示全部楼层
我叫小大打 发表于 2020-3-29 22:59
你的数码管是共阴还是共阳的???

共阴数码管
回复

使用道具 举报

ID:481163 发表于 2020-3-30 09:42 | 显示全部楼层
我叫小大打 发表于 2020-3-29 23:01
你用一下这个程序
#include
#define uchar unsigned char

用到74HC595
回复

使用道具 举报

ID:213173 发表于 2020-3-30 10:05 | 显示全部楼层
HC595联级使用时要等全部数据传输完毕再发锁存信号。
  1. #include "reg51.h"       
  2. #include<intrins.h>

  3. typedef unsigned int u16;         
  4. typedef unsigned char u8;

  5. sbit SRCLK=P0^0;
  6. sbit RCLK=P0^2;
  7. sbit SER=P0^1;


  8. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F段码
  10. u8 code smgwela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位码

  11. void delay(u16 t)
  12. {
  13.         while(t--);
  14. }

  15. void Hc595SendByte(u8 dat)
  16. {
  17.         u8 a;
  18. //        SRCLK=0;
  19. //        RCLK=0;
  20.         for(a=0;a<8;a++)
  21.         {
  22.                 SER=dat>>7;
  23.                 SRCLK=1;
  24.                 _nop_();
  25.                 _nop_();
  26.                 SRCLK=0;       
  27.                 dat<<=1;
  28.         }
  29. //        RCLK=1;
  30. //        _nop_();
  31. //        _nop_();
  32. //        RCLK=0;
  33. }

  34. void main()
  35. {               
  36.         u8 i;
  37.         SRCLK=0;
  38.         RCLK=0;
  39.         while(1)
  40.         {
  41.                 for(i=0;i<8;i++)
  42.                 {
  43.                         Hc595SendByte(smgwela[i]);//先送位码
  44.                         Hc595SendByte(smgduan[i]);//后送段码
  45.                         RCLK=1;                   //锁存                                               
  46.                         _nop_();
  47.                         _nop_();
  48.                         RCLK=0;
  49.                         delay(100);
  50.                 }
  51.         }       
  52. }
复制代码



回复

使用道具 举报

ID:481163 发表于 2020-3-30 11:47 | 显示全部楼层
wulin 发表于 2020-3-30 10:05
HC595联级使用时要等全部数据传输完毕再发锁存信号。

大神太感谢了。谢谢谢谢
回复

使用道具 举报

ID:123289 发表于 2020-3-30 12:40 | 显示全部楼层
你每间隔4ms显示一个数码管,从第一个至第八个,一直不停的做下去就可以了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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