实验二十五:8X8LED点阵

点阵实验另一版本代码参考如下链接下载:ArduinoCode25-8X8LED点阵num.ino
点阵在我们生活中很常见,很多都有用到他,比如LED 广告显示屏,电梯显示楼层。公交车报站,等等,,,数不胜数。废话不多说,赶紧学习吧。

1、8X8LED点阵原理图

2、8X8LED点阵实物图

图为8×8点阵LED外观及引脚图,其等效电路如图所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴

3、8X8LED点阵扫描方式
LED一般采用扫描式显示,实际运用分为三种方式

  1. 点扫描
  2. 行列扫描

16×64=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。

4、8X8LED点阵应用举例
点阵内部结构及外形如下,8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。

一般我们使用点阵显示汉字是用的1616的点阵宋体字库,所谓1616,是每一个汉字在纵、横各16点的区域内显示的。也就是说得用四个88点阵组合成一个1616的点阵。如下图所示,要显示“你”则相应的点就要点亮,由于我们的点阵在列线上是低电平有效,而在行线上是高电平有效,所以要显示“你”字的话,它的位代码信息要取反,即所有列(13~16脚)送(1111011101111111,0xF7,0x7F),而第一行(9脚)送1信号,然后第一行送0。再送第二行要显示的数据(13~16脚)送(1111011101111111,0xF7,0x7F),而第二行(14脚)送1信号。依此类推,只要每行数据显示时间间隔够短,利用人眼的视觉暂停作用,这样送16次数据扫描完16行后就会看到一个“你”字;第二种送数据的方法是字模信号送到行线上再扫描列线也是同样的道理。同样以“你”字来说明,16行(9、14、8、12、1、7、2、5)上送(0000000000000000,0x00,0x00)而第一列(13脚)送、“0”。同理扫描第二列。当行线上送了16次数据而列线扫描了16次后一个“你”字也就显示出来了。

因此,形成的列代码为 00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别依次送到相应的列线上面,即可实现“0”的数字显示。

点亮8X8点阵LED的一个LED如下:


这个是显示“0”的程序代码。
//定义了一个数组,用来存放“0”字的字模
unsigned char Text[]={0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c};
void Draw_point(unsigned char x,unsigned char y)//画点函数
{
clear_();
digitalWrite(x+2, HIGH);
digitalWrite(y+10, LOW);
delay(1);
}
void show_num(void)//显示函数,最终还是调用了画点函数。
{
unsigned char i,j,data;
for(i=0;i<8;i++)
{
data=Text[i];
for(j=0;j<8;j++)
{
if(data & 0x01)Draw_point(j,i);
data>>=1;
}
}
}
void setup(){
int i = 0 ;
for(i=2;i<18;i++)
{
pinMode(i, OUTPUT);
}
clear_();
}
void loop()
{
show_num();
}
void clear_(void)//清除屏幕
{
for(int i=2;i<10;i++)
digitalWrite(i, LOW);
for(int i=0;i<8;i++)
digitalWrite(i+10, HIGH);
}


实验截图



Arduino 8x8点阵 //注意引脚图是反起看的,当原件插上去的时候,左右交换。

连线对应关系:
要在其中一列加上1K或220欧姆限流电阻
Arduino 8x8点阵
2 ----------------------0 //行选0
3 ----------------------1 //行选1
4 ----------------------2 //行选2
5 ----------------------3 //行选3
6 ----------------------4 //行选4
7 ----------------------5 //行选5
8 ---------------------6 //行选6
9 ---------------------7 //行选7
Arduino 8x8点阵
10 ---------------------A //列选A
11 ---------------------B //列选B
12 ---------------------C //列选C
13 ---------------------D //列选D
14 ---------------------E //列选E
15 ---------------------F //列选F
16 ---------------------G //列选G
17 ---------------------H //列选H

程序代码

//the pin to control ROW
const int row1 = 2; // the number of the row pin 9
const int row2 = 3; // the number of the row pin 14
const int row3 = 4; // the number of the row pin 8
const int row4 = 5; // the number of the row pin 12
const int row5 = 6; // the number of the row pin 1
const int row6 = 7; // the number of the row pin 7
const int row7 = 8; // the number of the row pin 2
const int row8 = 9; // the number of the row pin 5
//the pin to control COl
const int col1 = 10; // the number of the col pin 13
const int col2 = 11; // the number of the col pin 3
const int col3 = 12; // the number of the col pin 4
const int col4 = 13; // the number of the col pin 10
const int col5 = 14; // the number of the col pin 6
const int col6 = 15; // the number of the col pin 11
const int col7 = 16; // the number of the col pin 15
const int col8 = 17; // the number of the col pin 16
void setup(){
int i = 0 ;
for(i=2;i<18;i++)
{
pinMode(i, OUTPUT);
}
pinMode(row5, OUTPUT);
pinMode(row6, OUTPUT);
pinMode(row7, OUTPUT);
pinMode(row8, OUTPUT);
for(i=2;i<18;i++) {
digitalWrite(i, LOW);
}
for(i=2;i<18;i++) {
digitalWrite(row5, LOW);
}
}
void loop(){
int i;
for(i=2;i<10;i++)
{digitalWrite(i, HIGH);delay(200);clear_();
}
//delay(1000);
}
void clear_(void)
{for(int i=2;i<18;i++)digitalWrite(i, LOW);
}
//the pin to control ROW
const int row1 = 2; // the number of the row pin 9
const int row2 = 3; // the number of the row pin 14
const int row3 = 4; // the number of the row pin 8
const int row4 = 5; // the number of the row pin 12
const int row5 = 6; // the number of the row pin 1
const int row6 = 7; // the number of the row pin 7
const int row7 = 8; // the number of the row pin 2
const int row8 = 9; // the number of the row pin 5
//the pin to control COl
const int col1 = 10; // the number of the col pin 13
const int col2 = 11; // the number of the col pin 3
const int col3 = 12; // the number of the col pin 4
const int col4 = 13; // the number of the col pin 10
const int col5 = 14; // the number of the col pin 6
const int col6 = 15; // the number of the col pin 11
const int col7 = 16; // the number of the col pin 15
const int col8 = 17; // the number of the col pin 16
unsigned char Text[]={0x00,0x1c,0x22,0x22,0x22,0x22,0x22,0x1c};
void Draw_point(unsigned char x,unsigned char y)
{clear_();digitalWrite(x+2, HIGH);digitalWrite(y+10, LOW);delay(1);
}
void show_num(void)
{unsigned char i,j,data;for(i=0;i<8;i++){data=Text[i];for(j=0;j<8;j++){if(data & 0x01)Draw_point(j,i);data>>=1;}  }
}
void setup(){
int i = 0 ;
for(i=2;i<18;i++) { pinMode(i, OUTPUT); }  clear_();
}
void loop()
{ show_num();
}
void clear_(void)
{for(int i=2;i<10;i++)digitalWrite(i, LOW);for(int i=0;i<8;i++)digitalWrite(i+10, HIGH);
}

Ardino基础教程 25_8X8LED点阵相关推荐

  1. Ardino基础教程 19_舵机控制

    实验十九:舵机控制 舵机控制实验Servo库版本的代码参考如下链接:ArduinoCode19-舵机控制Servo库版本代码.ino 舵机是一种位置伺服的驱动器,主要是由外壳.电路板.无核心马达.齿轮 ...

  2. Ardino基础教程 15_火焰报警器

    实验十五:火焰报警器 认识火焰传感器 火焰传感器(即红外接收三极管)是机器人专门用来搜寻火源的传感器,本传感器对火焰特别灵敏.实物如图: 火焰传感器利用红外线对火焰非常敏感的特点,使用特制的红外线接收 ...

  3. Ardino基础教程 14_倾斜开关

    实验十四:倾斜开关 倾斜开关控制led灯的亮灭 实验器材清单 滚珠开关 1个 LED灯 1个 220欧姆直插电阻 1个 面包板 1个 面包板跳线 1扎 实验接线图 按照Arduino教程将控制板.扩展 ...

  4. Ardino基础教程 2_LED闪烁实验

    实验二:LED 闪烁实验 LED 小灯实验是比较基础的实验之一,上一个" Hello World!"实 验里已经利用到了Arduino 自带的LED,这次我们利用其他I/O 口和 ...

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

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

  6. Ardino基础教程 23_步进电机

    实验二十三:步进电机 步进电机是一种将电脉冲转化为角位移的执行机构.通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角).你可以通过控制脉冲个数来控制 ...

  7. Ardino基础教程 22_PS2摇杆

    PS2摇杆 PS2 摇杆一般可以用来控制小车等等,其构造主要就是两个10K 的电位器,还有一个按键开关.五个端口分别为VCC,X,Button,Y,GND. 实验接线图 以下为参考程序代码: #inc ...

  8. Ardino基础教程 21_最简单最快控制LCD1602

    实验二十一:最简单最快控制LCD1602 实验接线图 下面个摇杆模块,不用接先不忙管. #include <LiquidCrystal.h> LiquidCrystal lcd(12, 1 ...

  9. Ardino基础教程 21_LCD1602液晶屏

    实验二十一:LCD1602液晶屏 本次试验使用arduino 直接驱动1602 液晶显示文字 1602 液晶在应用中非常广泛,最初的1602 液晶使用的HD44780 控制器,现在各个厂家的1602 ...

最新文章

  1. ActivityRouter 框架简单实用
  2. Netbeans配置Java SE嵌入式平台(树莓派)
  3. vue-router命名路由
  4. AI:你们是不是在等一顶红帽子?
  5. python缺省参数与多个函数返回值
  6. linux dbx 进程,dbx 命令命令详解
  7. 解决solidworks导入stl文件就卡死的问题
  8. 2018 考研 408 经验贴——复试
  9. java找不到符号 类_得到错误java:找不到符号类
  10. 定量数据和定性数据_定性数据:赋予大数据意义的上下文
  11. 第6章 面向对象基本特征
  12. vivo手机计算机怎么开语音,vivo怎么打开语音助手
  13. Alpha课堂展示(麻瓜制造者)
  14. 别人都是笑起来很好看,但是你却不一样,你是看起来很好笑。
  15. php webshell 木马,消灭php webshell与一句话木马
  16. 什么是AVIF?如何在你的网站上使用AV1格式图像
  17. Django项目骨架与常见配置修改
  18. mysql之自定义函数
  19. 巴西本地支付PagSeguro
  20. C#:DataGridView边框线、标题、单元格的各种颜色

热门文章

  1. css3画图那些事(三角形、圆形、梯形等)
  2. 修改Linux安装软件镜像源为阿里云
  3. Spring MVC 3 深入总结
  4. 织梦DedeCMS播放本地视频文件插件
  5. 自动生成Insert数据的SQL脚本
  6. MS Vs.net 2003 Sp1发布!
  7. UA PHYS515A 电磁理论V 电磁波与辐射1 电磁波的方程
  8. UA MATH564 概率论 高阶矩的计算:有限差算子方法2
  9. MongoDB基本概念学习 - 文档
  10. VC++把输入的字符转换为十六进制