以下是 51 单片机驱动四位共阴数码管的代码:

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit LATCH = P2^2;   //锁存器控制引脚
sbit DATA = P2^0;    //数据引脚
sbit CLK = P2^1;     //时钟引脚

uchar code seg_table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //共阴数码管段码表

void delay(uint x)   //延时函数
{
    uint i,j;
    for(i=0;i<x;i++)
        for(j=0;j<500;j++);
}

void send_byte(uchar dat)   //发送一个字节
{
    uchar i;
    for(i=0;i<8;i++)    //循环8次
    {
        CLK = 0;    //时钟线拉低
        DATA = dat&0x80;    //将最高位的值写入数据线
        dat <<= 1;  //左移一位
        CLK = 1;    //时钟线拉高
    }
}

void main()
{
    uchar i,num;
    while(1)
    {
        for(num=0;num<4;num++)   //循环4位数码管
        {
            LATCH = 0;  //锁存器控制线拉低
            send_byte(0x01<<num);   //发送1个字节,控制相应的数码管点亮
            send_byte(seg_table[i]);    //发送1个字节,显示相应的数字
            LATCH = 1;  //锁存器控制线拉高
            delay(1);   //延时1ms
        }
    }
}

其中,seg_table 数组存储了共阴数码管的段码表,send_byte 函数用于发送一个字节到 74HC595 芯片,main 函数中的 for 循环用于循环 4 位数码管,依次点亮和显示每一位数字。延时函数用于控制数码管的刷新频率。


原文地址: https://www.cveoy.top/t/topic/oVPv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录