您的位置:首页 > 其它

51单片机 8*8LED点阵横向流水 使用位运算生成中间帧

2014-10-10 11:40 405 查看
#include <reg52.h>

typedef unsigned char uchar;

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

code uchar image[5][8] = {
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},  //动画帧0
{0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},  //动画帧8
{0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},  //动画帧16
{0xFF,0x99,0x99,0x99,0x99,0x99,0x81,0xC3},  //动画帧24
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}   //动画帧32
};

void main() {
EA = 1;
ENLED = 0;
ADDR3 = 0;
TMOD = 0x01;
TH0  = 0xFC;
TL0  = 0x67;
ET0  = 1;
TR0  = 1;
while (1);
}

void interruptTimer0() interrupt 1 {
static uchar i = 0, tmr = 0, index = 0;
uchar p = index / 8, q = index % 8;

TH0 = 0xFC;
TL0 = 0x67;
P0 = 0xFF;
P1 = (P1 & 0xF8) | i;
if (q == 0) P0 = image[p][i];
else P0 = (image[p][i] << q) | (image[(p+1)%5][i] >> (8-q));

if (i < 7) i++;
else i = 0;

if (tmr < 125) tmr++;
else {
tmr = 0;
if (index < 39) index++;
else index = 0;
}
}


反向移动:

#include <reg52.h>

typedef unsigned char uchar;

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

code uchar image[5][8] = {
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},  //动画帧0
{0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},  //动画帧8
{0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},  //动画帧16
{0xFF,0x99,0x99,0x99,0x99,0x99,0x81,0xC3},  //动画帧24
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}   //动画帧32
};

void main() {
EA = 1;
ENLED = 0;
ADDR3 = 0;
TMOD = 0x01;
TH0  = 0xFC;
TL0  = 0x67;
ET0  = 1;
TR0  = 1;
while (1);
}

void interruptTimer0() interrupt 1 {
static uchar i = 0, tmr = 0, index = 0;
uchar p = index / 8, q = index % 8, tmp;

TH0 = 0xFC;
TL0 = 0x67;
P0 = 0xFF;
P1 = (P1 & 0xF8) | i;
if (q == 0) P0 = image[p][i];
else {
tmp = (image[p][i] << q) | (image[(p+1)%5][i] >> (8-q));
tmp = (tmp<<1 & 0xAA) | (tmp>>1 & 0x55);
tmp = (tmp<<2 & 0xCC) | (tmp>>2 & 0x33);
tmp = (tmp<<4) | (tmp>>4);
P0 = tmp;
}

if (i < 7) i++;
else i = 0;

if (tmr < 125) tmr++;
else {
tmr = 0;
if (index < 39) index++;
else index = 0;
}
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: