首页 > 应用 > 单片机应用
[导读]
图上摆放的是上面一排引脚是行,下面一排引脚是列。行是LED阳极。 行列各由四个74HC573控制,每个控制8个脚。同时注意单片机P0口上拉保持供电充足。 还有注意每行的扫描时间要合理设置。否则会有显

本文引用地址: http://www.21ic.com/app/mcu/201806/761581.htm


图上摆放的是上面一排引脚是行,下面一排引脚是列。行是LED阳极。

行列各由四个74HC573控制,每个控制8个脚。同时注意单片机P0口上拉保持供电充足。

还有注意每行的扫描时间要合理设置。否则会有显示残缺。根据实际设置吧!!!

横向显示4个字:少占鱼制作

其实可以把这个程序和我另外的一个单片机串口与电脑通信的程序结合起来,加上我用VC做的上位机界面。可以自由输入显示内容,还可以反向控制电脑的一些操作。不过我还是热衷不用电脑输入显示内容,而用一只感应笔扫描一个32*32LED模板,实现自己点哪就让哪个LED亮的效果。简单有省事。等我做出实物来再发吧!!!其实就是加个光敏三极管,LED模板上各个LED点亮时间不同。通过测频达到取某点坐标的目的。

//32*32点阵LED显示,由8*8点阵组成。列高行低点亮

/*****我在修改的时候,总是字显示不完整,一开始还以为是哪里有错,后来改延时程序也不行,最后每行连续扫描几次,可以了******/

#include

#define uchar unsigned char

#define uint unsigned int

//少占鱼制作 河北正定欢迎您 长沙航空职业技术学院 2010 年QQ:411656434

//邮箱:ssou_1985@163.com

sbit CS1=P1^0;

sbit CS2=P1^1;

sbit CS3=P1^6;

sbit CS4=P1^7;

sbit L1=P1^2;

sbit L2=P1^3;

sbit L3=P1^4;

sbit L4=P1^5;

uchar hang[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar code tab[]={

0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x20,

0x09,0x10,0x11,0x0C,0x11,0x04,0x21,0x10,

0x41,0x10,0x01,0x20,0x01,0x40,0x00,0x80,

0x01,0x00,0x02,0x00,0x0C,0x00,0x70,0x00,

//少

0x02,0x00,0x02,0x00,0x02,0x08,0x03,0xFC,

0x02,0x00,0x02,0x00,0x02,0x10,0x3F,0xF8,

0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,

0x20,0x10,0x20,0x10,0x3F,0xF0,0x20,0x10,

//占

0x04,0x00,0x04,0x00,0x0F,0xE0,0x10,0x40,

0x20,0x88,0x7F,0xFC,0xA1,0x08,0x21,0x08,

0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,

0x20,0x08,0x00,0x04,0xFF,0xFE,0x00,0x00,

//鱼

0x04,0x04,0x24,0x04,0x25,0x04,0x3F,0xA4,

0x24,0x24,0x44,0xA4,0xFF,0xE4,0x04,0x24,

0x3F,0xA4,0x24,0xA4,0x24,0xA4,0x24,0x84,

0x26,0x84,0x25,0x04,0x04,0x14,0x04,0x08

//制

};

void delay(uint);

void delayus();

void xianshi();

void dis1();

void dis2();

void dis3();

void dis4();

/****************************************************************/

//主函数入口

main()

{

delayus();

delay(20);

P0=0x00;

P2=0xff;

L1=0;

L2=0;

L3=0;

L4=0;

CS1=0;

CS2=0;

CS3=0;

CS4=0;

while(1)

{

xianshi();

}

}

void xianshi()

{

dis1();

dis1();

dis2();

dis2();

dis3();

dis3();

dis4();

dis4();

}

/************第一个16*16点阵显示***************/

//

void dis1()

{

//第一个16*16点阵开始显示

uchar i,j;

/*****我在修改的时候,总是字显示不完整,一开始还以为是哪里有错,后来改延时程序也不行,最后每行连续扫描几次,可以了******/

//少占鱼 河北正定欢迎您 长沙航院 QQ:411656434

for(i=0;i<8;i++)

{

for(j=0;j<8;j++)//特别注意这里每组点阵的每行扫描8遍,人眼看起来才完整,否则会有残缺不亮

{

/*****我在修改的时候,总是字显示不完整,一开始还以为是哪里有错,后来改延时程序也不行,最后每行连续扫描几次,可以了******/

P2=hang[i];

CS1=1;

P0=tab[i*2];

L1=1;

delay(1);

P0=0x00;

L1=0;

P0=tab[i*2+1];

L2=1;

delay(1);

P0=0x00;//这句才是真正关闭阳极正电的

L2=0; //关闭列,这句是使以后的操作不再影响本列状态

P2=0xff;//这句才是关闭阴极正电的语句

CS1=0; //关闭行低,使以后的操作部影响本行状态

i++;

}

}

/*****我在修改的时候,总是字显示不完整,一开始还以为是哪里有错,后来改延时程序也不行,最后每行连续扫描几次,可以了******/

for(i=8;i<16;i++)

{

for(j=0;j<8;j++)//特别注意这里每组点阵的每行扫描8遍,人眼看起来才完整,否则会有残缺不亮

{

P2=hang[i%8];

CS2=1;

P0=tab[i*2];

L1=1;

delay(1);

P0=0x00;

L1=0;

P0=tab[i*2+1];

L2=1;

delay(1);

P0=0x00;//这句才是真正关闭阳极正电的

L2=0; //关闭列,这句是使以后的操作不再影响本列状态

P2=0xff;//这句才是关闭阴极正电的语句

CS2=0; //关闭行低,使以后的操作部影响本行状态


换一批

延伸阅读

[真心话] 一个实例简单明了告诉你为什么要用RTOS

一个实例简单明了告诉你为什么要用RTOS

对于搞单片机的特别用8051系列工程师来说,谈到单片机的RTOS,很多时候会问一句:“为什么要用RTOS?单片机就这一点资源,使用RTOS能保证效率吗?”......

关键字:单片机 RTOS

[真心话] 单片机大师郭天祥的大学六年,看看与你的有何不同?

单片机大师郭天祥的大学六年,看看与你的有何不同?

在哈尔滨工程大学五年,我在学校电子创新实验室呆了四年,这四年里创新实验室给我提供了良好的学习环境和完善的实验设备;在这里与众多电子爱好者的交流中,使我学到了更多的专业知识;在学校老师们的教导下,让我学会了如何做一名合格的大学生。......

关键字:单片机 郭天祥
条评论

我 要 评 论

网友评论

技术子站

更多

项目外包

更多

推荐博客