这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » MCU使用74hc595驱动LED数码管碰到的一个问题

共1条 1/1 1 跳转至

MCU使用74hc595驱动LED数码管碰到的一个问题

工程师
2021-02-03 21:29:05     打赏

各位大佬,2个595驱动八位数码管动态显示,为什么不加延时一样可以正常显示呢?用两个573的时候每位之间应该是有5ms的延时,我理解是在程序执行移位等操作的时候消耗了一定时间,已经起到了延时的作用,这样理解正确吗?还是有其它的解释?万分感谢!

我的源码如下:

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选码表
unsigned char code segbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选码表
unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};

sbit Dio=P1^0;
sbit Rclk=P1^1;
sbit Sclk=P1^2;
uint num;
uchar i;

//void delay(uchar z)
//{
//        uchar x,y;
//        for(x=114;x>0;x--)
//                for(y=z;y>0;y--);
//}
//发数据,段8位,位8位
void SendByte(uchar wei,uchar duan)
{
        uchar a,b;
        a=fseg[duan];
        b=segbit[wei-1];
        for(i=0;i<8;i++)
        {
                Sclk=0;
                if(a&0x80)
                        Dio=1;
                else
                        Dio=0;
                Sclk=1;
                a<<=1;
        }
        
        for(i=0;i<8;i++)
        {
                Sclk=0;
                if(b&0x80)
                        Dio=1;
                else
                        Dio=0;
                Sclk=1;
                b<<=1;
        }
        Rclk=0;
        Rclk=1;
}

void main ()
{
        while(1)
        {
                SendByte(1,1);
                SendByte(2,2);
                SendByte(3,3);
                SendByte(4,4);
                SendByte(5,5);
                SendByte(6,6);
                SendByte(7,7);
                SendByte(8,8);
        }
}




关键词: 74hc595     LED数码管     数码管    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]