PIC單片機學(xué)習(xí)之SPI操作數(shù)碼管
/****************************
現(xiàn)象:通過查詢的方式利用SPI接口實現(xiàn)對74HC595的操作,并在數(shù)碼上顯示。
*****************************/
#include
#include "../head/config.h" //包含自己的配置頭文件
__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//對熔絲位進(jìn)行設(shè)置
uchar data_temp;
//單片機LED共陽極段碼表(帶小數(shù)點) 0~9
const char table1[]={0X0A,0XFA,0X8C,0XA8,0X78,0X29,0X09,0XBA,0X08,0X28};
//數(shù)碼管位碼表
const char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//端口初始化子程序
void SPI_init(void)
{
PIR1 = 0x00; // SSPIF=0;沒有中斷發(fā)生
SSPCON = 0x30; //主控方式,F(xiàn)osc/4,CKP=1空閑時鐘電平為高,SSPEN=1使能同步串行功能
SSPSTAT = 0xC0; //SMP=1 時序信號末尾采樣輸入數(shù)據(jù),CKE=1時序信號上升沿發(fā)送數(shù)據(jù)
TRISC = 0x00; //SDO引腳為輸出,SCK引腳為輸輸出,SDI引腳輸出
}
//SPI發(fā)送數(shù)據(jù)子程序
void SPI_tx(uchar spi_data)
{
SSPBUF = spi_data;
do
{
;
}while(!SSPIF);//等待產(chǎn)生SSP中斷,等待發(fā)送完成
SSPIF=0;
data_temp=SSPBUF;//將接受到的數(shù)據(jù)放在變量中
}
void main(void)
{
uchar i;
SPI_init();
while(1)
{
for(i = 0;i < 8;i++)
{
RC4=0;
SPI_tx(table[i]); //先發(fā)送位選碼
SPI_tx(table1[i+2]); //再發(fā)送要顯示的數(shù)據(jù)
RC4=1;
}
} //最后給出鎖存信號。任務(wù)完成
}