📄 led.c
字号:
#include <config.h>
#define IN_LED2
#define LED_NOP() {_nop_();_nop_();_nop_();_nop_();} //定义空指令
/*共阳极数码管低电平有效*/
#define LED_A 0xf7
#define LED_B 0xfb
#define LED_C 0xfd
#define LED_D 0xef
#define LED_E 0xdf
#define LED_F 0xfe
#define LED_G 0xbf
#define LED_0 LED_A&LED_B&LED_C&LED_D&LED_E&LED_F
#define LED_1 LED_B&LED_C
#define LED_2 LED_A&LED_B&LED_D&LED_E&LED_G
#define LED_3 LED_A&LED_B&LED_C&LED_D&LED_G
#define LED_4 LED_B&LED_C&LED_F&LED_G
#define LED_5 LED_A&LED_C&LED_D&LED_F&LED_G
#define LED_6 LED_A&LED_C&LED_D&LED_E&LED_F&LED_G
#define LED_7 LED_A&LED_B&LED_C
#define LED_8 LED_A&LED_B&LED_C&LED_D&LED_E&LED_F&LED_G
#define LED_9 LED_A&LED_B&LED_C&LED_D&LED_F&LED_G
unsigned char xdata LED_BUFFER[10]={LED_0,LED_1,LED_2,LED_3,LED_4,LED_5,LED_6,LED_7,LED_8,LED_9};//LED数字0-9对应的16进制数
unsigned char xdata g_display_state=0x00;
void LEDdisplay_process(void)
{
if(g_timer0_100ms==0x00) //每个一定的时间才显示一次,当然紧急显示除外
return;
g_timer0_100ms=0x00;
switch(g_display_state)
{case 0x00:
LED_displaynumber(authorize_number);//LED显示剩下的数目
break;
case 0x01:
LED_displaynumber(exhaust_number); //LED显示已烧写数目
break;
default:
break;
}
}
void LED_displaynumber(unsigned int DISPLAY_NUM)
{
unsigned char idata ONE=0x00,TEN=0x00,HUN=0x00,THOU=0x00;
ONE=DISPLAY_NUM%10;
TEN=(DISPLAY_NUM%100)/10;
HUN=(DISPLAY_NUM%1000)/100;
THOU=DISPLAY_NUM/1000;
LED_display_drive(LED_BUFFER[ONE]);
LED_display_drive(LED_BUFFER[TEN]);
LED_display_drive(LED_BUFFER[HUN]);
LED_display_drive(LED_BUFFER[THOU]);
}
void LED_display_drive(unsigned char NUM)
{unsigned char idata i=0x00;
LED_CLR=1; //禁止复位
for(i=0x00;i<0x08;i++)
{LED_CLK=0;
if(NUM&0x80) LED_CLD=1;
else LED_CLD=0;
NUM<<=1;
LED_CLK=1;
LED_NOP();
LED_CLK=0;
LED_NOP();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -