該秒表的led數碼管驅動程序:
- #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 led_init(void)
- {
- LED=segLedCode[0];
- LED_CS1=0;
- LED_CS2=0;
- LED_CS3=0;
- LED_CS4=0;
- LED_CS5=0;
- LED_CS6=0;
- LED_CS7=0;
- LED_CS8=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;
- }
- case 0x05:
- {
- LED_CS5=0;
- delay_us(10);
- LED_CS5=1;
- break;
- }
- case 0x06:
- {
- LED_CS6=0;
- delay_us(10);
- LED_CS6=1;
- break;
- }
- case 0x07:
- {
- LED_CS7=0;
- delay_us(10);
- LED_CS7=1;
- break;
- }
- case 0x08:
- {
- LED_CS8=0;
- delay_us(10);
- LED_CS8=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;
- }
- }
復制代碼 |