找回密码
 立即注册

QQ登录

只需一步,快速开始

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

两片74HC595 驱动8位数码管 单片机源代码分享

[复制链接]
跳转到指定楼层
楼主
04 数码管 SMG_Ser.pdf (4.74 MB, 下载次数: 61)
03 HC595_Drive.pdf (6.78 MB, 下载次数: 55)




//以下代码是主文件的代码

//************************************************************************************
// 数码管显示1、2、3、4、5、6、7、8
//************************************************************************************
#include "STC89.H"        //头文件包含
#include <intrins.h>                                //头文件包含
typedef unsigned char u8;                        //重新定义数据类型名
typedef unsigned short u16;                        //重新定义数据类型名
typedef unsigned long u32;                        //重新定义数据类型名        
#include <HC595.H>                                        //调用74HC595的底层驱动文件(必须写这里)
#include <SMG_Ser.H>                                //调用数码管的文件(必须写这里)

void SMG_Allot()                                        //数码管的数据分配
{
        static u8 xdata count;                        //静态变量               
        count++;                                
        if(count>200)                                        //每200次进来执行一次
        {
                count=0;
                SMG_Write_Buffer[0]=1;                //第1位数码管显示内容
                SMG_Write_Buffer[1]=2;                //第2位数码管显示内容
                SMG_Write_Buffer[2]=3;                //第3位数码管显示内容
                SMG_Write_Buffer[3]=4;                //第4位数码管显示内容
                SMG_Write_Buffer[4]=5;                //第5位数码管显示内容
                SMG_Write_Buffer[5]=6;                //第6位数码管显示内容
                SMG_Write_Buffer[6]=7;                //第7位数码管显示内容
                SMG_Write_Buffer[7]=8;                //第8位数码管显示内容
        }
        SMG_Display_Ser();                                //执行数码管显示函数
}
void main()                                                        //主函数
{
        HC595_Init();                                        //初始化74HC595管脚
        while(1)                                                //主函数大循环
        {
                SMG_Allot();                                //循环调用数码管数据分配函数
        }
}

//******************************************************************************************************************//******************************************************************************************************************
//以下代码是74HC595的驱动代码
//文件名是:HC595.h
#ifndef HC595_Drive                                        //如果没有找到这个标签
#define HC595_Drive                                        //那么就打一个这个标签
sbit HC595_DS=P2^2;                                        //74HC595的数据脚
sbit HC595_ST=P2^3;                                        //74HC595的显示控制脚
sbit HC595_SH=P2^4;                                        //74HC595的时钟脚

unsigned char HC595_Write_Buffer[2];//74HC595芯片的数据缓存

void HC595_Init()                                        //74HC595初始化IO口                        
{
        HC595_DS=0;                                                
        HC595_ST=0;
        HC595_SH=0;
}

void HC595_Write_Data_Drive()                //74HC595 数据发送函数
{
        u8 i;                                                        //变量i 用于移位
        for(i=0;i<8;i++)
        {
                HC595_SH=0;                                  //时钟拉低
                HC595_DS=HC595_Write_Buffer[1]&0x80;//数据最高位拷贝
                HC595_Write_Buffer[1]<<=1;        //数据左移
                HC595_SH=1;                                        //时钟拉低
        }
        for(i=0;i<8;i++)
        {
                HC595_SH=0;                                  //时钟拉低
                HC595_DS=HC595_Write_Buffer[0]&0x80;//数据最高位拷贝
                HC595_Write_Buffer[0]<<=1;        //数据左移
                HC595_SH=1;                                        //时钟拉低
        }
        HC595_ST=1;                                                //显示控制脚拉高 显示输出
        HC595_DS=0;                                                //数据脚归0
        HC595_ST=0;                                                //控制脚归0
        HC595_SH=0;                                                //时钟脚归0
}
#endif

//******************************************************************************************************************
//******************************************************************************************************************
//以下代码是数码管的驱动代码
//文件名是:SMG_Ser.h

#ifndef SMG_Ser                                        //如果没有找到这个标签               
#define SMG_Ser                                        //那么就打一个这个标签

u8 xdata SMG_Write_Buffer[8];        //八位数码管的显存
u8 code SMG_Duan_Buffer[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
u8 code SMG_Wei_Buffer[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void SMG_Display_Ser()                        //数码管显示刷新函数
{
        static u8 count=0;                        //count取值范围是0~7,每次显示一位数码管
        switch(count)
        {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                case 6:
                case 7:
                HC595_Write_Buffer[0]=SMG_Duan_Buffer[SMG_Write_Buffer[count]];
                //通过数码管显示缓存0~7的值,查找数码管duan码的值,送人74HC595的显存0,送入0#595芯片
                HC595_Write_Buffer[1]=SMG_Wei_Buffer[count];
                //通过count,查找数码管wei码的值,送人74HC595的显存1,送入1#595芯片
                HC595_Write_Data_Drive();//执行595数据的发送
                break;
        }
        count++;
        count=count%8;//限制count的值,取值范围是0~7;        
}
#endif


新建工程 包含以上上个.h文件。配置好工程之后 再编译。












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

使用道具 举报

沙发
ID:390416 发表于 2021-1-14 19:24 | 只看该作者
配套视频教程观看地址:https://www.acfun.cn/v/ac15187311
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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