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; } }
相关文章推荐
- 51单片机 8*8LED点阵横向流水 使用位运算生成中间帧
- 51单片机 LED点阵的呼吸灯效果
- [51单片机学习笔记ONE]-----LED灯的多种使用方法
- 51单片机LED点阵显示(16*16)源代码
- 51单片机(使用8x8点阵)
- 51单片机_LED流水灯_0x03
- 7.6 LED点阵的横向移动
- 一步步点亮LED4_使用位运算实现复杂点亮要求
- 51单片机LED点阵显示文字
- 51单片机 漩涡流水点阵
- 使用CANVAS绘制LED点阵时钟
- 8*8LED点阵横向滚动显示
- 51单片机实现LED流水灯(数组方式和位运算方式)
- 51单片机 漩涡流水点阵
- 51单片机LED点阵显示文字
- 51单片机学习(四)用点阵LED显示I LOVE YOU!
- 51单片机 LED点阵的呼吸灯效果
- Tiny4412使用汇编点亮LED,实现流水灯效果
- led流水灯——51单片机程序
- 如何使用.NET生成C#源代码