27,382
社区成员
发帖
与我相关
我的任务
分享
ssooo oooss oooooo
ossoo oosso oooooo
oosso ossoo oooooo
oooss ssooo oooooo
sooos sooos oooooo
ssooo oooss oooooo
ossoo oosso oooooo //s表示灯亮,o表示灯不亮, 如此循环
oosso ossoo oooooo
oooss ssooo oooooo
sooos sooos oooooo
ssooo oooss oooooo
ossoo oosso oooooo
oosso ossoo oooooo
oooss ssooo oooooo
//GetLEDWORD(5,2,0);
//GetLEDWORD(5,2,1);
//...
//GetLEDWORD(5,3,0);
//GetLEDWORD(5,3,1);
//GetLEDWORD(5,3,2);
//...
//GetLEDWORD(6,3,0);
//GetLEDWORD(6,3,1);
//...
WORD GetLEDWORD(BYTE bitCount, BYTE LEDCount, BYTE Index)
{
WORD retWORD = 0;
BYTE i = 0;
BYTE j = 0;
BYTE BBAnd = 0;
BYTE AAAnd = 0;
BYTE AA = 0;
BYTE BB = 0;
if(bitCount>8){
//连续灯的二进制位不能大于8,不然就不好分字节了,返回错误
return 0;
}
//初始化两个字节的内容
for(i=0;i<LEDCount;i++){
AA = AA << 1;
BB = BB >> 1;
AA = AA ^ 1;
BB = BB ^ 0x80;
}
//初始化BB的与运算参数
for(i=0;i<bitCount;i++){
BBAnd = BBAnd >> 1;
BBAnd = BBAnd ^ 0x80;
AAAnd = AAAnd << 1;
AAAnd = AAAnd ^ 1;
}
if(Index>=(bitCount+LEDCount)){
//Index参数范围超出循环滚动的范围,返回错误
return 0;
}
if(bitCount-Index<LEDCount){
//当移动的数量在bit宽度以外
j = bitCount - LEDCount;
//先将字节移到边缘
AA = AA << j;
BB = BB >> j;
//再移动超出部分
for(i=j;i<Index;i++){
AA = AA << 1;
AA = AA ^ 1;
AA = AA & AAAnd;
BB = BB >> 1;
BB = BB ^ 0x80;
BB = BB & BBAnd;
}
}else{
AA = AA << Index;
BB = BB >> Index;
}
//开始合并两个字节为一个字节
retWORD = BB;
retWORD = retWORD << (bitCount -(8-bitCount));
retWORD = retWORD | AA;
retWORD = retWORD << (16-(bitCount*2));
return retWORD;
}
sssoo oosss oooooo
ossso ossso oooooo
oosss sssoo oooooo
sooss ssoos oooooo
ssoos sooss oooooo
sssoo oosss oooooo
ossso ossso oooooo //s表示灯亮,o表示灯不亮, 如此循环
oosss sssoo oooooo
typedef unsigned char BYTE;
typedef unsigned int WORD;
WORD GetLEDInt(BYTE Index)
{
WORD retWORD = 0;
BYTE AA = 0;
BYTE BB = 0;
if(Index>4){
//Index参数范围在 0 到 4 之间,若大于 4,当 0 处理
return 0xC0C0; //二进制 1100000011000000
}
AA = 0x03; //二进制 00000011
BB = 0xC0; //二进制 11000000
AA = AA << Index;
BB = BB >> Index;
if(Index==4){
BB = BB ^ 16;
AA = AA ^ 1;
}
//开始合并两个字节为一个字节
retWORD = BB;
retWORD = retWORD << 2;
retWORD = retWORD | AA;
retWORD = retWORD << 6;
return retWORD;
}
unsigned char ptn1[] = {0x18,0xc,6,3,0x11};
unsigned char ptn2[] = {3,6,0xc,0x18,0x11};
#define led_show(ndx1,ndx2) (ptn1[(ndx1)%5]<<(5+6))+(ptn2[(ndx2)%5]<<6)