基于单片机的24x24点阵led汉字显示 c语言,基于单片机的点阵式LED滚动汉字显示屏仿真设计...

3. 软件设计

AT89C51单片机是8位机,每次只能送出8位数据,因此要向16×16点阵送出16行阳极驱动,需要送两次,或先送上8行,或先送下8行,为了能够实现每一列字型码的完整显示,采用74LS273进行锁存,否则会出现字型残缺现象。根据设计要求并结合图2的硬件连接进行程序设计,程序设计流程图如图3所示。

利用单片机C语言实现“2008北京欢迎您!”10个字的滚动显示,阿拉伯数字和标点符号按16×8点阵编码,汉字按16×16点阵编码, “2008北京欢迎您!”字型码表如下:

{0x00,0x00,0x0C,0x1C,0x10,0x24,0x10,0x24,0x10,0x44,0x10,0x84,0x0F,0x0E,0x00,0x00},

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},

{0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},

{0x00,0x00,0x0E,0x04,0x08,0x0C,0x08,0x0C,0x08,0x08,0x08,0x10,0xFF,0xFE,0x00,0x00},

{0x00,0x00,0x3F,0xFC,0x41,0x02,0x42,0x02,0x06,0x02,0x0E,0x06,0x0C,0x0C,0x00,0x00},

{0x00,0x00,0x20,0x04,0x20,0x08,0x27,0x98,0x24,0xB0,0x24,0x82,0xA4,0x81,0x64,0xFE},

{0x24,0x80,0x24,0x80,0x24,0xA0,0x27,0xB0,0x60,0x1C,0x20,0x08,0x00,0x00,0x00,0x00},

{0x28,0x04,0x24,0x08,0x22,0x32,0x21,0xC2,0x26,0xC2,0x38,0x34,0x04,0x04,0x18,0x08},

{0xF0,0x30,0x17,0xC0,0x10,0x60,0x10,0x18,0x14,0x0C,0x18,0x06,0x10,0x04,0x00,0x00},

{0x02,0x02,0x82,0x04,0x73,0xF8,0x20,0x04,0x00,0x02,0x3F,0xE2,0x20,0x42,0x40,0x82},

{0x40,0x02,0x3F,0xFA,0x20,0x02,0x20,0x42,0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00},

{0x01,0x00,0x02,0x04,0x0C,0x1C,0x3F,0xC0,0xC0,0x1C,0x09,0x02,0x16,0x02,0x60,0x92},

{0x20,0x4A,0x2F,0x82,0x20,0x02,0x24,0x0E,0x22,0x00,0x31,0x90,0x20,0x0C,0x00,0x00},

{0x00,0x00,0x00,0x08,0x1F,0xDC,0x3F,0x08,0x3C,0x00,0x30,0x00,0x00,0x00,0x00,0x00},

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}。

19b5650e45a2ea57b5502b1b22df4bd4.png

(a)主程序流程图                    (b)中断服务程序流程图

图3. 程序流程图

动态扫描显示程序代码如下:

while (1)

{for (i=0;i<8;i++) //显示左半边屏幕

{ P0=*(p+offset+2*i);

P2=i|0x90; //P2.4=1,P2.3=0 选中U3, 输出扫描码给U7

delay();

P0=*(p+offset+2*i+1);

P2=i|0x08; //P2.4=0,P2.3=1 选中U2, 输出扫描码给U6

delay(); }

for (i=8;i<16;i++) //显示右半边屏幕

{ P0=*(p+offset+2*i);

P2=(i-8)|0xC0; //P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9

delay();

P0=*(p+offset+2*i+1);

P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8

delay();

} }

一、汉字字库的制作 汉字的取模采用软件ts3“点阵字库生成器3.8”模用“横向取模方1”,软件网上可以找到。用该软件可以制作任何字体和不大于32×32字号的汉字库。注意:做好的字库要用ULTRAEDIT或WINHEX等编辑软件,将字库从后面开始所有0X00的字节直到不含0x00的那些行删掉,以减少字库大小。 ASCII码取模,用PCtoLCD2002.exe软件制作,取模方“顺向(高位在前)、逐行”按16×16、24×24等方取模,保存C文件,删除文件内的注释部份,只保存纯粹的16进制文件如:0x00,0x00,注意删除最后一个逗号,网上下载C文件转BIN软件,将ASCII的C文件转成字库文件.bin后缀文件。 二、图标字库的制作 在选择字体制作的时候,偶然选择了WINDOWS自带的WEBDINGS等4个字体,打开看到是一些图标字库,于是产生了制作图标字库用于液晶屏显示的想法,字库可不可以编辑修改,制作自己要求的图标呢?网上搜索果然有这样软件,下载字库编辑 FontCreator如下图:该软件非常容易上手,几分钟就可以熟练使用,十分方便。 1、我选择的是修改WEBDINGS字库,先备份WINDOWS\FONTS\WEBDINGS.TTF文件、然后删除该文件,用备份的文件复制一个取名为:WEB.TTF(因Webdings.ttf文件是WINDOWS系统管理的文件,无论你取什么名,最后复制粘贴安装的时候都会默认为Webdings.ttf名字)。 2、图标准备:可以选择任何后缀的图像文件,ICO、JPG、png等文件,用Photoshop等软件做去色处理,转换成黑白图像,转存为jpg后缀的文件,或者用矢量图制作软件CorelDraw、图标制作软件 IconWorkshop,无论什么图像只要是黑白的即可。用FontCreator软件开始每个字的修改,调整尺寸不超边界即可,FontCreator的任何设置不要修改,保持默认,你只要做插入图像、调整尺寸的排版工作。 3、特别说明:ASCII码的后128个图标,因为键盘无法输入(包括ALT+小键盘数字组合),不必修改,可以把你喜欢的复制到94个ASCII码的区域里。“””和“\”对应的图标可以不用修改,因为C编译器认为在输出字符串的时候为非法字符。 三、字库更新 说实话,刚转入STM32才接触到无处不在的结构体C语句,目前还不会使用,只好按照自己的想法,采用笨办法来更新字库,好在字库更新只做1、2次而已。用ULTRAEDIT打开字库文件,依次追加其他字库文件,需记住追加字库的名称和起始地址,如:宋体16×16的地址是0002DD90H------0006DBCFH那么把起始地址0002DD90H转换到10进制为:187792,后追加的字库如果不占整行,用00补齐。4.3寸的液晶屏的FLASH是W25Q16换成8M字节的W25Q64,SD卡的FATFS文件系统打不开大于2M字节的文件,因此制作了5个字库文件,每个大约1-1.7M左右,用开发板带的更新字库函数,分5次刷入FLASH中,注意:第二次以后刷入的时候,要修改文件名,屏蔽擦除整片FLASH的语句,修改写入地址即可。 四、汉字显示的实现 既然是单片机控制彩屏,那么单一的16×16的汉字显示,在界面设计上就显得力不从心了。尤其的4.3寸以上的彩屏,蝇头小字显得比例失调,因此就需要大字体来做显示,那末,如何实现大字体显示呢? (后面内容请见附件说明)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值