用的是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();
}
}