基于STC15W4K32S4单片机仿真《74HC595驱动数码管动态显示》

1、 编 程 软 件:keil5版本。

 2、仿 真 软 件:Proteus8.12

3、单片机选型:STC15W4K32S4    

4、学 习 目 标:1、学习74HC595驱动数码管动态显示         

5、程 序 文 件 :

/**********************************************************************
项目名称:基于STC15W4K32S4单片机仿真《74HC595驱动数码管动态显示》
项目作者:LCY
项目版本:V1.0
项目说明:采用595驱动数码管显示,
学习目标:1、学习74HC595驱动数码管动态显示     
起止日期:2022年12月12号-2022年12月12号
**********************************************************************/
#include <stc15.h>                 //头文件,必须包含此文件。
#define uint  unsigned int
#define uchar unsigned char 


sbit SCK  = P5^0;      //74HC595数据输入时钟端
sbit RCK  = P5^1;      //74HC595锁存时钟端
sbit SER  = P5^2;      //74HC595数据输入端

uchar ct;                      // 8位数码管计数
uchar Dis_buff[8];     // 8位数码管显示数组
uint  count=0;            //数码管显示初始值

unsigned char bit_code[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};           //数码管位选数组
unsigned char SEG_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管段选数组
/**********************************************************************
函 数 名:调用的子函数
函数功能:
**********************************************************************/
void delay_1ms(uint z);       //延时函数
void send_595(uchar a);    //数码管数据发送函数
void shumaguan();              //数码管显示函数
/**********************************************************************
函 数 名:主函数
函数功能:
**********************************************************************/
void main(void)    
{     
    P0M0 = 0x00; P0M1 = 0x00; //GPIO初始化,设置为准双向口
  P1M0 = 0x00; P1M1 = 0x00; //GPIO初始化,设置为准双向口
  P2M0 = 0x00; P2M1 = 0x00; //GPIO初始化,设置为准双向口
  P3M0 = 0x00; P3M1 = 0x00; //GPIO初始化,设置为准双向口
  P4M0 = 0x00; P4M1 = 0x00; //GPIO初始化,设置为准双向口
  P5M0 = 0x00; P5M1 = 0x00; //GPIO初始化,设置为准双向口
  P6M0 = 0x00; P6M1 = 0x00; //GPIO初始化,设置为准双向口
  P7M0 = 0x00; P7M1 = 0x00; //GPIO初始化,设置为准双向口    
    
    SCK=0;
    RCK=0;
    SER=0;
        
    while(1)
    {
    shumaguan();
    }
}
/**********************************************************************
函 数 名:1ms延时函数
函数功能:x值可以修改,修改后延时为Xms
**********************************************************************/
void delay_1ms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
     for(y=120;y>0;y--);
}

/**********************************************************************
函 数 名:595数据发送函数
函数功能:595驱动3位数码管
**********************************************************************/
void send_595(unsigned char a)
{
    unsigned char i;
  for(i=0;i<8;i++)
      {
          if((a&0x80) == 0x80) //当a的最高位为1时条件成立.这条语句判断变量a的
                                              //最高位以此决定程序的流向,大家可以写个数据试一下即可明白
            SER=1;                    //数据端发送数据1 
            else 
                SER=0;               //数据端发送数据0
            
            SCK=1;                  //数据输入脉冲,上升沿
            SCK=0;                 //数据输入脉冲,下降沿,一升一降为1个脉冲
            a=a<<1;                 //数据左移一位,然后进入下一个循环按位与。直到8位数据发送完毕
        }
}

/**********************************************************************
函 数 名:数码管显示函数
函数功能:595驱动3位数码管
**********************************************************************/
void shumaguan()
{
        send_595(bit_code[ct]);  //片选数码管      
        send_595(Dis_buff[ct]);  //数码管数据
        RCK=1;                             //数据锁存打开
        RCK=0;                            //数据锁存关闭
      delay_1ms(1);                  //消隐
    if(ct<7)                                //数码管8位显示动态
             ct++;
        else ct=0;
         
    Dis_buff[0]=SEG_code[count/100];                  //数码管第一位显示  0
    Dis_buff[1]=SEG_code[count%100/10];          //数码管第二位显示  0
    Dis_buff[2]=SEG_code[count%100%10];       //数码管第三位显示  0
    Dis_buff[3]=SEG_code[2];                                 //数码管第四位显示  2
    
    Dis_buff[4]=SEG_code[2];                                 //数码管第五位显示  2
  Dis_buff[5]=SEG_code[3];                                   //数码管第六位显示  2
    Dis_buff[6]=SEG_code[4];                                //数码管第七位显示  4
    Dis_buff[7]=SEG_code[5];                                //数码管第八位显示  5
    }    
    6、仿真电路:


 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的代码示例,可以在 STC15W4K32S4 单片机上使用静态数码管显示数字 06043113: ``` #include <STC15W4K32S4.H> // 引入 STC15W4K32S4 单片机的头文件 // 定义数码管显示的数字和对应的编码 // 这里使用共阴极数码管,对应的编码为 0 表示该段亮 unsigned char numCode[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; void main() { unsigned char number[] = {0x06, 0x00, 0x04, 0x03, 0x01, 0x01, 0x01, 0x03}; // 定义要显示的数字 unsigned char i; // 定义一个变量 i,用于循环显示数字 while (1) { // 一直循环 for (i = 0; i < 8; i++) { // 循环显示每个数字 P0 = numCode[number[i]]; // 将数字对应的编码赋值给 P0 P2 = ~(1 << i); // 将数码管对应的控制引脚置为低电平,点亮该数码管 Delay(5); // 延时一段时间,控制数码管的刷新频率 P2 = 0xff; // 将数码管对应的控制引脚置为高电平,关闭该数码管 } } } // 延时函数 void Delay(unsigned int t) { unsigned int i, j; for (i = 0; i < t; i++) for (j = 0; j < 125; j++); } ``` 这段代码使用 P0 端口控制数码管显示数字,P2 端口控制数码管的控制引脚,通过循环显示数字 06043113,实现数码管的静态显示。需要注意的是,在使用共阴极数码管时,需要将对应的控制引脚置为低电平才能点亮该数码管。同时,需要根据数码管的刷新频率适当调整延时时间,避免数码管刷新不稳定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LCY_2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值