共2条
1/1 1 跳转至页
74hc595 74hc595连级问题
问
运行程序后,总是后一级出现的字符比前一级慢一拍,怎么才能同时出现,或者说,前面的等等后面的.
出现时序:
时间(秒): 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: 将数码管的电源控制起来就可以了
出现时序:
时间(秒): 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: 将数码管的电源控制起来就可以了
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |