⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 机遇TMS20LF2812无刷电机开环运行程序
💻 C
字号:

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File

#include "DSP281x_Examples.h"   // DSP281x Examples Include File


#define Initclkoport  GpioMuxRegs.GPBDIR.bit.GPIOB11=1//Initial clk as output port
#define Setclkhigh    GpioDataRegs.GPBSET.bit.GPIOB11=1 

#define Setclklow     GpioDataRegs.GPBCLEAR.bit.GPIOB11=1
#define Setdatiport   GpioMuxRegs.GPDDIR.bit.GPIOD6=0//Initial clk as input port
#define Setdatoport   GpioMuxRegs.GPDDIR.bit.GPIOD6=1//Initial clk as output port
#define Readdat       GpioDataRegs.GPDDAT.bit.GPIOD6
#define Setdathigh    GpioDataRegs.GPDSET.bit.GPIOD6=1
#define Setdatlow     GpioDataRegs.GPDCLEAR.bit.GPIOD6=1
/***************************************************
底层硬件函数,用于被接口函数调用,该函数集只在本程序内使用
底层硬件函数共有如下几个函数:
1. 初始化函数   	BC7281Init
2. 延时函数uS		BC7281Delay
3. 写入BC7281命令	BC7281Write
4. 向BC7281传送一个字节  BC7281SendByte
***************************************************
*/
//可能被调用函数声明

void BC7281SendByte(unsigned char);
void Delay(unsigned char);
void LedLetterDisplay(unsigned char addr,unsigned char letter);

void ClearLedDisplay();
void BC7281Flash(unsigned char addr);
void BC7281Write(unsigned char reg_add, unsigned char write_data);
unsigned char AddressChange(unsigned char addr);
// int a=0,b=0,c=0,d=0;
long int count=0;	
//初始化函数
//初始化程序,将CLK和DAT均置为数字IO,将CLK置为输出高,DAT置为输入
void BC7281Init(void)  
{   
	EALLOW;
	Initclkoport; 
    Setdatiport;
	EDIS;
    Setclkhigh;
	//ClearLedDisplay();
	//Delay(1000); 
    BC7281Write(0x12,0x80);// 初始化BC728x为164模式不反相
    BC7281Write(0x10,0xFF);
    BC7281Write(0x15,0x10);
	BC7281Write(0x15,0x00);
    BC7281Write(0x15,0x20);
	BC7281Write(0x15,0x30);

}
void Delay(unsigned char delay_time)
{
	unsigned char temp;
	for(temp = 0; temp < (delay_time*20 ); temp++)
	{
		asm("	nop");	asm("	nop");	asm("	nop");	asm("	nop");	asm("	nop");
	}
}	

//写函数
// ***********************************************************
// * 写入BC728X, 第一个参数为目标寄存器地址, 第二个参数为要写入的数据 *
// ***********************************************************

void BC7281Write(unsigned char reg_add, unsigned char write_data)
{
	//Delay(1000);
	BC7281SendByte(reg_add);		// 发送寄存器地址
//	Delay(1000);
	BC7281SendByte(write_data);		// 发送数据字节
}
//发送一个字节
void BC7281SendByte(unsigned char send_byte)
{
	unsigned char temp,bit_counter;
	EALLOW;
	Setdatiport;
	EDIS;
	Setclklow;//set CLK to output high
	
	Delay(50);				;//delay 1us
	Setclkhigh;//set CLK to output low
	
	Delay(50);
//	Setclkhigh;
//	Delay(1);
    do
	{
		
		temp = Readdat		;   //read DAT  value
	}
	while(temp);//一直等到DAT为低,CLK间隔为1uS
	//重发一组时钟信号,等待DAT重新被拉高
	Setclklow;//set CLK to output low
	//*PEDATDIR = *PEDATDIR & 0x0fffb	; //set CLK to output low
	Delay(5);			;//delay 1us
	Setclkhigh;
	//*PEDATDIR = *PEDATDIR | 0x0404	;// set CLK to output high
	Delay(5);
	temp=0;
	while(temp==0)
	{
	    
		temp =  Readdat 		; //read DAT  value
	}//received the echo DAT value
	//DAT置成输出
	EALLOW;
	Setdatoport;
	EDIS;
//	Setdathigh;
	Delay(5);
	//*PEDATDIR = *PEDATDIR | 0x0808		; //set DAT to output high
	//发送8位数据,CLK间隔20uS
	for(bit_counter = 0; bit_counter < 8; bit_counter++)
	//send 8 bits
	{
		if((send_byte & 0x80) ==0)
		{//dat = 0
			Setdatlow;
			Delay(5);
			//*PEDATDIR = *PEDATDIR & 0x0fff7	; //set DAT to output low
			}
		else //dat = 1
		{
			Setdathigh;
			Delay(5);
			//*PEDATDIR = *PEDATDIR | 0x0808	; //set DAT to output high
		}
		send_byte=send_byte*2;	// send_byte 左移一位
		Setclklow;
		//*PEDATDIR = *PEDATDIR & 0x0fffb	; //set CLK to output low
		Delay(25);			//delay 10us
		Setclkhigh;
		//*PEDATDIR = *PEDATDIR | 0x0404	; //set CLK to output high
		Delay(75);			//delay 10us		
	}
	Setdathigh;
	//*PEDATDIR = *PEDATDIR | 0x0808	; //set DAT to output high

	//*PEDATDIR = *PEDATDIR & 0x0f7ff	; //set IOPE3 to input IO
	Delay(5);
}

void DISPLAYexample()
{
  BC7281Init(); 
   
}





//某一个数码管闪烁,addr为0-f的地址
void BC7281Flash(unsigned char addr)	
{
	addr=AddressChange(addr);
	if(addr >= 8)	
	{
		addr = ~(addr - 8);
		BC7281Write(0x19, addr);
	}
	else
	{
		BC7281Write(0x10, addr);
	}
}
void BC7281FlashSpeed(speed)
{
	BC7281Write(0x11,speed);
}
//显示从0-f的各个数码管的小数点,如果status为1,则表示熄灭,否则表示点亮
void BC7281DotDisplay(unsigned char addr, unsigned char status)
{
	unsigned char addr1;
	addr1=AddressChange(addr);
	addr1 = 0x07 +  (addr1<<3);
	if(status == 0) BC7281Write(0x18,addr1);
	else			BC7281Write(0x18,0x80+addr1);
}


void BC7281LetterDisplay(unsigned char addr, unsigned char letter)
{
 unsigned char addr1;
 addr1=addr<<4;
switch(letter)
 {

 case 'A' : BC7281Write(0x15,addr1+0x0a);break;
 case 'B' : BC7281Write(0x15,addr1+0x0b);break;
 case 'C' : BC7281Write(0x15,addr1+0x0c);break;
 case 'D' : BC7281Write(0x15,addr1+0x0d);break;
 case 'E' : BC7281Write(0x15,addr1+0x0e);break;
 case 'F' : BC7281Write(0x15,addr1+0x0f);break;
 case '-' : BC7281Write(0x14,addr1+0x0a);break;
 case 'H' : BC7281Write(0x14,addr1+0x0c);break;
 case 'L' : BC7281Write(0x14,addr1+0x0d);break;
 case 'P' : BC7281Write(0x14,addr1+0x0e);break;
 case ' ' : BC7281Write(0x14,addr1+0x0f);break;
 case '0' : BC7281Write(0x15,addr1+0x00);break;
 case '1' : BC7281Write(0x15,addr1+0x01);break;
 case '2' : BC7281Write(0x15,addr1+0x02);break;
 case '3' : BC7281Write(0x15,addr1+0x03);break;
 case '4' : BC7281Write(0x15,addr1+0x04);break;
 case '5' : BC7281Write(0x15,addr1+0x05);break;
 case '6' : BC7281Write(0x15,addr1+0x06);break;
 case '7' : BC7281Write(0x15,addr1+0x07);break;
 case '8' : BC7281Write(0x15,addr1+0x08);break;
 case '9' : BC7281Write(0x15,addr1+0x09);break;
 default  :break;
 }



}

//The led positions of premax display v2 board are not in order,so it's address 
//must be changed.   
unsigned char AddressChange(unsigned char addr)
{
  
  switch(addr)
    {
    case 0:return(3);
    case 1:return(2);
    case 2:return(1);
    case 3:return(0);
    case 4:return(7);
    case 5:return(6);
    case 6:return(5);
    case 7:return(4);
	
 
    }
   
} 

void LedLetterDisplay(unsigned char addr,unsigned char letter)
{
unsigned char addr1;
 addr1=AddressChange(addr);
 BC7281LetterDisplay(addr1,letter);

}

void LedStringDisplay(unsigned char* displaystring)
{
 unsigned char letter;
 int i,l,t=0;
 for(i=0;;i++)
  {letter=displaystring[i];
   if ((letter=='\000')&&((3-i+t)<0)||(letter=='\000'))
   {break;}
   if (letter=='.')
   {l=i-t-1;
    BC7281DotDisplay(3-l,0);
    t++;
	}
   else LedLetterDisplay(3-i+t,letter);
  }
 }

void ClearLedDisplay()
{
  	BC7281Write(0x14,0x0f);
	BC7281Write(0x14,0x1f);	
    BC7281Write(0x14,0x2f);
	BC7281Write(0x14,0x3f);
	BC7281Write(0x14,0x4f);
	BC7281Write(0x14,0x5f);
	BC7281Write(0x14,0x6f);
	BC7281Write(0x14,0x7f);	
}

void ClearDotDisplay()
{
    BC7281Write(0x18,0x87);
	BC7281Write(0x18,0x8f);
	BC7281Write(0x18,0x97);
	BC7281Write(0x18,0x9f);
	BC7281Write(0x18,0xa7);
	BC7281Write(0x18,0xaf);
	BC7281Write(0x18,0xb7);
	BC7281Write(0x18,0xbf);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -