📄 sled_s.c
字号:
//led seriarl in merge out
#include "pic16f62xa.h"
#include "pic.h"
#include "typedefine_s.h"
#include "extern_s.h"
#define LEDCLK RA1
//#define LEDCLK_1 RA0=1
#define LEDDATA RA0
//#define LEDDATA_1 RA1=1
#define LEDLACK RA2
//#define LEDLACK_1 RA2=1
bank1 uint LedSSLink;
bank1 static char aloneD[4];
const unsigned char LEDCode[] =
{
0x03, // 0
0x9f, // 1
0x25, // 2
0x0d, // 3
0x99, // 4
0x49, // 5
0x41, // 6
0x1f, // 7
0x01, // 8
0x09, // 9
};
void CalculateSub(int Digit,char *p_aloneD);
void LedDrive(void)
{
bank1 static char OffCnt;
bank1 static uint ShowDigit;
unsigned char SixCnt=16;
unsigned int TempLedData=0;
if(ledControl.bits.once128ms)
{
ledControl.bits.once128ms=0;
ShowDigit = LedSSLink;
CalculateSub(ShowDigit,aloneD); //
}
//
// if(LedStruct.linkLedNewDataTag==1)
// {
// LedStruct.linkLedNewDataTag = 0;
// ShowDigit = LedStruct.linkLedData;
// CalculateSub(ShowDigit,aloneD);
// }
//-----------------------------------
// if(Tag_ms == 1)
// Tag_ms= 0;
// if(Tag_ms)
// Tag_ms = 0;
if(ledControl.bits.refurbish != 1)
return;
ledControl.bits.refurbish = 0;
OffCnt++;
switch (OffCnt)
{
case 1:
{
// TempLedData = aloneD[0];
// TempLedData = TempLedData<<8;
// TempLedData = TempLedData|0x10; //0xef;
TempLedData = LEDCode[aloneD[0]];
TempLedData |= 0x8000;
break;
}
case 2:
{
// TempLedData = aloneD[1];
// TempLedData = TempLedData<<8;
// TempLedData = TempLedData|0x20; //0xdf;
TempLedData = LEDCode[aloneD[1]];
TempLedData |= 0x4000;
break;
}
case 3:
{
// TempLedData = aloneD[2];
// TempLedData = TempLedData<<8;
// TempLedData = TempLedData|0x40; //0xbf;
TempLedData = LEDCode[aloneD[2]];
TempLedData |= 0x2000;
break;
}
case 4:
{
// TempLedData = aloneD[3];
// TempLedData = TempLedData<<8;
// TempLedData = TempLedData|0x80; //0x7f;
TempLedData = LEDCode[aloneD[3]];
TempLedData |= 0x1000;
OffCnt=0;
break;
}
default:
{
OffCnt=0;
TempLedData=0;
break;
}
}
NOP();
GIE = 0;
// LEDLACK = 1;
LEDLACK = 0;
SixCnt = 16;
do{
if(TempLedData & 0x0001) //
{
LEDDATA=1;
}
else
{
LEDDATA=0;
}
LEDCLK = 1;
TempLedData >>= 1;
LEDCLK=0;
}while(--SixCnt);
LEDLACK=1;
// LEDLACK = 0;
NOP();
LEDCLK=0;
LEDDATA=0;
NOP();
NOP();
GIE = 1;
return;
}//void LedDrive(void)
//10进制显示
void CalculateSub(int Digit,char *p_aloneD)
{
*p_aloneD = (char)(Digit/1000);
Digit -= *p_aloneD++ * 1000;
*p_aloneD = (char)(Digit/100);
Digit -= *p_aloneD++ * 100;
*p_aloneD = (char)(Digit/10);
Digit -= *p_aloneD++ * 10;
*p_aloneD = (char)Digit;
p_aloneD = 0;
}//void CalculateSub(int Digit,char *p_aloneD)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -