标题: 求助一下各位单片机大神,怎么动态显示0-9,实在搞不懂了 [打印本页]

作者: 风光好    时间: 2020-3-29 22:43
标题: 求助一下各位单片机大神,怎么动态显示0-9,实在搞不懂了

#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


作者: 我叫小大打    时间: 2020-3-29 22:59
你的数码管是共阴还是共阳的???
作者: 我叫小大打    时间: 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;
        }
}
作者: 风光好    时间: 2020-3-30 09:40
我叫小大打 发表于 2020-3-29 22:59
你的数码管是共阴还是共阳的???

共阴数码管
作者: 风光好    时间: 2020-3-30 09:42
我叫小大打 发表于 2020-3-29 23:01
你用一下这个程序
#include
#define uchar unsigned char

用到74HC595
作者: wulin    时间: 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. }
复制代码




作者: 风光好    时间: 2020-3-30 11:47
wulin 发表于 2020-3-30 10:05
HC595联级使用时要等全部数据传输完毕再发锁存信号。

大神太感谢了。谢谢谢谢
作者: yzwzfyz    时间: 2020-3-30 12:40
你每间隔4ms显示一个数码管,从第一个至第八个,一直不停的做下去就可以了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1