要求:设计硬件电路并编写程序,实现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°,使其水平放置,那么此时再对它进行编号即可。)
三、看效果
点阵显示器文章来源:https://www.toymoban.com/news/detail-759885.html
四、如果觉得闪烁的高低电平阻碍字体显示,可以去掉
具体操作是在proteus里任务栏中点击System→Set Animation Options→把图中这个选项取消就可以了
当然,如果想恢复,就再把它勾选上就可以了。文章来源地址https://www.toymoban.com/news/detail-759885.html
到了这里,关于单片机控制16*16LED点阵显示汉字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!