找回密码
 立即注册

QQ登录

只需一步,快速开始

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

分享一个我常用的HC595驱动数码的可调用程序

[复制链接]
跳转到指定楼层
楼主
ID:162895 发表于 2025-11-19 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
u8 const tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x00,0x00,0x00,0x00,0x00,0x40};  //码表,每个板的码表不一样,大家可以根据需要修改
/************************595信号************************/
#define SHIFT_RCK               PA4    //锁存 有时如果用STC的可能不能用define来定义,需要sbit来定义
#define SHIFT_DATA             PA0                //数据
#define SHIFT_LCHCLK    PA1                //时钟
#define SHIFT_OE                PB0                //输出使能  

/*********************************************************************
* 函数名称:        Out595
* 功能描述:        其实这个是输出锁存信号,这样可以实现多个595串起来,具体最多多少我没试过,最多我试过7个的
* 输入参数:       
* 输出参数:        无
* 返 回 值:        无

**********************************************************************/
void Out595(void)
{
  SHIFT_RCK = 0;
  //asm("nop");
  //asm("nop");
  SHIFT_RCK = 1;
}
/*********************************************************************
* 函数名称:        SendByte
* 功能描述:        串行输入,发送一个字节数据
* 输入参数:       
* 输出参数:        无
* 返 回 值:        无

**********************************************************************/
void SendByte(u16 byte)
{   
        u16 num,c;
        if(TriFlag == 0)
                num = tabTri[byte];   //因为我要送2种不同的状态,所以这里做一个识别
        else
                num = tab[byte];
        //SHIFT_LCHCLK = 0;
        for(c=0;c<8;c++)
        {
                SHIFT_LCHCLK = 0;
                SHIFT_DATA=((num&0x80)>>7);  //分离最高位,移动到最低位
                num = num<<1;
                SHIFT_LCHCLK = 1;
        }
        //SHIFT_LCHCLK = 1;
}
/*****************下面这段就是具体送数据的了,因为我只有2个8,所以只送了2次***************/
void  DisplayRGY(u16 word,u8 Type)
{  
        u16 m,l;      //百位,十位,个位
    Type = 0;
        if (word>9)  //两位数
        {
                m = (word%100)/10;
                l = word%10;
        }
        else             //一位数
        {
                m = 0x0a;
                l = word%10;
        }
        if(TriFlag == 0)
        {
                if(Type == 0)
                {                       
                        SendByte(h);      //红十位                       
                        SendByte(l);   //黄个位
                }
        }
        else
        {
                if(Type == 0)
                {                       
                        SendByte(m);      //红十位                       
                        SendByte(l);   //黄个位
                }
        }
       
        Out595();      //这里送的就是锁存的信号
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:278457 发表于 2025-11-29 03:05 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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