关于595级联驱动数码管

2019-03-23 19:46发布

用的是LMS8962,用两片74HC595级联驱动8个数码管,但是现实的是乱码。
以下是程序:、
#include"inc/hw_sysctl.h"
#include"inc/hw_types.h"
#include"inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include"driverlib/debug.h"
#include"driverlib/gpio.h"
#include"driverlib/uart.h"
#include"driverlib/rom.h"
#include"utils/uartstdio.h"

typedef unsigned char uchar;
typedef unsigned int uint;


//uchar duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//uchar weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar k[]={0,1,2,3,4,5,6,7};                                                  
uchar i;
uchar p;

void init(void)
{                                                                                                                                                                                                          
        SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

        GPIODirModeSet(GPIO_PORTA_BASE,(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5),GPIO_DIR_MODE_OUT);       
        GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5));               
}

void HC595_Write(uchar data)
{
        for(i=0;i<8;i++)
        {
                GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2,~GPIO_PIN_2);        //串行时钟输入0
                if((data&0x80)==0x80)
                GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5,GPIO_PIN_5);        //输入1
                else
                GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5,~GPIO_PIN_5);        //输入0
                GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2,GPIO_PIN_2);        //串行时钟输入1,上升沿数据输入
                data<<=1;
        }                               
}

void HC595_OUT(void)
{
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3,~GPIO_PIN_3);        //并行输出时钟0
        SysCtlDelay(SysCtlClockGet()/3000);       
        GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3,GPIO_PIN_3);  //并行输出时钟1,上升沿输出       
}

void display(void)
{
        HC595_Write(weima[p]);
        HC595_Write(duanma[k[p++]]);
        if(p>7)
        p=0;
        HC595_OUT();
        SysCtlDelay(SysCtlClockGet()/3000);       
               
}

int main(void)
{
        init();
        while(1)
        {
                display();
        }       
} 此帖出自小平头技术问答
0条回答

一周热门 更多>