单片机 8*8点阵C51程序

单片机 8*8点阵C51程序,第1张

一.基于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=0x<zx++)

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

}

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文档在我的空间里面

点阵不管是显示汉字还是数字,一般都是将要显示的汉字或数字用字模提取软件转换出一个数组的内容,然后将这个数组复制到单片机的程序中,以下给你一些C语言程序参考,这个是16*16的点阵,还有就是提醒一下你,你用字模提取软件时要看清楚取码是从哪个方向开始的,然后写程序时也要对应:

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

uint i,k

void delay(uint i)

{

while(i--)

}

//深

uchar code shen[]=

{0xFF,0xFF,0x9F,0x6F,0xAE,0x67,0xBB,0x6F,

0xB7,0x5F,0xAF,0x3F,0xB8,0x00,0xAF,0x3F,

0xB7,0x5F,0xBB,0x6F,0x9F,0x77,0xEE,0xF7,

0xCF,0x7F,0xD9,0x80,0xBB,0xDF,0xF7,0xDF}

//圳

uchar code zhen[]=

{0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,

0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0xFF,

0x80,0x0F,0xFB,0xF3,0xF3,0xDD,0xFB,0xDF,

0x00,0x0F,0xFB,0xEF,0xFB,0xE7,0xFB,0xEF}

//从左到右显示

void display1(uchar *P)

{

uint time=1000//750

for(k=32k>0k=k-2)

{

P2=P[k-2]

P1=P[k-1]

delay(time)

}

P2=0xffP1=0xff

}

//从右到左显示

void display2(uchar *P)

{

uint time=1000//750

for(k=0k<32k=k+2)

{

P2=P[k]

P1=P[k+1]

delay(time)

}

P2=0xffP1=0xff

}

void main()

{

while(1)

{

display1(shen)//深

delay(2000)

display1(zhen)//圳

delay(2000)

}

希望能帮助到你,那个字模提取软件很多,好像只有几百K,很容易下载的,如果下载不了,我发给你也可以。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11143339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存