dsp335的数码管同步异步显示

本文介绍了如何使用DSP2833x进行数码管的同步和异步显示,包括GPIO初始化、延时函数、SPI设置和数码管位选等关键步骤,提供了一系列宏定义和函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dsp335的数码管同步异步显示(文章未能完善的完美)

#include “DSP2833x_Device.h” // DSP2833x Headerfile Include File
#include “DSP2833x_Examples.h” // DSP2833x Examples Include File

/宏定义数码管位选 IO 接口***********/
#define SET_BIT4 GpioDataRegs.GPCSET.bit.GPIO70 = 1 //与外设板 8_LEDS 端子的 IO70 对应
#define RST_BIT4 GpioDataRegs.GPCCLEAR.bit.GPIO70 = 1 //与外设板 8_LEDS 端子的 IO70 对应
#define SET_BIT3 GpioDataRegs.GPCSET.bit.GPIO71 = 1 //与外设板 8_LEDS 端子的 IO71 对应
#define RST_BIT3 GpioDataRegs.GPCCLEAR.bit.GPIO71 = 1 //与外设板 8_LEDS 端子的 IO71 对应
#define SET_BIT2 GpioDataRegs.GPCSET.bit.GPIO72 = 1 //与外设板 8_LEDS 端子的 IO72 对应
#define RST_BIT2 GpioDataRegs.GPCCLEAR.bit.GPIO72 = 1 //与外设板 8_LEDS 端子的 IO72 对应
#define SET_BIT1 GpioDataRegs.GPCSET.bit.GPIO73 = 1 //与外设板 8_LEDS 端子的 IO73 对应
#define RST_BIT1 GpioDataRegs.GPCCLEAR.bit.GPIO73 = 1 //与外设板 8_LEDS 端子的 IO73 对应
/*****************************************************************************************************/

void display();
void display1();
void delay_loop();
void Gpio_select(void);
void spi_init();
void spi_fifo_init();
void spi_xmit(Uint16 a);
void Sellect_Bit(Uint16 i);

Uint16 Loop = 0;//循环扫描变量
Uint32 i,j;
unsigned char a[10]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8}; //段码:0~7

void main()
{

	   InitSysCtrl();
	   InitSpiaGpio();         //这个要加入一个spi的文件
	   Gpio_select();		 //GPIO初始化函数
	   DINT;
	   InitPieCtrl();
	   IER = 0x0000;
	   IFR = 0x0000;
	   InitPieVectTable();

	   spi_fifo_init();	      // spi的FIFo初始化
	   spi_init();		  // spi的初始化

	//   display();        //数码管异步
       display1();       //数码管同步

}

//GPIO初始化函数
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPCPUD.bit.GPIO70= 0; // Enable pullup on GPIO11
GpioDataRegs.GPCSET.bit.GPIO70 = 1; // Load output latch
GpioCtrlRegs.GPCMUX1.bit.GPIO70 = 0; // GPIO16 = GPIO
GpioCtrlRegs.GPCDIR.bit.GPIO70 = 1; // GPIO16 = output

 	 GpioCtrlRegs.GPCPUD.bit.GPIO71= 0;   					// Enable pullup on GPIO11
     GpioDataRegs.GPCSET.bit.GPIO71 = 1;   					// Load output latch
     GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 0;  					// GPIO16 = GPIO
     GpioCtrlRegs.GPCDIR.bit.GPIO71 = 1;   					// GPIO16 = output

 	 GpioCtrlRegs.GPCPUD.bit.GPIO72 = 0;   					// Enable pullup on GPIO11
     GpioDataRegs.GPCSET.bit.GPIO72 = 1;   					// Load output latch
     GpioCtrlRegs.GPCMUX1.bit.GPIO72 = 0;  					// GPIO17 = GPIO
     GpioCtrlRegs.GPCDIR.bit.GPIO72 = 1;   					// GPIO17 = output

 	 GpioCtrlRegs.GPCPUD.bit.GPIO73 = 0;   					// Enable pullup on GPIO11
     GpioDataRegs.GPCSET.bit.GPIO73 = 1;   					// Load output latch
     GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 0;  					// GPIO19 = GPIO
     GpioCtrlRegs.GPCDIR.bit.GPIO73 = 1;   					// GPIO19 = output

     EDIS;

     RST_BIT1;    //先使数码管全部关闭,因为数码管会默认打开的,如果不关闭,打开一个数码管,就会全部都亮
     RST_BIT2;
     RST_BIT3;
     RST_BIT4;

}

/*****************************************************************************************************/

/异步显示***/
void display()
{

for(Loop=0;Loop<4;Loop++)								//显示数组前4位四位 0到3
			{
				Sellect_Bit(Loop);									//选择要扫描的数码管位

				     spi_xmit(a[Loop]);					//串行输出要显示的数字
				     delay_loop();										//延时配合人眼反应时间
			}
for(Loop=0;Loop<4;Loop++)								//显示数组后4位四位 4到7
				{
					Sellect_Bit(Loop);									//选择要扫描的数码管位

					     spi_xmit(a[Loop+4]);					//串行输出要显示的数字
					     delay_loop();										//延时配合人眼反应时间
				}

}

/*****************************************************************************************************/

/同步显示***/
void display1()
{

          for(Loop=0;Loop<8;Loop++)								//4个同时显示0到7
				{
	                      SET_BIT4;
	                      SET_BIT3;
	                      SET_BIT2;
	                      SET_BIT1;
					     spi_xmit(a[Loop]);					//串行输出要显示的数字
					     delay_loop();										//延时配合人眼反应时间
				}

}

/*****************************************************************************************************/

/延时***/
void delay_loop()
{
for(i=0;i<15;i++)
for(j=0;j<200000;j++) {}
}

/*****************************************************************************************************/

/Spi初始化***/

void spi_init()
{
SpiaRegs.SPICCR.all =0x004F; // Reset on, rising edge, 16-bit char bits
//0x000F对应Rising Edge,0x004F对应Falling Edge
SpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase,
// enable talk, and SPI int disabled.
SpiaRegs.SPIBRR =0x007F;
SpiaRegs.SPICCR.all =0x00DF; // Relinquish SPI from Reset
SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don’t disturb xmission
}
/*****************************************************************************************************/

/Spi模块FIFO设置******/
void spi_fifo_init()
{
// Initialize SPI FIFO registers
SpiaRegs.SPIFFTX.all=0xE040;
SpiaRegs.SPIFFRX.all=0x204f;
SpiaRegs.SPIFFCT.all=0x0;
}

/*****************************************************************************************************/

/Spi发送***/

void spi_xmit(Uint16 a)
{
SpiaRegs.SPITXBUF=a;
}
/*****************************************************************************************************/

/******************************数码管位选函数(从低位到高位扫描)***************************************************/
void Sellect_Bit(Uint16 i)
{
switch(i)
{
case 0:
RST_BIT4; //关断数码管第四位
SET_BIT1; //选通数码管第一位
break;

	case 1:
		RST_BIT1;									//关断数码管第一位
		SET_BIT2;									//选通数码管第二位
		break;

	case 2:
		RST_BIT2;									//关断数码管第二位
		SET_BIT3;									//选通数码管第三位
		break;

	case 3:
		RST_BIT3;									//关断数码管第三位
		SET_BIT4;									//选通数码管第四位
		break;

	default:
		break;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值