共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 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |