
74hc595级连 led点阵前一个亮,后一个就不亮
我用四个595级联,两个16*16点阵,电路图接完后,发现,只要前一个亮,后一个就不亮,前一个不亮,后一个就能亮了,这是什么原因啊?另附595级联图,望高手指点!!!图中...
我用四个595级联,两个16*16点阵,电路图接完后,发现,只要前一个亮,后一个就不亮,前一个不亮,后一个就能亮了,
这是什么原因啊?
另附595级联图,望高手指点!!!
图中 E 是由单片机控制的 展开
这是什么原因啊?
另附595级联图,望高手指点!!!
图中 E 是由单片机控制的 展开
2个回答
展开全部
我也不太清楚。
在网上搜的帖子,不着能不能帮上你。
我想是不是你的程序有问题。
********************************************************************8
问
运行程序后,总是后一级出现的字符比前一级慢一拍,怎么才能同时出现,或者说,前面的等等后面的.
出现时序:
时间(秒): 1 2 3 4 5 6 7 8 9
数码管1(字母):A B C D E F G H I
数码管2(字母):? A B C D E F G H
驱动程序(基于周公的lpc2104)
/*************************************************************
*文件: LEDDISP.C
*功能: LED数码管显示,通过I/O模拟同步串口与74HC595进行连接,
* 控制74HC595驱动LED数码管显示
**************************************************************/
#include "config.h"
#define SPI_CS 0x00000004 //P0.0为74HC595的片选
#define SPI_DATA 0x00000002 //P0.1为SPI主机输出数据
#define SPI_CLK 0x00000001 //P0.2为SPI主机输出时钟
#define SPI_IOCON 0x00000007 //SPI接口的I/O设置字
#define GPIO_DEF 0x00000000 //引脚连接GPIO的默认设置
/*************************************************************
*名称: DelayNS ()
*功能: 软件延时 延时参数,值越大,延时越久
*入口参数: dly
**************************************************************/
void DelayNS (uint32 dly)
{
uint32 i;
for (; dly > 0; dly --)
for (i = 0; i < 50000; i ++);
}
/*************************************************************
*名称: Hc595_SendData ()
*功能: 向74HC595发送一字节的数据
*入口参数: data 要发送的数据
*说明: 发送数据时,高位先发送
**************************************************************/
void Hc595_SendData (uint8 data)
{
uint8 i;
IOCLR = SPI_CS; //SPI_CS = 0
for (i = 0; i < 8; i++) //发送8位数据
{
IOCLR = SPI_CLK; //SPI_CLK = 0
/*设置SPI_DATA输出值*/
if ((data&0x80) != 0)
{
IOSET = SPI_DATA;
}
else
{
IOCLR = SPI_DATA;
}
data <<= 1;
IOSET = SPI_CLK; //SPI_CLK = 1
}
IOSET = SPI_CS; //SPI_CS = 1, 输出显示数据
}
/*************************************************************
*名称: main ()
*功能: 控制LED数码管显示
**************************************************************/
int main (void)
{
/*此表位0~F的字模*/
const uint8 DISP_TAB[16] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99,
0x92, 0x82, 0xF8, 0x80, 0x90,
0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
uint8 i;
PINSEL0 = GPIO_DEF; //设置所有引脚连接GPIO
PINSEL1 = GPIO_DEF;
IODIR = SPI_IOCON; //设置SPI控制口为输出
while (1)
{
for (i = 0; i < 16; i++)
{
Hc595_SendData(DISP_TAB[i]); //输出LED显示数据
DelayNS (50); //延时
}
}
return (0);
}
答 1:
你看懂了595的资料了吗?电路有问题
答 2:
将数码管的电源控制起来就可以了
在网上搜的帖子,不着能不能帮上你。
我想是不是你的程序有问题。
********************************************************************8
问
运行程序后,总是后一级出现的字符比前一级慢一拍,怎么才能同时出现,或者说,前面的等等后面的.
出现时序:
时间(秒): 1 2 3 4 5 6 7 8 9
数码管1(字母):A B C D E F G H I
数码管2(字母):? A B C D E F G H
驱动程序(基于周公的lpc2104)
/*************************************************************
*文件: LEDDISP.C
*功能: LED数码管显示,通过I/O模拟同步串口与74HC595进行连接,
* 控制74HC595驱动LED数码管显示
**************************************************************/
#include "config.h"
#define SPI_CS 0x00000004 //P0.0为74HC595的片选
#define SPI_DATA 0x00000002 //P0.1为SPI主机输出数据
#define SPI_CLK 0x00000001 //P0.2为SPI主机输出时钟
#define SPI_IOCON 0x00000007 //SPI接口的I/O设置字
#define GPIO_DEF 0x00000000 //引脚连接GPIO的默认设置
/*************************************************************
*名称: DelayNS ()
*功能: 软件延时 延时参数,值越大,延时越久
*入口参数: dly
**************************************************************/
void DelayNS (uint32 dly)
{
uint32 i;
for (; dly > 0; dly --)
for (i = 0; i < 50000; i ++);
}
/*************************************************************
*名称: Hc595_SendData ()
*功能: 向74HC595发送一字节的数据
*入口参数: data 要发送的数据
*说明: 发送数据时,高位先发送
**************************************************************/
void Hc595_SendData (uint8 data)
{
uint8 i;
IOCLR = SPI_CS; //SPI_CS = 0
for (i = 0; i < 8; i++) //发送8位数据
{
IOCLR = SPI_CLK; //SPI_CLK = 0
/*设置SPI_DATA输出值*/
if ((data&0x80) != 0)
{
IOSET = SPI_DATA;
}
else
{
IOCLR = SPI_DATA;
}
data <<= 1;
IOSET = SPI_CLK; //SPI_CLK = 1
}
IOSET = SPI_CS; //SPI_CS = 1, 输出显示数据
}
/*************************************************************
*名称: main ()
*功能: 控制LED数码管显示
**************************************************************/
int main (void)
{
/*此表位0~F的字模*/
const uint8 DISP_TAB[16] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99,
0x92, 0x82, 0xF8, 0x80, 0x90,
0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
uint8 i;
PINSEL0 = GPIO_DEF; //设置所有引脚连接GPIO
PINSEL1 = GPIO_DEF;
IODIR = SPI_IOCON; //设置SPI控制口为输出
while (1)
{
for (i = 0; i < 16; i++)
{
Hc595_SendData(DISP_TAB[i]); //输出LED显示数据
DelayNS (50); //延时
}
}
return (0);
}
答 1:
你看懂了595的资料了吗?电路有问题
答 2:
将数码管的电源控制起来就可以了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询