共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
| 【S32K3XX】LIN 通讯模块使用被打赏¥31元 | |
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
我要赚赏金
