哈尔滨理工大学学士学位论文
3.8 本章小结 本章详细介绍了通讯部分、主控单片机部分、驱动部分和显示部分的工作原理和详细的电路连接,及总体的原理图和PCB图。
- 22 -
哈尔滨理工大学学士学位论文
第4章 软件设计
4.1 软件设计思路
本设计采用keil软件编程,系统程序采用进行子程序模块化设计,将显示汉字的点阵码从只读存储器读入到单片机内部的显示缓存区中,再将缓存区的点阵码依时间片从串口送到显示驱动。每行显示时间为1.2ms,每秒扫描50次。用不同的子程序改变显示缓冲存储器中点阵码的排列方式,即可得到不同的显示方式。读入不同地址的汉字显示码,即可改变显示内容。
4.2 Keil软件的开发环境
Keil公司开发的ARM开发工具MDK(Microcontroller Development Kit),是用来开发基于ARM核的系列微控制器的嵌入式应用程序。它适合不同层次的开发者使用,包括专业的应用程序开发工程师和嵌入式软件开发的入门者。MDK包含了工业标准的Keil C编译器、宏汇编器、调试器、实时内核等组件,支持所有基于ARM的设备,能帮助工程师按照计划完成项目。
4.3 基于单片机的点阵LED的软件设计
4.3.1 字模软件的应用
每一个字由16行16列的点阵组成显示。我们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字,也可以显示在256象素范围内的任何图形。我们以“哈”字为例,显示效果如图
- 23 -
哈尔滨理工大学学士学位论文
图2 汉字显示原理
为了弄清楚汉字的点阵组成规律,首先通过列扫描方法获取汉字的代码。首先将16行分成8位的上、下两部分,把发光的象素位编为0不发光的象素位为1的十六进制代码。这样就把要显示的“ 哈”字编为如下代码:
DB 0FFH,80H,0BAH,82H,0BEH,82H,0BAH,80H ;四
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出他的扫描代码从而显示在屏幕上。上述方法虽然能够让我们弄清楚汉字点阵代码的获取过程,但是依靠人工方法获取汉字代码是一件非常繁琐的事情。对于16X16十六进制数据的汉字代码,我们经常采用字库软件查找字符代码,软件打开后输入汉字,点“检取”,十六进制数据的汉字代码即可自动生成,把我们所需要的竖排数据复制到程序中即可,如图4所示。可见,汉字点阵显示一般有点扫描、行扫描和列扫描3种。为了符合视觉暂留要求,点扫描方法的扫描频率必须大于16×64—1 024 Hz,周期小于1 ms即可。行扫描和列扫描方法的扫描频率必须大于16×8—128 Hz,周期小于7.8 ms即可,但是一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。
- 24 -
哈尔滨理工大学学士学位论文
图3 显示结果
4.3.2 程序流程图
软件程序主要由开始、初始化、主程序、字库组成。其中主程序的流程图如图所示。下面的程序能够用来实现显示“哈理工大学” 。
汉字的显示。程序清单如下
- 25 -
哈尔滨理工大学学士学位论文
4.3.3 程序的管脚定义
sbit DATAIN = P1^0; sbit CLK = P1^2; sbit OUT = P1^3;
4.3.4 程序的调用数组
table[6]={0xff,0xc3,0x5d,0x7e,0xee,0x4f}, table1[6]={0xff,0xdd,0x43,0x7e,0xed,0x97}, table2[6]={0xff,0xc3,0x57,0x7e,0xe3,0x45}, table3[6]={0xff,0xdf,0x06,0x00,0x87,0x80}, table4[6]={0xff,0x21,0x52,0x7e,0xe3,0xc7}, table5[6]={0xff,0xe5,0x00,0x7e,0xed,0x97}, table6[6]={0xff,0xc1,0x56,0x7e,0xee,0x4f}, table7[6]={0xff,0xdf,0x07,0x7e,0xee,0xdf};
4.3.5 延时子函数
void Delay_time(void) {
unsigned int i = 0, j = 0; for (i = 0; i < 1; i++) { for (j = 0; j <1; j++); } }
4.3.6 数据写入子函数
void write_data(unsigned int dat) {
unsigned char i; for (i = 0; i < 8; i++) { CLK = 0; DATAIN = dat & 0x80; dat = dat << 1; Delay_time(); CLK = 1; Delay_time(); } }
- 26 -