ARM实验板移植Linux操作系统,LCD显示汉字(名字)

一、实验目的
1.熟悉点阵字库的使用
2.熟悉Linux操作系统的使用
3.熟悉ARM嵌入式系统开发的过程

二、实验内容
1.pc端编写用×和空格显示自己名字的c程序
2.安装交叉编译工具,修改程序,交叉编译
3.制作新的文件系统镜像,烧写。

三、实验设备及工具
硬件:MX1ADS嵌入式实验平台、PC机
软件:Linux操作系统、交叉编译工具

四、实验原理
1.16×16点阵字库HZK16的使用
GB2312规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94个区;第二个字节为“低字节”,对应94个位。
每个区记录94个汉字,位号为该字在该区中的位置。
区码:汉字的第一个字节 - 0xA0 (因为汉字编码是从0xA1区开始的,要算出相对区码)位码:汉字的第二个字节 - 0xA0
汉字在HZK16中的绝对偏移位置:offset =[94×(区号-1)+(位号-1)]×一个字模占用的字节数。
2.MX1 ADS液晶显示的硬件结构
MX1 ADS附带的是一块Sharp的TFT显示屏,分辨率320*240, 16位真彩色。每个像素点对应于一个16位色彩描述存储器,颜色描述方式为R5G6B5。
3.BSP-Linux的显示结构
在MX1 ADS上运行的操作系统是BSP-Linux0.3.6(Kernel 2.4.18)。该系统使用的显示驱动是FrameBuffer。
在FrameBuffer驱动模式下,系统将显示设备映射成文件描述符(/dev/fb0)。应用程序只需打开这个文件,调用mmap()将显示存储器映射为用户空间的内存后,即可在用户空间对现存直接进行读/写

五、实验步骤
1.Linux系统上编写输出自己名字的c程序
代码如下

#include <stdio.h>
#include <stdlib.h>
void LCD_ShowChar(unsigned char *word)
{
    FILE* fphzk = NULL;
    int i, j, k, p, offset;
    int flag;
    unsigned char buffer[32];
    fphzk = fopen("HZK16", "rb");
    if(fphzk == NULL){
        fprintf(stderr, "error hzk16\n");
    }
    offset = (94*(unsigned int)(*word-0xa0-1)+(*(word+1)-0xa0-1))*32;
    fseek(fphzk, offset, SEEK_SET);//SEEK_SET(对应 0):文件开头
    fread(buffer, 1, 32, fphzk);
   //const void *buffer 为指向二进制数据来源的指针;size_t size 为每个数据单元所占的字节数;
   //size_t num 为需要读取的数据单元的个数;FILE *stream 为目的文件指针
    for(j=0; j<16; j++){
	    printf("\n");
	    for(i=0; i<2; i++){
	         for(k=0; k<8; k++){
	         flag = buffer[j*2+i]&(0x80>>k);
	         printf("%s", flag?"* ":"  ");}
	    }
    }
    fclose(fphzk);
    fphzk = NULL;
}
void LCD_ShowString(unsigned char *p)
{
     while(*p>0)
     {
          LCD_ShowChar(p);
	      p=p+2;
     }
}
int main(void)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值