📄 led_drv.c
字号:
#include "config.h"
Data_595_Str strData595; //定义一个595输出数据结构体
uint8 FLASH_Flag;
uint8 FLASH_Dis_Flag;
uint8 FLASH_Cnt;
uint8 SegDisTab[CHARLEN] =
{
SegA|SegB|SegC|SegD|SegE|SegF, //0
SegB|SegC, //1
SegA|SegB|SegG|SegE|SegD, //2
SegA|SegB|SegC|SegD|SegG, //3
SegB|SegC|SegF|SegG, //4
SegA|SegF|SegG|SegC|SegD, //5
SegA|SegF|SegG|SegC|SegD|SegE, //6
SegA|SegB|SegC, //7
SegA|SegB|SegC|SegD|SegE|SegF|SegG, //8
SegA|SegB|SegC|SegD|SegF|SegG, //9
SegA|SegB|SegC|SegE|SegF|SegG, //A
SegC|SegD|SegE|SegF|SegG, //b
SegA|SegD|SegE|SegF, //c
SegB|SegC|SegD|SegE|SegG, //d
SegA|SegD|SegE|SegF|SegG, //E
SegA|SegE|SegF|SegG, //F
SegB|SegC|SegE|SegF|SegG, //H
SegD|SegE|SegF, //L
SegA|SegB|SegE|SegF|SegG, //P
SegC|SegE|SegG, //n
SegG, //-
SegC|SegD|SegE, //v
0 //灭
};
void DisplayInit(void)
{
uint8 i;
for(i=0; i<6; i++)
{
strData595.u8DisCode[i] = SegDisTab[Char_0];
strData595.u8DisNum[i] = Char_0;
}
strData595.u8DisChangeFlag = REFRESH_OFF;
DisRefresh();
}
void ModifyLed(uint8 Pos,uint8 ModifyData,uint8 DotFlag,uint8 FlashFlag)
{
uint8 temp;
if( DotFlag ) //显示数据到显示码的转换
{
temp = (SegDisTab[ModifyData] | DotFlag);
}
else
{
temp = SegDisTab[ModifyData];
}
if( strData595.u8DisCode[Pos] != temp ) //是否发生变化的判断和处理
{
strData595.u8DisCode[Pos] = temp;
strData595.u8DisChangeFlag = REFRESH_ON;
}
if( FlashFlag != 0 )
{
FLASH_Dis_Flag |= (1<<Pos);
}
else
{
FLASH_Dis_Flag &= ~(1<<Pos);
}
}
/* 送显 */
void DisRefresh(void)
{
uint8 i;
for(i = 0; i < 6; i++)
{
SendByte_595(strData595.u8DisCode[i]);
}
D_ENCLK = 0;
D_ENCLK = 1;
}
/* 刷显 */
void Display(void)
{
if(strData595.u8DisChangeFlag == REFRESH_ON)
{
DisRefresh();
strData595.u8DisChangeFlag = REFRESH_OFF;
}
}
//闪烁处理
void Flash(void)
{
if( FLASH_Flag != 0 )
{
if( FLASH_Cnt > 50 )
{
switch( FLASH_Flag )
{
if ( FLASH_Flag & (1<<0) )
{
if( FLASH_Dis_Flag & 0x01 )
{
FLASH_Dis_Flag |= 0x00;
ModifyLed(POSITION_1,strData595.u8DisNum[POSITION_1],0,0);
}
else
{
FLASH_Dis_Flag |= 0x01;
strData595.u8DisCode[0] = SegDisTab[Char_Mie];
}
if ( FLASH_Flag & 0x02 )
{
if( FLASH_Dis_Flag & 0x02 )
{
FLASH_Dis_Flag |= 0x00;
ModifyLed(POSITION_2,strData595.u8DisNum[POSITION_2],0,0);
}
else
{
FLASH_Dis_Flag |= 0x02;
strData595.u8DisCode[1] = SegDisTab[Char_Mie];
}
if ( FLASH_Flag & 0x04 )
{
if( FLASH_Dis_Flag & 0x04 )
{
FLASH_Dis_Flag |= 0x00;
ModifyLed(POSITION_3,strData595.u8DisNum[POSITION_3],0,0);
}
else
{
FLASH_Dis_Flag |= 0x04;
strData595.u8DisCode[2] = SegDisTab[Char_Mie];
}
if ( FLASH_Flag & 0x08 )
{
if( FLASH_Dis_Flag & 0x08 )
{
FLASH_Dis_Flag |= 0x00;
ModifyLed(POSITION_4,strData595.u8DisNum[POSITION_4],0,0);
}
else
{
FLASH_Dis_Flag |= 0x08;
strData595.u8DisCode[3] = SegDisTab[Char_Mie];
}
if ( FLASH_Flag & 0x10 )
{
if( FLASH_Dis_Flag & 0x10 )
{
FLASH_Dis_Flag |= 0x00;
ModifyLed(POSITION_5,strData595.u8DisNum[POSITION_5],0,0);
}
else
{
FLASH_Dis_Flag |= 0x10;
strData595.u8DisCode[4] = SegDisTab[Char_Mie];
}
if ( FLASH_Flag & 0x20 )
{
if( FLASH_Dis_Flag & 0x20 )
{
FLASH_Dis_Flag &= (~0x20);
ModifyLed(POSITION_6,strData595.u8DisNum[POSITION_6],0,0);
}
else
{
FLASH_Dis_Flag = 0x20;
strData595.u8DisCode[5] = SegDisTab[Char_Mie];
}
}
}
}
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -