最近用6块8*8全彩点阵做了一个16*24的全彩屏,每个点可以显示7种颜色,这个可以实现一些好玩的功能,比如俄罗斯方块。

一、原理

1. 点阵屏的16行使用2个74hc138组成4-16译码,之后用三极管9012驱动,用100的限流电阻

2. 点阵屏的24列使用9个74hc595驱动,第一个595驱动第一列8*8点阵的红led,第二个595驱动第一列8*8点阵的绿led,第三个595驱动第一列8*8点阵的蓝led,以此类推,使用100的限流电阻

3. GND与VCC之间接入104瓷片电容与470uF 16V电解电容,增加抗干扰能力

4. 使用74hc245驱动595,提高驱动能力,这样单片机的IO口通过245就可以一次驱动一行的9个595了

5. 点阵的行用高电位,列用低电位

二、接口

1. A、B、C、D为行选线

2. G为屏使能线,接在74hc138上

3. CLK、LATCH、DATA为595驱动线,分别为输入触发、输出触发、串行数据输入

4. GND、VCC

三、实物图

四、代码

1. 头文件

#ifndef __RGBDZH_H__
#define __RGBDZH_H__#include <reg51.h>
#include <intrins.h>#define BLOCK_ROW_COUNT                   2
#define BLOCK_COL_COUNT                 3
#define PIXEL_ROW_COUNT                 (BLOCK_ROW_COUNT*8)
#define PIXEL_COL_COUNT                 (BLOCK_COL_COUNT*8)/*颜色定义*/
#define NONE        0x00
#define RED         0x01
#define GREEN   0x02
#define BLUE        0x04
#define YELLOW  (RED|GREEN)
#define PURPLE  (RED|BLUE)
#define LBLUE       (GREEN|BLUE)
#define WHITE       (RED|GREEN|BLUE)// 端口定义
/*行选*/
sbit A_Port = P1^0;
sbit B_Port = P1^1;
sbit C_Port = P1^2;
sbit D_Port = P1^3;
/*使能*/
sbit En_Port = P1^4;
/*输入触发*/
sbit Clk_Port = P1^5;
/*输出触发*/
sbit Latch_Port = P1^6;
/*串口输入*/
sbit Data_Port = P1^7;// 接口函数
void Lcd_Init();void Lcd_Clear();void Lcd_Refresh();void Lcd_SetPixel( unsigned char x, unsigned char y, unsigned char color);unsigned char Lcd_GetPixel( unsigned char x, unsigned char y);#endif

2. 源文件

#include "RGBDZh.h"// 开启:一次扫描1*24
// 关闭:一次扫描1*8, 一行分三次扫描
#define ENABLE_ROW_SCAN#define COLOR_BASE_COUNT             3
#define CACHE_DATA_SIZE                 (PIXEL_ROW_COUNT*BLOCK_COL_COUNT*COLOR_BASE_COUNT)static unsigned char xdata cache_data[CACHE_DATA_SIZE];
static unsigned char xdata cur_row = 0;
#ifndef ENABLE_ROW_SCAN
static unsigned char xdata cur_block = 0;
#endifvoid Lcd_Init()
{Lcd_Clear();
}void Lcd_Clear()
{unsigned int i;for( i = 0; i < CACHE_DATA_SIZE; i ++)cache_data[i] = 0xff;cur_row = 0;
#ifndef ENABLE_ROW_SCANcur_block = 0;
#endif
}void Lcd_Refresh()
{char i, j;/*74HC595*//*串入数据*/for( i = BLOCK_COL_COUNT * COLOR_BASE_COUNT - 1; i >= 0; i --){unsigned char buff = cache_data[BLOCK_COL_COUNT * COLOR_BASE_COUNT * cur_row + i];for( j = 0; j < 8; j ++){
#ifndef ENABLE_ROW_SCANif( i / COLOR_BASE_COUNT != cur_block)Data_Port = 1;else
#endifif(( buff & 0x01) == 0x01)Data_Port = 1;elseData_Port = 0;Clk_Port = 0;_nop_();_nop_();Clk_Port = 1;_nop_();_nop_();buff >>= 1;}}/*并出数据*/Latch_Port = 0;_nop_();_nop_();Latch_Port = 1;_nop_();_nop_();Latch_Port = 0;_nop_();_nop_();/*74HC138*//*显示数据*/En_Port = 1;A_Port = cur_row & 0x01;B_Port = ( cur_row >> 1) & 0x01;C_Port = ( cur_row >> 2) & 0x01;D_Port = ( cur_row >> 3) & 0x01;En_Port = 0;#ifndef ENABLE_ROW_SCANcur_block ++;if( cur_block >= BLOCK_COL_COUNT){
#endifcur_row ++;if( cur_row >= PIXEL_ROW_COUNT)cur_row = 0;#ifndef ENABLE_ROW_SCANcur_block = 0;}
#endif
}void Lcd_SetPixel( unsigned char x, unsigned char y, unsigned char color)
{unsigned int offset;unsigned char mask;if( x >= PIXEL_COL_COUNT || y >= PIXEL_ROW_COUNT)return;offset = BLOCK_COL_COUNT * COLOR_BASE_COUNT * y + x / 8 * COLOR_BASE_COUNT;mask = 0x01 << ( 7 - x % 8);// Redcache_data[offset] |= mask;if( color & RED)cache_data[offset] &= ~mask;// Greencache_data[offset + 1] |= mask;if( color & GREEN)cache_data[offset + 1] &= ~mask;// Bluecache_data[offset + 2] |= mask;if( color & BLUE)cache_data[offset + 2] &= ~mask;
}unsigned char Lcd_GetPixel( unsigned char x, unsigned char y)
{unsigned char r = NONE;unsigned int offset;unsigned char mask;if( x >= PIXEL_COL_COUNT || y >= PIXEL_ROW_COUNT)return r;offset = BLOCK_COL_COUNT * COLOR_BASE_COUNT * y + x / 8 * COLOR_BASE_COUNT;mask = 0x01 << ( 7 - x % 8);// Redif(( cache_data[offset] & mask) == 0x00)r |= RED;// Greenif(( cache_data[offset + 1] & mask) == 0x00)r |= GREEN;// Blueif(( cache_data[offset + 2] & mask) == 0x00)r |= BLUE;return r;
}

五、测试代码

#include "RGBDZh.h"int main()
{unsigned char index = 0;Lcd_Init();TMOD = 0x01;TH0 = 0xfc;TL0 = 0x66;TR0 = 1;EA = 1;ET0 = 1;while(1){unsigned char colors[7] = { RED, GREEN, BLUE, YELLOW, PURPLE, LBLUE, WHITE};unsigned int i;for( i = 0; i < 16 * 24; i ++){Lcd_SetPixel( i % 24, i / 24, colors[index++]);if( index >= 7)index = 0;{unsigned int j;for(j=0;j<5000;j++);}}Lcd_Clear();}return 0;
}void disp() interrupt 1 using 3
{TH0 = 0xfc;TL0 = 0x66;Lcd_Refresh();
}

请移步www.yintju03.com/blog

8*8全彩点阵的使用相关推荐

  1. 【新坑】全彩点阵驱动协议转换计划

    pico matrix的灯板还没有到 micro用的3535和1209的灯珠也快用完了 ws2812主控的灯珠好贵的 然后逛闲鱼发现了用在led大屏的全彩点阵 先买的p10的,16x32的分辨率,8块 ...

  2. nyan cat,全彩点阵_与Nyan Cat在Linux命令行中休息一下

    nyan cat,全彩点阵 现在是Linux命令行玩具出现日历的第六天,我们在其中探索一些有趣,有趣的游戏,在某些情况下还为您的Linux终端提供了完全无用的玩具. 所有这些都可以在开源许可证下获得. ...

  3. PH10全彩 LED屏 64*16 点阵显示4个汉字调试心得

    2016年1月份一直调试 32*16 点阵的LED显示面板,到今天为止 总算完成了最困难的一部分,现在做一个小小的总结. 1. MBI5120+PR4538驱动调试 MBI5120是串并转换芯片,这里 ...

  4. 红外-星光-黑光-全彩夜视摄像头选型

    星光"."黑光"."AI超微光"."极光",在安防行业这些概念似乎比"低照度摄像机"本身要火的多. 无论营销名 ...

  5. 全彩控制器的编程软件有哪些_【全彩控制器编辑系统下载】全彩控制器编辑系统2020版 v2.1 官方版-开心电玩...

    软件介绍 全彩控制器编辑系统是一款专业的LED显示屏编辑软件,它拥有十分丰富的功能,可以帮助用户轻松管理LED显示屏的展示节目内容.全彩控制器编辑系统操作方便简单,支持文字.图片和视频等多种内容,有需 ...

  6. 基于FPGA的大屏幕全彩LED扫描控制器设计

    关键字:FPGA 大屏幕 LED 1 引言 作为大型平板显示设备的一种,LED 显示屏以其使用寿命长.维护费用低.功耗低等特点在显示领域占有重要的位置.特别在近年,带有红.绿.蓝三基色以及灰度显示效果 ...

  7. 室内全彩led显示屏常见五种设计方案跟优劣势对比分析

    LED显示屏也叫电子显示屏,现有室内led全彩显示屏设计方案很多,led全彩显示屏厂家设计方案不一,现在介绍5种常见的室内LED显示屏设计方案,并且就它们的优缺点做一个简单的介绍,方便朋友们了解.   ...

  8. led显示屏背景墙设计_全彩LED显示屏比例设计因素都有哪些?

    从以往至今的例子来看,全彩LED屏是目前市场主流显示器材元件,很多LED显示屏制造商在前期设计时对全彩LED显示屏尺寸设计一直是个无概念的设计状态. 全彩LED屏幕尺寸正常来说都是根据三个因素构成来进 ...

  9. Ardino基础教程 24_RGB全彩LED

    实验二十四:RGB全彩LED 使用三色全彩LED 制造 显示原理,其实原理是在一棵LED 灯里,有三种颜色的灯,红,绿,蓝.每种颜色的灯上的驱动电压不一样,亮度就不一样,它们组合在一起,就形成了各种颜 ...

最新文章

  1. 普通视频转高清:10个基于深度学习的超分辨率神经网络
  2. mysql io线程异常_mysql主从同步IO线程NO
  3. win7中VS2010中安装CSS3.0问题解决方法
  4. boost::sort模块实现spreadsort 浮点函子排序示例
  5. 又是系统时间惹的祸 TreeView
  6. 军事卫星行业调研报告 - 市场现状分析与发展前景预测
  7. 代码投毒、删库跑路,开源生态链安全该如何保证?
  8. CISSP避坑经验指南
  9. web程序设计-动态网页技术?06
  10. linux下 Wowza安装与ffmpeg测试
  11. 晶圆涨、封测涨、芯片涨、材料涨…涨价的野火烧到哪了?
  12. 十年了,测试变了,我也变了,但总有一些东西未变
  13. pip缓存下载的包文件
  14. ADSL拨号上网和宽带上网有什么区别?
  15. php搬家问题,PHPWIND 搬家教程 一看就会
  16. 第10 章 量化的项目管理
  17. 2020年了,BAT都组建了哪些科技实验室?
  18. android获取本地所有视频,各位大神们 android怎么获取手机本地视频啊?
  19. getline()的使用详解
  20. 代谢组学结果在线分析:不同组差异代谢物高级韦恩图Venn的绘制——UpSet图

热门文章

  1. Electron初阶教程大结局
  2. 华为od统一考试B卷【最少面试官数】Python 实现
  3. css布局小练习,学会它在室友面前小秀一下吧!
  4. 青阳网络文件传输系统 kiftd 1.1.0 正式发布!
  5. 一键清理垃圾文件清理代码.bat
  6. 新思路二级c语言程序,新思路等考通二级C
  7. Linux下常用的压缩与解压工具
  8. IELTS 雅思阅读和听力答题技巧
  9. 计算机运筹学pdf,计算题专题七运筹学计算上典型考题思路讲解.pdf
  10. 【计算机体系结构】计算机体系结构(6) 并行处理技术(2) 多处理机