找回密码
 立即注册

QQ登录

只需一步,快速开始

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

74HC595驱动静态数码管

[复制链接]
跳转到指定楼层
楼主
ID:63924 发表于 2014-8-17 21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
********************************************************************************
* 通过本例程了解 74HC595(串入并出)基本原理和使用                                     *
*                                                                                                                               *
* 请学员认真消化本例程,懂74C595在C语言中的操作                                *
********************************************************************************/


#include <reg51.h>
#include <intrins.h>
#define  NOP() _nop_()  /* 定义空指令 */

//SPI IO
sbit MOSIO =P3^4;  //串行数据线
sbit R_CLK =P3^5;  //数据并行输出控制
sbit S_CLK =P3^6;  //串行时钟线


void delay(unsigned int i);      //函数声名
void HC595SendData(unsigned char SendVal);  //函数声名

// 此表为 LED 的字模            // 0    1    2    3    4    5    6   7    8    9    A    b    c    d    E    -    L   P    U    Hidden  _ (20)
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};

main()
{  unsigned char  HC595SendVal;
   unsigned int LedNumVal;

  while(1)
  {         
                 LedNumVal++;
                HC595SendVal = LED7Code[LedNumVal%16];     //LED7;显示0-F  LedNumVal%10 显示0-9
            HC595SendData(HC595SendVal); //调用595驱动函数       
                  delay(200);
         
  }   
}       
/*******************延时函数************/
void delay(unsigned int i)
{
    unsigned int j;
    for(i; i > 0; i--)         //CPU循环执行i*300次
        for(j = 300; j > 0; j--);
}


/*********************************************************************************************************
** 函数名称: HC595SendData
** 功能描述: 向SPI总线发送数据
*********************************************************************************************************/
void HC595SendData(unsigned char SendVal)
{  
  unsigned char i;
               
  for(i=0;i<8;i++)
   {
        if((SendVal<<i)&0x80) MOSIO=1; //set dataline high  0X80  最高位与SendVal左移的最高位 进行逻辑运算
        else MOSIO=0;                                   // 如果为真 MOSIO = 1  

        S_CLK=0;  
        NOP();         //短暂延时产生一定宽度的脉冲信号
        NOP();         //短暂延时
        S_CLK=1;
               
   }


  R_CLK=0; //set dataline low
  NOP();  //短暂延时
  NOP();  //短暂延时
  R_CLK=1;         //
       

}


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

使用道具 举报

沙发
ID:47760 发表于 2014-9-13 07:46 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

板凳
ID:67573 发表于 2014-10-22 14:07 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

地板
ID:70847 发表于 2014-12-22 10:21 | 只看该作者
感谢楼主无私奉献。。
回复

使用道具 举报

5#
ID:67573 发表于 2014-12-24 15:32 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

6#
ID:107116 发表于 2016-3-4 16:21 | 只看该作者
如何用一个74HC595驱动多个数码管,Q0-Q7 接A-Dp
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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