单片机控制16*16LED点阵显示汉字

要求:设计硬件电路并编写程序,实现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→把图中这个选项取消就可以了
在这里插入图片描述
当然,如果想恢复,就再把它勾选上就可以了。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值