把电路贴出来才知道你怎么接的,才能写出程序不过程序真的很简单的
给你个74HC164的参考
8位LED显示器电路:通过74HC164 的输出可实现LED 的驱动控制,有关LED 的结构原理段码表已在前面节中详细介绍,图4 中由8 个74HC164 输出控制LED 显示器为静态显示,LM317 提供了LED 2V的恒定电压省去了74HC164 输出的限流电阻LM317 输出电压,Vout 由R1R2 通过下式算出VouT=125(1+R2/R1)下图为8位LED显示器电路。
你用了几片74hc164来驱动两个8段LED?
建议你每个8段LED使用1片74hc164来驱动。低位那片的AB接高位的QH,一次输出16位(调用两次send_byte),参考一下别人的设计。
我之前写的164扩展程序,参考一下吧!应该可以解决你问题。
其实你只要用到一片164就够了,作动态扫描,下面程序是两个数码管动态扫描,164并行输出口再接一片功率驱动芯片,如TD62083。
程序如下:
//
/ 74LS164数码管动态显示/
//
//-------------------------------------库函数声明,管脚定义------------
#include <at89x51h>
#define uchar unsigned char
sbit simuseri_CLK=P1^1; //用P1^1模拟串口时钟
sbit simuseri_DATA=P1^0; //用P1^0模拟串口数据
sbit a0=ACC^0;
unsigned char code dis_code[11]={0x28,0x7E,0xa2,0x62, //查表显示 0, 1、、9
0x74,0x61,0x21,0x7A,0x20,0x60, 0x01};
uchar numer,temp;
uchar ge,shi;
//----------------------------------------------------------------------------
// 函数名称:out_simuseri
// 输入参数:data_buf
// 输出参数:无
// 功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA
//----------------------------------------------------------------------------
void out_simuseri(uchar data_buf)
{
uchar i;
i=8;
ACC=data_buf;
do
{
simuseri_CLK=0;
simuseri_DATA=a0;
simuseri_CLK=1;
ACC=ACC>>1;
}
while(--i!=0);
}
//
void delay(uchar ms) //延时程序
{
uchar i;
while(ms--)
{
for (i=0;i<125;i++);
}}
//
void main()
{
uchar m;
while(1)
{
for(temp=0;temp<99;temp++)
{
ge=temp/10;
shi=temp%10;
for(m=0;m<20;m++) //显示频率200ms加1次
{
P2_0=0; //位段码
numer=dis_code[ge];
out_simuseri(numer); //个位移位显示
delay(5);
P2_0=1;
P2_1=0;
numer=dis_code[shi]; //十位移位
out_simuseri(numer);
delay(5);
P2_1=1;
}
m=0;
}
}
}
//
以上就是关于用C语言进行单片机编程: 使用74HC164的并行输出端接8只发光二极管,利用它的串入并功能,把发全部的内容,包括:用C语言进行单片机编程: 使用74HC164的并行输出端接8只发光二极管,利用它的串入并功能,把发、请问74hc164应该怎么用、74hc164驱动数码管笔段问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)