led矩阵循环显示多个汉字

#单片机led矩阵显示多个汉字

首先:我使用的是普中的单片机,用到了74HC595芯片(这是一个串行输入,并/串 行输出的移位寄存器芯片(就是用来扩展IO口的))

第一步:先写预处理模块

#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;
//因为采用的595芯片,所以用来显示的位和段选码都要自己写,我这个是用来显示“为中国加油”这几个汉字的
//led矩阵的连接方式为共阴
//这个是位选
u8 smgwei[]=
{
  0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x00,
	0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x00,
  0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x00,
	0x01,0x02,0x04,0x08,0x00,0x20,0x40,0x80,
	0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
};
//这个是段选
u8 smgduan[]=
{
	0x02,0x85,0x7E,0x05,0x54,0xA4,0xFC,0x00,
  0x00,0x1C,0x14,0xFF,0xFF,0x14,0x1C,0x00,
	0xFF,0x81,0xD5,0xFD,0xD5,0xA1,0xFF,0x00,
	0x24,0x5F,0x84,0xFC,0x00,0x3C,0x24,0x3C,
	0x8A,0x54,0x20,0xF8,0xA8,0xFE,0xA8,0xF8,
};
/*这三个是595芯片里面的管脚
SRCLK和RCLK1是用来移位的(都是上升沿有效),SER是数据寄存器
*/
sbit SRCLK=P3^6;
sbit RCLK1=P3^5;
sbit SER=P3^4;

u8 k;

第二步:是写驱动595芯片的模块程序

void delay(u8 z)//用来延时的
{
  while(z--);
}
//因为我用的led矩阵是8*8的,所以我这里采用的是两个595芯片连接
//如果是16*16的,就可以采用四个595芯片连接
void HC595SendByte(u8 dit1,u8 dit2)
{
	u8 a;
	for(a=0;a<8;a++)
	{
		SER=dit1>>7;//因为是移位芯片,所以要先取最高位移进去
		dit1<<=1;//将次高位变为最高位
		
		SRCLK=0;	//移位,(上升沿有效) 下同
		_nop_();
		SRCLK=1;	
	}
	for(a=0;a<8;a++)
	{
		SER=dit2>>7;
		dit2<<=1;
		
		SRCLK=0;	
		_nop_();
		SRCLK=1;	
	}
	RCLK1=0;//将数据输出给led矩阵(上升沿有效)
	_nop_();
	RCLK1=1;
}

第三步:用来实现汉字闪动显示的模块

void MOV(u16 j)//传过得的参数用来控制显示的快慢
{
    u8 i;
	while(j--)//这里采用while循环是因为要延时;若不用,就会导致显示内容闪的很快
	{
		for(i=0;i<8;i++)
	{
		//因为用的是一维数组,使用在数组中取值输入到595芯片时,加了个K		
	    HC595SendByte(~smgwei[i+8*k],smgduan[i+8*k]);//位码取反是因为led矩阵采用是共阴接法,写的时候写了反的
        delay(10);		
	 }				
	}
	delay(200000);	
	if(k==4)//当k等于4的时候,说明数组的内容已经显示完了,
	 {
		k=0;
	    delay(10000);
	 }
   else			
		k++;
}

最后一步:写主函数

void main()
{
		
	while(1)
	{
		MOV(500);
	  		
	}
}

总结:
第一次写博客,没经验,有什么问题欢迎大佬T我。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
5月12日发布完美版 这次发布的PCtoLCD2002完美版与前一版本相比没有增加太多的功能,因为我觉得现有的这些功能已经足够用于生成各种字模的需要了,所以完美版的主要工作是反复测试,精心去除各种BUG,以及调节一些细微之处,目的当然就是追求完美!不过世上不会有真正完美的东西,这个软件也不例外,而且这个软件从头至尾全部是我一个人编写完成,精力有限,难免会顾此失彼,如果大家发现了这个版本中存在的BUG,请及时告诉我。 更新说明: 1。界面采用新的字体,不会再有那种难看的黑色粗体字,比以前的要漂亮多了。 2。加入全面的提示帮助,尽量减少普通用户的各种疑惑。 3。修正生成文件的扩展名的一些BUG,不会总是加上FON的扩展名了。 4。修正生成字模数据的一些格式BUG,现在生成的C51格式字模数据基本上可以直接粘贴到源程序中使用而不需要修改了 5。加入新的字模数据格式调整项,允许用户更自由的定制自己需要的数据格式 6。最重要的更新:全面支持保存当前设置功能,用户设置的字模格式,主窗口状态和字库生成窗口选项信息均可保存,下一次打开窗口时不用重新设置。 7。修正了新建图象时会自动跳到图形模式的BUG 8。增加输出紧凑格式数据选项,可以生成不包含空白行的字模数据。 9。完善了每行数据显示个数的功能,可以任意设置每行显示的数据个数,并同时可以设置每行索引数据显示个数。 10。修正了取模说明的一些错误,并改动了格式。 11。现在当用户选择10进制输出时,会自动去掉生成字模数据前的“0x",或后面的“H”,选择16进制时则会自动加上。 12。对各个窗体重新设计以全面适应最大化的需要,如果您觉得当前窗口不够大,可以最大化使用。 13。增加生成英文点阵字库功能,可自动生成ASCII码从0-127的任意点阵字库,使用方法同生成国标点阵字库功能。 14。再次优化代码,去掉各种调试信息,使程序速度再快一些。 15。还有许多细微的调整我记不清了…… 需要注意的地方: 在测试的过程中我发现了一个问题:在WIN98或WINME下当用户直接生成特大点阵的字模时(例如320*320,1024*768的汉字字模),此时由于数据量非常庞大,而WIN98/WINME会有64K的数据容量限制,所以在主窗口中是无法得到全部的字模数据的,这时您需要使用字库生成功能,通过形成一个数据文件才能得到完整的字模数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值