服务器主板数码管显示ff,关于数码管显示,程序讨论

写了数码管的程序,由于没有硬件,也不知道对不对;发出来让大家指正

#include "DSP2803x_Device.h"

interrupt void spiaTxFifoIsr(void);

void InitSpiaGpio(void)

{

EALLOW;

/* Enable internal pull-up for the selected pins */

// Pull-ups can be enabled or disabled by the user.

// This will enable the pullups for the specified pins.

// Comment out other unwanted lines.

GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)

//  GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;    // Enable pull-up on GPIO5 (SPISIMOA)

GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)

//  GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;    // Enable pull-up on GPIO3 (SPISOMIA)

GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   // Enable pull-up on GPIO18 (SPICLKA)

GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   // Enable pull-up on GPIO19 (SPISTEA)

/* Set qualification for selected pins to asynch only */

// This will select asynch (no qualification) for the selected pins.

// Comment out other unwanted lines.

GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)

//  GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3;  // Asynch input GPIO5 (SPISIMOA)

//  GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)

//  GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3;  // Asynch input GPIO3 (SPISOMIA)

GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)

//  GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)

/* Configure SPI-A pins using GPIO regs*/

// This specifies which of the possible GPIO pins will be SPI functional pins.

// Comment out other unwanted lines.

GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA

//  GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 2;  // Configure GPIO5 as SPISIMOA

//  GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA

//  GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 2;  // Configure GPIO3 as SPISOMIA

GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA

//  GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA

EDIS;

}

void spia_init(void)

{

//设置中断入口地址

EALLOW;

// This is needed to write to EALLOW protected registers

PieVectTable.SPITXINTA = &spiaTxFifoIsr;

EDIS;

// This is needed to disable write to EALLOW protected registers

//初始化 SPI FIFO

// Initialize SPI FIFO registers

SpiaRegs.SPICCR.bit.SPISWRESET = 0; // Reset SPI

SpiaRegs.SPICCR.all = 0x001F; //16-bit character, Loopback mode

SpiaRegs.SPICTL.all = 0x0017; //Interrupt enabled, Master/Slave XMIT enabled

SpiaRegs.SPISTS.all = 0x0000;

SpiaRegs.SPIBRR = 0x0063; // Baud rate

SpiaRegs.SPIFFTX.all = 0xC022; // Enable FIFO's, set TX FIFO level to 4

SpiaRegs.SPIFFRX.all = 0x0022; // Set RX FIFO level to 4

SpiaRegs.SPIFFCT.all = 0x00;

SpiaRegs.SPIPRI.all = 0x0010;

SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Enable SPI

SpiaRegs.SPIFFTX.bit.TXFIFORESET = 1;

//中断使能

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block

PieCtrlRegs.PIEIER6.bit.INTx2 = 1; // Enable PIE Group 6, INT 2  SPIA发送中断使能

IER = 0x20; // Enable CPU INT6

}

unsigned char finish=0;

interrupt void spiaTxFifoIsr(void)

{

GpioDataRegs.GPADAT.bit.GPIO6   =1;  //输出1 上升沿使595的数据加载到输出端

GpioDataRegs.GPADAT.bit.GPIO6   =0;  //595恢复平常状态

finish=1;//FIFO缓冲区的数据都已经发送出去了,置为标志

SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;  // Clear Interrupt flag

PieCtrlRegs.PIEACK.all|=0x20;       // Issue PIE ACK

}

/*

***说明:数码管初始化

***

***

*/

void Display_init(void)

{

InitSpiaGpio();

spia_init();

//配置595加载数据引脚

GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0;   // Enable pullup on GPIO6

GpioDataRegs.GPASET.bit.GPIO6 = 1;   // Load output latch

GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;  // GPIO6 = GPIO6

GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;   // GPIO6 = output

GpioDataRegs.GPADAT.bit.GPIO6   =0;  //输出0

}

/*

***说明:数码管显示

***

***@led:每一位代表一个led

***@digitron1:数码管1显示的数据

***@digitron0:数码管0显示的数据

*/

const unsigned char DigitronCode[]={

0xC0,  //"0"

0xF9,  //"1"

0xA4,  //"2"

0xB0,  //"3"

0x99,  //"4"

0x92,  //"5"

0x82,  //"6"

0xF8,  //"7"

0x80,  //"8"

0x90,  //"9"

0x7F   // "."

};

unsigned char ledData;//LED灯

unsigned char integralledData1,decimalledData1; //数码管组1的整数部分和小数部分

unsigned char integralledData0,decimalledData0; //数码管组0的整数部分和小数部分

/*

* 有数据需要显示时调用

*/

void updateData(unsigned char *led,

unsigned char *integral_1,unsigned char *decimal_1,

unsigned char *integral_0,unsigned char *decimal_0)

{

ledData=*led;

integralledData1=*integral_1;

decimalledData1=*decimal_1;

integralledData0=*integral_0;

decimalledData0=*decimal_0;

}

/*

* 周期调用

*/

#define YES 1

#define NO  0

void Display(void)

{

static unsigned char Buf[4];

static unsigned char scan=0;

if(finish==0) return; //当SPI FIFO没有没有完成发送时,是不能再发送的

Buf[3]=ledData;

switch(scan)

{

case 3://取整数十位

Buf[2]=0x77; //0111 0111

Buf[1]=integralledData1/10;

Buf[0]=integralledData0/10;

break;

case 2://取整数个位

Buf[2]=0xBB; // 1011 1011

Buf[1]=integralledData1%10;

Buf[0]=integralledData0%10;

break;

case 1://取小数十位

Buf[2]=0xDD; //1101 1101

Buf[1]=decimalledData1/10;

Buf[0]=decimalledData0/10;

break;

case 0://取小数个位

Buf[2]=0xEE; //1110 1110

Buf[1]=decimalledData1%10;

Buf[0]=decimalledData0%10;

break;

}

scan++;

if(scan>=4)scan=0;

//使用SPI发送出去

SpiaRegs.SPITXBUF=Buf[0];

SpiaRegs.SPITXBUF=Buf[1];

SpiaRegs.SPITXBUF=Buf[2];

SpiaRegs.SPITXBUF=Buf[3];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值