數碼管顯示1-F。
主程序:
/*******************************************************************************
*File: Main.c
*功能: LED數碼管顯示0-F字符,同時控制4個LED顯示對應的十六進制
*******************************************************************************/
#include "config.h"
#define HC595_CS 0x00000100 /*P0.8口為74HC595的片選*/
uint8 rcv_data;
/*******************************************************************************
*名稱: DelayNS()
*功能: 長軟件延時
*******************************************************************************/
void DelayNS(uint32 dly)
{ uint32 i;
for (;dly>0;dly--)
for(i=0;i<50000;i++);
}
/*******************************************************************************
*名稱: MSpiIni()
*功能: 初始化SPI接口,設置為主機
*******************************************************************************/
void MSpiIni(void)
{ S0PCCR=0x52; //設置SPI時鐘分頻
S0PCR=0x30; //設置SPI接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
}
/*******************************************************************************
*名稱: MSendData()
*功能: 向SPI總線發(fā)送數據
*******************************************************************************/
uint8 MSendData(uint8 data)
{ IO0CLR=HC595_CS; //片選
S0PDR=data;
while(0==(S0PSR&0x80)); //等待SPIF置位,即等待數據發(fā)送完畢
IO0SET=HC595_CS;
return(S0PDR);
}
/*此表為0~F的字模*/
uint8 const DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,0x8E};
/*******************************************************************************
*名稱: main()
*功能: 使用硬件SPI接口輸出0~F的數據,控制LED顯示
*******************************************************************************/
int main(void)
{
uint8 i;
PINSEL0=0x00005500; //設置SPI引腳連接
PINSEL1=0x00000000;
IO0DIR=HC595_CS;
MSpiIni(); //初始化SPI接口
while(1)
{ for (i=0;i<16;i++)
{rcv_data=MSendData(DISP_TAB[i]); //發(fā)送顯示數據
DelayNS(50); //延時
}
}
}