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文档在我的空间里面
龙之吻6iinxl8c >《单片机及控制系统》
阅464转62018.09.06关注
88点阵动态显示
硬件组成:单片机最小系统+88点阵+按键
图形移动模式 切换 1 跳动 2 上移 3 下移 4 左移 5 右移
显示内容汉字 一 二 三 四。四个字
仿真图:
打开APP查看高清大图
程序:
打开APP查看高清大图
源代码
#include
#define uchar unsigned char
#define uint unsigned int
// 左右移动 取码方式 阴码逐列
uchar code TAB[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏
0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,/*'一',0*/
0x00,0x40,0x44,0x44,0x44,0x44,0x40,0x00,/*'二',1*/
0x00,0x40,0x54,0x54,0x54,0x54,0x42,0x00,/*'三',2*/
0x00,0x7E,0x52,0x5E,0x42,0x5E,0x52,0x7E,/*'四',3*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏, //空屏
}
// 上下移动及翻页 取模方式 阳码逐行
uchar code TAB1[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,/*'一',0*/
0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0x81,0xFF,/*'二',1*/
0xFF,0xBF,0xC3,0xFF,0xC3,0xFF,0x81,0xFF,/*'三',2*/
0xFF,0x81,0xA9,0xA9,0xA9,0x9D,0xBD,0x81,/*'四',3*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
}
uchar idata Buffer[48]={0}//缓存显示单元
sbit key1=P3^2//外部中断
uchar num=0//用于图形移动切换
char i,t
void delay(uchar t)
你的程序是复制别人的?网上程序大多复制后有问题的.你程序看上去总体没有什么问题,基本都是少了空格,参考别人的程序首先自己要有一定基础(修改别人程序比自己写要难很多的)
如你的
#define
NOP()_nop_()
应该是
#define
NOP()
_nop_()
下面的三个:
sbitS_CLK=P3^6
sbiten573=P1^3
sbitends=P1^2
应该是
sbit
MOSIO=P3^7
sbit
R_CLK=P3^5
sbit
S_CLK=P3^6
sbit
en573=P1^3
sbit
ends=P1^2
下面每一条基本都少空格了,自己慢慢一条条改下,顺便理解下每条语句的意思(这个是要化一定时间的)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)