单片机控制16×16 LED点阵显示汉字实现方法详解

要求:设计硬件电路并编写程序,实现AT89C51单片机控制一个16×16 LED点阵屏拉幕式显示汉字。

一、先提取需要展示汉字的字模,在Keil上写入代码

取字模我用的是字模精灵,注意选纵向取模。

以下是代码:

#include <reg51.h> 
unsigned int i; 
unsigned char j,k;
/*---转换字符 送 ---*/
unsigned char code zifu1[]=
{0x02,0x00,0x02,0x02,0x42,0x04,0x33,0xF8,0x00,0x04,0x11,0x02,0x91,0x0A,0x71,0x12,
0x11,0x62,0x1F,0x82,0x11,0x42,0x31,0x22,0xD1,0x1A,0x11,0x02,0x01,0x02,0x00,0x00};
/*---转换字符 你 ---*/
unsigned char code zifu2[]=
{0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x02,0x08,0x04,0x30,0x18,0xC0,
0xF0,0x02,0x10,0x01,0x13,0xFE,0x10,0x00,0x10,0x80,0x14,0x60,0x18,0x18,0x00,0x00};
/*---转换字符 一 ---*/
unsigned char code zifu3[]=
{0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00};
/*---转换字符 朵 ---*/
unsigned char code zifu4[]=
{0x01,0x02,0x01,0x42,0x02,0x44,0x04,0x44,0x78,0x48,0x40,0x50,0x40,0x60,0x41,0xFF,
0x40,0x60,0x40,0x50,0x7C,0x48,0x02,0x44,0x02,0x44,0x02,0x42,0x02,0x02,0x00,0x00};
/*---转换字符 小 ---*/
unsigned char code zifu5[]=
{0x00,0x10,0x00,0x20,0x00,0xC0,0x07,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0xFF,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x00,0x70,0x00,0x00};
/*---转换字符 红 ---*/
unsigned char code zifu6[]=
{0x04,0x44,0x0C,0xE6,0x35,0x44,0xC6,0x48,0x04,0x48,0x18,0x48,0x00,0x02,0x20,0x02,
0x20,0x02,0x20,0x02,0x3F,0xFE,0x20,0x02,0x20,0x02,0x20,0x02,0x00,0x02,0x00,0x00}; 
/*---转换字符 花 ---*/
unsigned char code zifu7[]=
{0x20,0x20,0x20,0x40,0x20,0x80,0x21,0xFF,0xF6,0x00,0x20,0x08,0x20,0x10,0x20,0x20,
0x27,0xFC,0x20,0x82,0xF1,0x02,0x22,0x02,0x24,0x02,0x20,0x02,0x20,0x1E,0x00,0x00}; 
void delay() //延时函数
{
    for(i=200;i>0;i--)
    ;
    ;
}
void main()	//主函数	
{
    while(1)
{																										 
    for(k=60;k>0;k--)	//显示汉字“送”	
{
    for(j=0;j<16;j++)	//16列轮流扫描	
    {
     P3=j;	//输出列线值	
     P2=zifu1[2*j];	//输出行值高8位	
     P0=zifu1[2*j+1];//延时//输出行值低8位}}
     delay();
    }
}
for(k=60;k>0;k--)	   //显示汉字“你”
{
   for(j=0;j<16;j++)
   {
     P3=j;
     P2=zifu2[2*j]; 
     P0=zifu2[2*j+1]; 
     delay();
   }
}
for(k=60;k>0;k--)	    	//显示汉字“一”
{
   for(j=0;j<16;j++)
   {
     P3=j;
     P2=zifu3[2*j]; 
     P0=zifu3[2*j+1]; 
     delay();
   }
}
for(k=60;k>0;k--)			 //显示汉字“朵”
{                		
   for(j=0;j<16;j++)
   {
     P3=j;
     P2=zifu4[2*j]; 
     P0=zifu4[2*j+1]; 
     delay();
   }
}
for(k=60;k>0;k--)	     	//显示汉字“小”
{               	
   for(j=0;j<16;j++)
   {
     P3=j;
     P2=zifu5[2*j]; 
     P0=zifu5[2*j+1];
     delay();
   }
}
for(k=60;k>0;k--)		  //显示汉字“红”
{		
   for(j=0;j<16;j++)
   {
     P3=j;
     P2=zifu6[2*j]; 
     P0=zifu6[2*j+1];
     delay();
   }
}		
for(k=60;k>0;k--)         //显示汉字“花”	
{	
   for(j=0;j<16;j++)
   {
     P3=j;
     P2=zifu7[2*j]; 
     P0=zifu7[2*j+1];
     delay();
   }
}		
}
}

二、在proteus中加入以下器件并如图所示摆放


注意:此处的点阵是通过四个8×8的点阵显示器拼接在一起的,其中它各个引脚都需要进行连接,具体连接的引脚编号如下:

(另外,有小伙伴显示不出来可能是因为四个点阵显示器的行线和列线接错,所以为了避免错误,教给大家一个方法:如果该元器件保持初始的位置(没有转动方向) ,我们要首先将其左转90°,使其水平放置,那么此时再对它进行编号即可。)

三、看效果

点阵显示器

四、如果觉得闪烁的高低电平阻碍字体显示,可以去掉

具体操作是在proteus里任务栏中点击System→Set Animation Options→把图中这个选项取消就可以了

当然,如果想恢复,就再把它勾选上就可以了。

物联沃分享整理
物联沃-IOTWORD物联网 » 单片机控制16×16 LED点阵显示汉字实现方法详解

发表评论