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

📄 led.c

📁 sed1335液晶驱动器源码
💻 C
字号:
 #include "led.h"
 #include "mc9s12dt128.h"
/*======================================================================*/
/*				GLOBAL DEFINITIONS		                                      	*/
/*======================================================================*/
  unsigned char   CS_PortSect;            //CS port select variable
  unsigned char   SPI_Channel;            //spi channel select: 0 :spi0,1:spi1
  
  unsigned char   spi0_status;
  unsigned int    spi0_rvdata;
  
  unsigned char   spi1_status;
  unsigned char   spi1_rvdata;
  

/*======================================================================*/
/*				LOCAL SYMBOL DECLARATIONS	                                  	*/
/*======================================================================*/
 #define   SPI0_BAUDRATE_PRE      0x00    //spi0 baudrate preselect
 #define   SPI0_BAUDRATE_SET      0x02		//spi0 baudrate select
 
 #define   SPI1_BAUDRATE_PRE      0x00    //spi1 baudrate preselect
 #define   SPI1_BAUDRATE_SET      0x02		//spi1 baudrate selec
 
 
/*======================================================================*/
/*				LOCAL FUNCTION PROTOTYPES	                                  	*/
/*======================================================================*/
	
	void SPICS_Select1(byte port);
	void SPICS_Select2(byte port);
	
	void SPI0_Init(void);
	void SPI0_Enable(void);
	void SPI0_Disable(void);
	word SPI0_SendRecv(word data);
	
	
	void SPI1_Init(void);
	void SPI1_Enable(void);
	void SPI1_Disable(void);
	word SPI1_SendRecv(word data);
	//void SPI1_SendRecv(byte command,word data);
	void LED_Drive1(word data);
	void LED_Drive2(word data);
	void LED_Drive3(word data);
	void LED_DriveNull(word data);

void SPICS_Select1(byte port)
{
	 switch (port) {	  
	  case P_SPI0_CSA:
	  SPI0_CSA = LOW;
	  break;
	  case P_SPI0_CSB:
	  SPI0_CSB = LOW;
	  break;
	  case P_SPI1_CSA:
	  SPI1_CSA = LOW;
	  break;
	  case P_SPI1_CSB:
	  SPI1_CSB = LOW;
	  break;
	  case P_SPI1_CSC:
	  SPI1_CSC = LOW;
	  break;
	  case P_SPI1_CSD:
	  SPI1_CSD = LOW;
	  break;
	  case P_NULL:
	  SPI1_NULL = LOW;
	  break;
  }
}
void SPICS_Select2(byte port)
{
	 switch (port) {
	  
	  case P_SPI0_CSA:
	  SPI0_CSA = HIGH;
	  break;
	  case P_SPI0_CSB:
	  SPI0_CSB = HIGH;
	  break;
	  case P_SPI1_CSA:
	  SPI1_CSA = HIGH;
	  break;
	  case P_SPI1_CSB:
	  SPI1_CSB = HIGH;
	  break;
	  case P_SPI1_CSC:
	  SPI1_CSC = HIGH;
	  break;
	  case P_SPI1_CSD:
	  SPI1_CSD = HIGH;
	  break;
	  case P_NULL:
	  SPI1_NULL = HIGH;
	  break;
  }
}
void SPI0_Init(void) {

//SPI0CR1 bit set
//SPI0CR1_SPIE  = 0;              //SPI interruptdisabled.
//SPI0CR1_SPE   = 0;              //SPI system disabled.
//SPI0CR1_SPTIE = 0;              //SPI interrupt disabled.
  SPI0CR1_MSTR  = 1;              //SPI master mode select.
//SPI0CR1_CPOL  = 0;              //SPI clock polarity :low idle select.
  SPI0CR1_CPHA  = 1;              //The first sck is the beginning.
//SPI0CR1_SSOE  = 0;              //SS output is not used.
//SPI0CR1_LSBFE = 0;              //Data is transferred MSB first.

//SPI0CR2 bit set
//SPI0CR2_MODFEN  =0;             //MODF error disabled.
//SPI0CR2_BIDIROE =0;             //Output buffer disabled.
//SPI0CR2_SPISWAI =0;             //SPI click operate normally in wait state.
//SPI0CR2_SPC0    =0;             

//SPI0BR bit set
  SPI0BR = (SPI0_BAUDRATE_PRE<<4)|SPI0_BAUDRATE_SET;      //SPI baudrate set
//SPI0DR bit set
//SPI0DR  = 0;                    //SPI data register clear.  

}
void SPI0_Enable(void) {

  SPI0CR1_SPE   = 1;              //SPI system enabled.
}
void SPI0_Disable(void) {

  SPI0CR1_SPE   = 0;              //SPI system enabled.
}
word SPI0_SendRecv(word data) {
	 
	 word tmp_data;
	 word tmp_data_h;
	 word tmp_data_l;
	 while (SPI0SR_SPTEF == 0);    //wait until spi transmit int enabled
	 SPICS_Select1(CS_PortSect);
	 //SPI0_CSA = LOW;               //SPI0 CS low,enable transfer/receive data
	 
	 SPI0DR = data >> 8;		     //write data MSB to spi data register
	 while (SPI0SR_SPIF == 0);     //wait until spi int enabled
	 tmp_data_h = SPI0DR;          //read spi input data
	 
	 while (SPI0SR_SPTEF  == 0);   //wait until spi transmit int enabled
	 SPI0DR = data & 0x00ff;         //write data LSB to spi data register
	 while (SPI0SR_SPIF == 0);     //wait until spi int enabled
	 tmp_data_l = SPI0DR;
	 SPICS_Select2(CS_PortSect);
	 //SPI0_CSA = HIGH;              //cs high ,disable transmit data.
	 tmp_data = (tmp_data_h<<8)|tmp_data_l; //read data from slave 
	 return tmp_data;
	 //spi0_status = IDLE;           //spi bus is idle.
	 
}
void SPI1_Init(void) {

//SPI1CR1 bit set
//SPI1CR1_SPIE  = 0;              //SPI interruptdisabled.
//SPI1CR1_SPE   = 0;              //SPI system disabled.
//SPI1CR1_SPTIE = 0;              //SPI interrupt disabled.
  SPI1CR1_MSTR  = 1;              //SPI master mode select.
//SPI1CR1_CPOL  = 0;              //SPI clock polarity :low idle select.
  SPI1CR1_CPHA  = 1;              //The first sck is the beginning.
//SPI1CR1_SSOE  = 0;              //SS output is not used.
//SPI1CR1_LSBFE = 0;              //Data is transferred MSB first.

//SPI1CR2 bit set
//SPI1CR2_MODFEN  =0;             //MODF error disabled.
//SPI1CR2_BIDIROE =0;             //Output buffer disabled.
//SPI1CR2_SPISWAI =0;             //SPI click operate normally in wait state.
//SPI1CR2_SPC0    =0;             

//SPI1BR bit set
  SPI1BR = (SPI1_BAUDRATE_PRE<<4)|SPI1_BAUDRATE_SET;      //SPI baudrate set
//SPI1DR bit set
//SPI1DR  = 0;                    //SPI data register clear.  

}

void SPI1_Enable(void) {

  SPI1CR1_SPE   = 1;              //SPI system enabled.
}
void SPI1_Disable(void) {

  SPI1CR1_SPE   = 0;              //SPI system enabled.
}
word SPI1_SendRecv(word data) {
	 
	 word tmp_data;
	 word tmp_data_h;
	 word tmp_data_l;
	 while (SPI1SR_SPTEF == 0);    //wait until spi transmit int enabled
	 SPICS_Select1(CS_PortSect);
	 //SPI1_CSA = LOW;               //SPI0 CS low,enable transfer/receive data
	 
	 SPI1DR = data >> 8;		     //write data MSB to spi data register
	 while (SPI1SR_SPIF == 0);     //wait until spi int enabled
	 tmp_data_h = SPI1DR;          //read spi input data
	 
	 while (SPI1SR_SPTEF  == 0);   //wait until spi transmit int enabled
	 SPI1DR = data & 0x00ff;         //write data LSB to spi data register
	 while (SPI1SR_SPIF == 0);     //wait until spi int enabled
	 tmp_data_l = SPI1DR;
	 SPICS_Select2(CS_PortSect);
	 //SPI1_CSA = HIGH;              //cs high ,disable transmit data.
	 tmp_data = (tmp_data_h<<8)|tmp_data_l; //read data from slave}
	 return tmp_data;
	 //spi1_status = IDLE;           //spi bus is idle.
	 
}
/*======================================================================*/
/*				FUNCTIONS			                                              	*/
/*======================================================================*/
/*	
;	FUNCTION NAME:	LED_Drive
;	PACKAGE:	
;	COMPONENT:	
;	APPLICATION:    
;	SCOPE:
;	PARAMETER:	
;	DESCRIPTION:	LED drive output from spi1 port,data is led status.
*/
/*======================================================================*/
void LED_Drive1(word data)
{
  SPI1CR1_CPOL  = 1;			 //data polarity select
  CS_PortSect = P_SPI1_CSB;
  (void)SPI1_SendRecv(data);
  SPI1CR1_CPOL  = 0;
}
 
void LED_Drive2(word data)
{
  SPI1CR1_CPOL  = 1;			 //data polarity select
  CS_PortSect = P_SPI1_CSC;
  (void)SPI1_SendRecv(data);
  SPI1CR1_CPOL  = 0;
}
void LED_Drive3(word data)
{
  SPI1CR1_CPOL  = 1;			 //data polarity select
  CS_PortSect = P_SPI1_CSD;
  (void)SPI1_SendRecv(data);
  SPI1CR1_CPOL  = 0;
}
 
void LED_DriveNull(word data)
{
  SPI1CR1_CPOL  = 1;			 //data polarity select
  CS_PortSect = P_NULL;
  (void)SPI1_SendRecv(data);
  SPI1CR1_CPOL  = 0;
}

⌨️ 快捷键说明

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