单片机 8*8点阵C51程序

如题所述

一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:
1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-8*8-RED。

在这里请牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。

2.在选择完以上三个元件后,我们开始布线,具体如下图:

这里P2是列选,P3连接38译码器后作为行选。

选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。

3.下面让我们把它点亮,先看一个简单的程序:

(将奇数行偶数列的点点亮,效果如下图)

下面是源代码:

/************8*8LED点阵屏显示*****************/

#include<reg51.h>

void delay(int z) //延时函数

{

int x,y;

for(x=0;x<z;x++)

for(y=0;y<110;y++);

}

void main()

{

while(1)

{

P3=0; //行选,选择第一行

P2=0x55; //列选,即该行显示的数据

delay(5); //延时

/*****下同*****/

P3=2; //第三行

P2=0x55;

delay(5);

P3=4; //第五行

P2=0x55;

delay(5);

P3=6; //第七行

P2=0x55;

delay(5);

}

}
上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。重点让我们看while循环内,首先是行选P3=0,此时38译码器的输入端为000,则输出端为01111111,即B0端为低电平,此时选中了点阵屏的第一行,接着列选我们给P2口赋0x55,即01010101,此时又选中了偶数列,紧接着延时。然后分别对第三、五、七行进行相同的列选。这样就点亮了此点阵屏奇数行偶数列交叉的点。

完成这个程序,我们会发现其实点阵屏的原理是如此简单,和数码管的动态显示非常相似,只不过换了一种方式而已。

对不起啦,我传了三次图片都没传上,郁闷哪!希望你能理解哈! 不过我有传一份WORD文档在我的空间里面
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-03
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:
1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus
6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE
,MATRIX-8*8-RED。
在这里请牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。
2.在选择完以上三个元件后,我们开始布线,具体如下图:
这里P2是列选,P3连接38译码器后作为行选。
选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。
3.下面让我们把它点亮,先看一个简单的程序:
(将奇数行偶数列的点点亮,效果如下图)
下面是源代码:
/************8*8LED点阵屏显示*****************/
#include<reg51.h>
void
delay(int
z)
//延时函数
{
int
x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void
main()
{
while(1)
{
P3=0;
//行选,选择第一行
P2=0x55;
//列选,即该行显示的数据
delay(5);
//延时
/*****下同*****/
P3=2;
//第三行
P2=0x55;
delay(5);
P3=4;
//第五行
P2=0x55;
delay(5);
P3=6;
//第七行
P2=0x55;
delay(5);
}
}
上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。重点让我们看while循环内,首先是行选P3=0,此时38译码器的输入端为000,则输出端为01111111,即B0端为低电平,此时选中了点阵屏的第一行,接着列选我们给P2口赋0x55,即01010101,此时又选中了偶数列,紧接着延时。然后分别对第三、五、七行进行相同的列选。这样就点亮了此点阵屏奇数行偶数列交叉的点。
完成这个程序,我们会发现其实点阵屏的原理是如此简单,和数码管的动态显示非常相似,只不过换了一种方式而已。
对不起啦,我传了三次图片都没传上,郁闷哪!希望你能理解哈!
不过我有传一份WORD文档在我的空间里面
第2个回答  2019-10-26
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:
1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus
6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE
,MATRIX-8*8-RED。
在这里请牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。
2.在选择完以上三个元件后,我们开始布线,具体如下图:
这里P2是列选,P3连接38译码器后作为行选。
选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。
3.下面让我们把它点亮,先看一个简单的程序:
(将奇数行偶数列的点点亮,效果如下图)
下面是源代码:
/************8*8LED点阵屏显示*****************/
#include<reg51.h>
void
delay(int
z)
//延时函数
{
int
x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void
main()
{
while(1)
{
P3=0;
//行选,选择第一行
P2=0x55;
//列选,即该行显示的数据
delay(5);
//延时
/*****下同*****/
P3=2;
//第三行
P2=0x55;
delay(5);
P3=4;
//第五行
P2=0x55;
delay(5);
P3=6;
//第七行
P2=0x55;
delay(5);
}
}
上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。重点让我们看while循环内,首先是行选P3=0,此时38译码器的输入端为000,则输出端为01111111,即B0端为低电平,此时选中了点阵屏的第一行,接着列选我们给P2口赋0x55,即01010101,此时又选中了偶数列,紧接着延时。然后分别对第三、五、七行进行相同的列选。这样就点亮了此点阵屏奇数行偶数列交叉的点。
完成这个程序,我们会发现其实点阵屏的原理是如此简单,和数码管的动态显示非常相似,只不过换了一种方式而已。
对不起啦,我传了三次图片都没传上,郁闷哪!希望你能理解哈!
不过我有传一份WORD文档在我的空间里面

用51单片机驱动8*8点阵 的代码
{ for(i=0;i<8;i++){ P3=taba[i]; P1=0xff; DELAY1();} } for(j=0;j<3;j++) \/\/FROM right to left 3 time { for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; DELAY1();}} for(j=0;j<3;j++) \/\/FROM top to bottom 3 time { for(i=0;i<8...

用51单片机以及8*8点阵显示英文字母或者数字(最好是全部数字和字母都说...
{ for(i=0;i<8;i++){ Ser_IN(a[i]);\/\/8X8点阵列扫描 Ser_IN(b[i]);\/\/8X8点阵行扫描 Par_OUT();\/\/74HC595输出显示 } i=0;} } 程序里面还要包含"74HC595.H"把它放在工程文件夹里面就可以了。"74HC595.H"具体程序如下:ifndef __74HC595_H__define __74HC595_H__sbit SD = ...

求个高手写个单片机控制8*8点阵的代码
{ while(1) \/\/无限循环以下程序 { uchar H = 0x01;int i,j;for(j=0;j<8;j++){ for(i=0;i<8;i++){ Delayms(1);P1=0x00; \/\/复位、防止虚亮 P0=~H;P1 = (b[i+1]<<j)|(b[i+1]>>8-j);H=H<<1;} delayms(50);} } } ...

【51单片机系列】文字取模软件使用
【51单片机系列】文字取模软件详解 要利用这款软件在8x8 LED点阵上显示文字,首先双击打开,选择【新建图像】并设置为8x8。操作界面就像一个LED矩阵,点击格子即可控制显示。输入数字0时,通过点击构建其形状。注意取模方式:横向取模时文字纵向排列,纵向取模时则横向排列。完成输入后,Ctrl+Enter确认,图...

C51单片机如何用二维数组让88点阵显示汉字?
先去吧 显示原理 搞明白 这个的话 看不懂 别来问!然后 两个FOR循环 大循环0~7自增 内嵌一个 段码【0~7自增】 :这是8*8 单个的点阵了 你所说的 是要16*16才有能力显示汉字的吧 是这样的 你如果也像上面这样的话一个字就用了整个 48个端口了 你 考虑用 两个...

51单片机 8*8点阵 LED灯全灭 没有效果
你加个延时程序在P3=0xFF下面,不然你刚全灭了,就跳到P3=tab[cnta];在一个时钟周期内,肉眼是看不到的,要延时几秒吧

89c52单片机,点阵8*8 这样驱动妥不妥,哪还不很妥,求大神
P1口供电不行啊,要加上驱动电路的,朋友!否则电流不够,亮度会很低的。

51单片机 8*8点阵26个英文字母怎么样显示
你真厉害,一位数组显示点阵实验,点阵最好是用二位数组,基本思路也就是单片机两个IO口控制点阵的行和列,定义一个二位数组控制点阵每一行要亮拿几个灯,然后下一行亮那几个灯,以此类推,快速刷出没一个亮的灯就能让人感觉是一个字了,好啦,给你程序你自己看吧 unsigned char code table[]={...

51单片机 8*8点阵26个英文字母怎么样显示 ?要从上到下的编码
include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int\/\/---uchar code Table_of_Digits[40][8]={{0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C},\/\/0 {0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C},\/\/1 {0x1C,0x22,0x02,0x02,0x...

单片机共阳极8*8点阵程序看的不太明白望指教。这其中定义了全局变量a和...
比如:扫描{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, \/\/1这个不是要8次吗,所以a++;一直到下一行;;又要从1开始扫描,,所以不能超过8.。当等于8时就清0,循环扫描8次。。不知这样说你是否懂勒。。。

相似回答