这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 74hc595 74hc595连级问题

共2条 1/1 1 跳转至

74hc595 74hc595连级问题

院士
2006-09-17 18:14:16     打赏
74hc595 74hc595连级问题



关键词: 74hc595     连级     问题    

院士
2006-12-22 22:43:00     打赏
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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]