问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

移位寄存器74595如何驱动数码管

发布网友 发布时间:2022-04-26 07:22

我来回答

2个回答

热心网友 时间:2022-06-25 05:35

595是个芯片,不是寄存器。寄存器怎么可以说来驱动数码管呢?是用芯片驱动数码管,你就是把这个芯片的abcdefgh端和数码管的ABCDEFGDp段连接起来,然后用SPI通信方式给芯片的寄存器送数据就OK了。
但是这个通讯方式你得清楚哦!要是你知道怎么用单片机的IO口驱动数码管的话,你就应该知道这个原理的,因为这个芯片可以说就好比是单片机的输出口的扩充。
希望这个回答你能看得懂。

void SPI_Send_Byte(uchar b_yte)
{
uchar k;
for(k=0;k<8;k++)
{
DS_OUT = (b_yte>>(7-k))&0x01;
S_CLK;
S_CLK;S_CLK;
R_CLK;
}
}
这个函数就是给595芯片传一个字节的数据的例子

下面这个程序是用595驱动点阵的一个程序实例,你看看595是怎么写程序的就好了。
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int
#define S_CLK CLK = 1
#define R_CLK CLK = 0

sbit DS_OUT = P3^0;
sbit CLK = P3^1;
sbit SP_CP = P2^0;
sbit OE = P2^1;

uchar idata dispram[8]={0}; //用于显示的中间数组

uchar code digit_tab[]={
0xFF,0xC1,0xBE,0xBE,0xC1,0xFF,0xFF,0xFF,/*"0",0*/

0xFF,0xBD,0x80,0xBF,0xFF,0xFF,0xFF,0xFF,/*"1",1*/

0xFF,0x9D,0xAE,0xB6,0xB9,0xFF,0xFF,0xFF,/*"2",2*/

0xFF,0xDD,0xB6,0xB6,0xC9,0xFF,0xFF,0xFF,/*"3",3*/

0xFF,0xC7,0xD9,0x80,0xDF,0xFF,0xFF,0xFF,/*"4",4*/

0xFF,0xB0,0xB6,0xB6,0xCE,0xFF,0xFF,0xFF,/*"5",5*/

0xFF,0xC1,0xB6,0xB6,0xCD,0xFF,0xFF,0xFF,/*"6",6*/

0xFF,0xFC,0x8E,0xF6,0xF8,0xFF,0xFF,0xFF,/*"7",7*/

0xFF,0xC9,0xB6,0xB6,0xC9,0xFF,0xFF,0xFF,/*"8",8*/

0xFF,0xD9,0xB6,0xB6,0xC1,0xFF,0xFF,0xFF,/*"9",9*/

0xFF,0x81,0xEE,0xEE,0x81,0xFF,0xFF,0xFF,/*"A",10*/

0xFF,0x80,0xB6,0xB6,0xC9,0xFF,0xFF,0xFF,/*"B",11*/

0xFF,0xC1,0xBE,0xBE,0xDD,0xFF,0xFF,0xFF,/*"C",12*/

0xFF,0x80,0xBE,0xBE,0xC1,0xFF,0xFF,0xFF,/*"D",13*/

0xFF,0x80,0xB6,0xB6,0xBE,0xFF,0xFF,0xFF,/*"E",14*/

0xFF,0x80,0xF6,0xF6,0xFE,0xFF,0xFF,0xFF,/*"F",15*/

0xFF,0xC1,0xBE,0xB6,0xC5,0xFF,0xFF,0xFF,/*"G",16*/

0xFF,0x80,0xF7,0xF7,0x80,0xFF,0xFF,0xFF,/*"H",17*/

0xFF,0xBE,0x80,0xBE,0xFF,0xFF,0xFF,0xFF,/*"I",18*/

0xFF,0xCF,0xBF,0xBF,0xC0,0xFF,0xFF,0xFF,/*"J",19*/

0xFF,0x80,0xF7,0xEB,0x9C,0xFF,0xFF,0xFF,/*"K",20*/

0xFF,0x80,0xBF,0xBF,0xBF,0xFF,0xFF,0xFF,/*"L",21*/

0xFF,0x80,0xF9,0xF9,0x80,0xFF,0xFF,0xFF,/*"M",22*/

0xFF,0x80,0xF9,0xE7,0x80,0xFF,0xFF,0xFF,/*"N",23*/

0xFF,0x80,0xBE,0xBE,0x80,0xFF,0xFF,0xFF,/*"O",24*/

0xFF,0x80,0xF6,0xF6,0xF9,0xFF,0xFF,0xFF,/*"P",25*/

0xFF,0xC1,0xAE,0x9E,0x81,0xFF,0xFF,0xFF,/*"Q",26*/

0xFF,0x80,0xE6,0xD6,0xB9,0xFF,0xFF,0xFF,/*"R",27*/

0xFF,0xD9,0xB6,0xB6,0xCD,0xFF,0xFF,0xFF,/*"S",28*/

0xFF,0xFE,0x80,0xFE,0xFE,0xFF,0xFF,0xFF,/*"T",29*/

0xFF,0xC0,0xBF,0xBF,0xC0,0xFF,0xFF,0xFF,/*"U",30*/

0xFF,0xF0,0x8F,0x8F,0xF0,0xFF,0xFF,0xFF,/*"V",31*/

0xFF,0x80,0xCF,0xCF,0x80,0xFF,0xFF,0xFF,/*"W",32*/

0xFF,0x9C,0xE3,0xE3,0x9C,0xFF,0xFF,0xFF,/*"X",33*/

0xFC,0xFB,0x87,0xFB,0xFC,0xFF,0xFF,0xFF,/*"Y",34*/

0xFF,0x9E,0xA6,0xB2,0xBC,0xFF,0xFF,0xFF/*"Z",35*/

};

void Time0(void)
{
TMOD = 0x01;

TH0 = 0xfd;
TL0 = 0x18;

TCON = 0x10; //运行定时器
IE |= 0x02; //允许定时器0中断
}

void delay(uint i) //延时
{
register uchar j;
for(;i;i--)
{for(j=0;j<255;j++);}
}

void SPI_Send_Byte(uchar b_yte)
{
uchar k;
for(k=0;k<8;k++)
{
DS_OUT = (b_yte>>(7-k))&0x01;
S_CLK;
S_CLK;S_CLK;
R_CLK;
}
}

/**********从LRp的第LRheard个字左移出显示number个字************/
void L_Removeout_Word(uchar LRp[],uchar LRheard,uchar number,uchar s,uchar state)
{
uchar i,k,l;
for(i=0;i<number;i++)
{
for(k=0;k<8;k++)
{
for(l=0;l<8;l++)
{
dispram[l]=dispram[l]<<1|LRp[(i+LRheard)*8+l]>>(7-k);
}
delay(20*s);
}
delay(20*state);
}
}

void M_Words(uchar wordsp[],uchar MWheard,uchar number,uchar s,uchar state)
{register uchar i,w;
for(w=0;w<number;w++)
{
for(i=0;i<8;i++)
{
dispram[i]=wordsp[(MWheard+w)*8+i];
delay(s*20);
}
delay(state*20);
}
}

void SPI_Send_Byte(uchar b_yte);
void main(void)
{
Time0();
EA = 1;
OE = 0; //允许595输出

while(1)
{
L_Removeout_Word(digit_tab,0,36,2,20);
M_Words(digit_tab,0,36,2,20);
}
}

void timer0(void) interrupt 1 //定时器0的中断服务程序
{
register uchar m;

TH0 = 0xfd;
TL0 = 0x18;

m = P1; //获取当前的扫描列
m =(++m)&0x07;

SPI_Send_Byte(~dispram[m]);

P1 &= 0xf8; //扫描完后将当前列加一
P1 |= m;
SP_CP = 1;
SP_CP = 0;

}

热心网友 时间:2022-06-25 05:36

74HC595和74LS164一样,是串入并出的移位寄存器。

学过数字电路的,都知道寄存器是可以驱动数码管的。

一般的单片机教材上,都给出了164的使用方法,而595是后起之秀,介绍甚少。

由于595比164性能更好一些,在LED点阵显示屏上,普遍都用595了。

用74HC595点阵显示屏可见:

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/e4d7db39c77e9f35b9998f26.html

用74HC595驱动数码管的电路和程序如下。注意:电路中省略了限流电阻(1K左右)。

;用595并行输出带动4个数码显示器.

    ORG   0000H

    SJMP  START

START:

    MOV  SCON,  #0

M_LOOP:

    MOV  30H, #1

    MOV  31H, #3

    MOV  32H, #0

    MOV  33H, #8

    CALL  TXD_595

    LJMP  M_LOOP

;**************************************************

;595发送程序.

;**************************************************

TXD_595:

    MOV  R0, #30H 

TXD_B:

    MOV  A,  @R0

    ADD  A,  #(TAB - $ - 3)

    MOVC A,  @A+PC

    CPL  A

    MOV  SBUF, A

    JNB  TI, $

    CLR  TI

    INC  R0

    CJNE R0, #34H, TXD_B

    CLR  P3.2

    SETB P3.2

    RET

TAB:

    DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H

    DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H 

    ;这些段码是共阴极的,若为共阳极 取反即可.

;-------------------------------------------------

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 小米手机cpu坏了有必要修吗 我们生产线上要用移位寄存器,但是我现在只找到128位的MC14562BCP,有没有位数更多的啊 老师说名师什么含义? 渐变型多模光纤工作波长是多少 为什么叫奥黑子叫“奥观海 手机坏了 拿去维修 师傅说要重装CPU 但是有风险怎么办? 74194N芯片是什么东西?为何我百度出现的都是移位寄存器? “明师”“名师”的区别? 为什么奥巴马叫奥观海,罗姆尼叫米蓉泥? 什么样的老师叫名师? 为什么奥巴马被称作奥观海? 一般经济纠纷申请起诉有流程吗? 渐变型多模光纤的介绍 移位寄存器扩展IO口后如何定义它的程序地址? 名师工作室的作用和意义是什么? 苹果手机cpu可以更换和维修吗 “奥观海”这名的由来…… quartus2 实验 我做的8位右移移位寄存器 应该选择哪个目标芯片啊 ? 名师应具备的基本素质和要求 奥巴马为什么叫奥观海 奥观海来源始末 难养的盆栽有哪些? 小学教师如何成为名师 多模渐变光纤和多模突变光纤有什么区别 好老师、名师,区别是啥啊?? 74HC595芯片功能和引脚图功能详细介绍分别是什么? 阶越型光纤与渐变型光纤的区别? 我刚移栽了十盆映山红,都说映山红难养,请问盆栽映山红真的难养吗? 奥巴马怎么叫观海同志 实验quartus ii 7.1的软件 我做的8位右移移位寄存器 应该选择哪个目标芯片啊 ? 名师是怎样成长的 老是把琴叶榕给养死,它难养在哪里? 7位移位寄存器可以构成几位环形寄存器同时需要几片级联? 请问光缆单模跟多模怎样区分 有什么区别 仙客来太难养了,第一盆水多了,归西了,第二盆买了一周多浇第三次水,我看他干了耷拉了才浇水,1个多小 6寸照片的长宽比是多少(柯达说不是4:3) 数电芯片中的左移和右移的作用是什么(74LS194A移位寄存器) 如何成为名师 为什么说渐变型光纤的色散特性要优于阶跃型光纤的色散特性 为什么盆栽月季都很难养活? 考研名师有哪些?