|
PIC18f4680 SPI和IIC同時(shí)使用,SPI 驅(qū)動(dòng)字庫(kù)芯片,IIC驅(qū)動(dòng)OLED。SPI和IIC都是使用的RC3 和RC4引腳,可以進(jìn)行分時(shí)復(fù)用嗎?怎么實(shí)現(xiàn)?
4680.png (1.16 MB, 下載次數(shù): 70)
下載附件
這是4680引腳圖
2023-6-15 14:54 上傳
void main(void)
{
unsigned char NixieNum =0 ,Temp1 = 0;
GPIO_Init();
Timer0_int();
OLED_Init();
OLED_Clear(0xf0);
OLED_Clear(0x00);
OLED_Clear(0x0F);
OLED_Clear(0x00);
OLED_ShowString(1,1,"KeyNum:");
OLED_ShowString(2,1,"Nixie:");
OLED_ShowString(3,1,"0x");
// OLED_GB2312_15x16_ShowChar(4,1,"按鍵");
while(1)
{
NixieNum = Key_NIXIE_Num();
if(NixieNum)
{
Temp1 = NixieNum;
OLED_ShowBinNum(2,8,Temp1,8 );
OLED_ShowHexNum(3,3,Temp1,2);
if(Temp1 == 0xDF){ LED_RGB_G_ON();}
if(Temp1 == 0xEF){ LED_RGB_B_ON();}
if(Temp1 == 0xF7){ LED_RGB_R_ON();}
if(Temp1 == 0x5F){ LED_RGB_G_OFF();}
if(Temp1 == 0x6F){ LED_RGB_B_OFF();}
if(Temp1 == 0x77){ LED_RGB_R_OFF();}
}
}
}
void IIC_Init(void)
{
LATCbits.LC0 = 1; //SPI_CS_PIN LATCbits.LC0(字庫(kù)片選)
TRISCbits.RC0 = 0; //CS 1:輸入 0:輸出(字庫(kù)片選)
/*********************************
**** 硬件IIC GPIO初始化****
*********************************/
LATCbits.LC3 = 0; //IIC_SCL
LATCbits.LC4 = 0; //IIC_SDA
TRISCbits.RC3 = 1; //設(shè)置為輸入
TRISCbits.RC4 = 1; //設(shè)置為輸入
SSPSTAT = 0x80; //設(shè)置通訊速率100K;Disable SMBus
SSPCON1 = 0x38; //使能串口,主控模式,時(shí)鐘=Fosc/(4*(SSPADD+1)
SSPCON2 = 0x00; //
PIR1bits.SSPIF=0; //中斷標(biāo)志清零
SSPADD = 0x27; // 頻率 = Focs/(4 * (SSPADD + 1)) ;100K頻率 16M晶振 SSPADD= 0x27;
}
void SPI_Init(void)
{
/*********************************
**** SPI__GPIO初始化****
*********************************/
LATCbits.LC0 = 1; //SPI_CS_PIN LATCbits.LC0(字庫(kù)片選)
LATCbits.LC2 = 1; //SPI_CS_PIN LATCbits.LC0(FLASH片選)
LATCbits.LC3 = 0; //SPI_SCK_PIN LATCbits.LC3
PORTCbits.RC4 = 0; //SPI_MISO_PIN PORTCbits.RC4 //數(shù)據(jù)輸入
LATCbits.LC5 = 0; //SPI_MOSI_PIN LATCbits.LC5 //數(shù)據(jù)輸出
TRISCbits.RC0 = 0; //CS 1:輸入 0:輸出(字庫(kù)片選)
TRISCbits.RC2 = 0; //flash_CS 1:輸入 0:輸出(FLASH片選)
TRISCbits.RC3 = 0; //CLK 1:輸入 0:輸出
TRISCbits.RC4 = 1; //SDI 1:輸入 0:輸出
TRISCbits.RC5 = 0; //SDO 設(shè)置RC5端口為輸出
//SCLK開(kāi)始高電平上升沿發(fā)送數(shù)據(jù),下降沿接收數(shù)據(jù)。
//0000 0000
SSPSTAT = 0x80; //bit7 = 1; 0:在數(shù)據(jù)輸出時(shí)間的中間采樣輸入數(shù)據(jù) 1:在數(shù)據(jù)輸出時(shí)間的末端采樣輸入數(shù)據(jù)
//bit6 = 0; 0:時(shí)鐘狀態(tài)從空閑換到有效時(shí)發(fā)送 1:時(shí)鐘從有效換到空閑時(shí)發(fā)送
//bit0 = 0; 接收未完成,SSBUF空
SSPCON1 = 0x32; //bit5 = 1; 使能SPI, bit4 = 1;空閑狀態(tài)時(shí),時(shí)鐘為高電平
//bit3-0 = 0010,SPI主控模式,時(shí)鐘=Fosc/64
// SSPCON1bits.WCOL = 0; //寫(xiě)沖突檢測(cè) 0:未發(fā)生沖突 1:
// SSPCON1bits.CKP = 1; //bit4 = 1;空閑狀態(tài)時(shí),時(shí)鐘為高電平
// SSPCON1bits.SSPM3 = 0; //bit3-0 = 0011,SPI主控模式,時(shí)鐘=TMR2輸出/2
// SSPCON1bits.SSPM2 = 0; // 0010,SPI主控模式,時(shí)鐘=Fosc/16
// SSPCON1bits.SSPM1 = 1; // 0001,SPI主控模式,時(shí)鐘=Fosc/16
// SSPCON1bits.SSPM0 = 0; // 0000,SPI主控模式,時(shí)鐘=Fosc/4
SSPIF = 0; //中斷標(biāo)志位清零
SSPCON1bits.SSPEN = 1; //使能SPI
}
/**
* @brief OLED寫(xiě)命令
* @param Command 要寫(xiě)入的命令
* @retval 無(wú)
*/
void oled_cmd(char cmd)
{
IIC_Init();
IIC_STAT();
IIC_SendByte(0x78);
IIC_SendByte(0x00);
IIC_SendByte(cmd);
IIC_STOP();
}
/**
* @brief OLED寫(xiě)數(shù)據(jù)
* @param Data 要寫(xiě)入的數(shù)據(jù)
* @retval 無(wú)
*/
void oled_data(char Data)
{
IIC_Init();
IIC_STAT();
IIC_SendByte(0x78);
IIC_SendByte(0x40);
IIC_SendByte(Data);
IIC_STOP();
}
/**
* @brief OLED顯示漢字
* @param Line 行位置,范圍:1~4
* @param Column 列位置,范圍:1~16
* @param text 要顯示的一個(gè)字符,范圍:字庫(kù)芯片
* @retval 無(wú)
*/
void OLED_GB2312_15x16_ShowChar(unsigned char Line, unsigned char Column, unsigned char *text)
{
unsigned char i,j;
unsigned char SZHPArray[32];
unsigned char HZHPArray[32];
while(*text != 0)
{
// SPI_Init();
GT30L32S4W_Get_Bytes_GB2312_15x16(text,HZHPArray);
GB2312_15x16_HengZhiHengPai_to_ShuZhiHengPai(SZHPArray,HZHPArray);
// IIC_Init();
for(j = 0; j < 32; j ++)
{
OLED_SetCursor((unsigned char)((Line - 1) * 2), (unsigned char)((Column - 1) * 8)); //設(shè)置光標(biāo)位置在上半部分
for (i = 0; i < 16; i++)
{
oled_data(SZHPArray[ i]); //顯示上半部分內(nèi)容
}
OLED_SetCursor((unsigned char)((Line - 1) * 2 + 1), (unsigned char)((Column - 1) * 8)); //設(shè)置光標(biāo)位置在下半部分
for (i = 0; i < 16; i++)
{
oled_data(SZHPArray[i + 16]); //顯示下半部分內(nèi)容
}
}
text += 2; //下個(gè)字
Column += 2;
}
}
|
-
IIC.png
(1.31 MB, 下載次數(shù): 71)
下載附件
2023-6-15 14:55 上傳
IIC初始化
-
SPI1.png
(1.18 MB, 下載次數(shù): 71)
下載附件
2023-6-15 14:55 上傳
SPI
-
SPI2.png
(1.18 MB, 下載次數(shù): 69)
下載附件
2023-6-15 14:55 上傳
SPI
-
OLED.png
(1.72 MB, 下載次數(shù): 79)
下載附件
2023-6-15 14:55 上傳
|