#define LED_GLOBAL 1
#include "led.h"
/*******************************************************************************************
*函數名稱:delay_us(uint us)
*函數功能:實現微秒級的延時
*函數入口:us,延時函數循環后期數
*函數出口:無
*******************************************************************************************/
void delay_us(uint us)
{
uint i;
while(us--)
{
for(i=0;i<100;i++);
}
}
/*******************************************************************************************
*函數名稱:led_init(void)
*函數功能:四位七段數碼管顯示初始化
*函數入口:無
*函數出口:無
*******************************************************************************************/
void init_led(void)
{
LED=segLedCode[0];
LED_CS1=0;
LED_CS2=0;
LED_CS3=0;
LED_CS4=0;
}
/*******************************************************************************************
*函數名稱:ledWrite(uchar c,uchar n,uchar mod)
*函數功能:對一組數碼管的某一位進行短暫顯示
*函數入口:c,要顯示的數據;n,顯示一組數碼管中的第n位;mod,c的數據形式
*函數出口:無
*說明:當mod==DIGITAL時,c為數字0~9的ANCII碼形式,此時在n位數碼管上顯示想用數字
當mod==CHARACTER,直接將c輸出數據口
*******************************************************************************************/
void ledWrite(uchar c,uchar n,uchar mod)
{
if(CHARACTER==mod)
{
LED=c;
}
else if(DIGITAL==mod)
{
if((c-'0')<0x0a)
{
LED=segLedCode[c-'0'];
}
else
{
LED=segLedCode[0];
}
}
switch(n)
{
case 0x01:
{
LED_CS1=0;
delay_us(10);
LED_CS1=1;
break;
}
case 0x02:
{
LED_CS2=0;
delay_us(10);
LED_CS2=1;
break;
}
case 0x03:
{
LED_CS3=0;
delay_us(10);
LED_CS3=1;
break;
}
case 0x04:
{
LED_CS4=0;
delay_us(10);
LED_CS4=1;
break;
}
default:
break;
}
}
/*******************************************************************************************
*函數名稱:ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
*函數功能:循環在數碼管上顯示緩沖區中的數據
*函數入口:segCode,指向顯示緩沖區中的指針;segCodeMod,0~7位為1或0標示1~8位數碼管顯示的數據的類型(DIGITAL或者CHARACTER);segNumber,代表要顯示數碼管的位數
*函數出口:無
*說明:本函數主要實現將顯示緩沖區中的數據在數碼管上顯示出來
*******************************************************************************************/
void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
{
uchar segCount;
for(segCount=0;segCount<segNumber;segCount++)
{
if(segCodeMod&0x01) /*1代表此處顯示任意字符 */
{
ledWrite(segCode[segCount],segCount+1,CHARACTER);
}
else
{
ledWrite(segCode[segCount],segCount+1,DIGITAL);
}
segCodeMod=segCodeMod>>1;
}
}