//@LCD.c
#include "system.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
#include "altera_avalon_pio_regs.h"
#include "altera_avalon_timer_regs.h"
#include "sys/alt_flash.h"
#include "LCD_base.h"
#include<stdio.h>
#define HZK_BASE 0x100000
#define ASC_BASE 0x14b000
/*************************************
* 说明:在(xy)处显示一个汉字
* **********************************/
void put_hz(alt_u32 x, alt_u32 y, alt_u16 zimo)
{
alt_flash_fd *fd;
alt_u8 qm,wm; /*区码和位码*/
alt_u32 seek;
alt_u8 mat[32];/*用来存汉字字模*/
alt_u16 i,j,k,n;
qm=(zimo>>8)-0xa0;/*计算区码*/
wm=(zimo&0xff)-0xa0;/*计算位码*/
seek=(94l*(qm-1)+(wm-1))*32; /*计算汉字在字库文件中的偏移量*/
/*打开字库文件*/
fd = alt_flash_open_dev(CFI_FLASH_NAME);
if(fd==NULL)
{
printf("put_hz: can not open flash device!");
}
alt_read_flash(fd, seek+HZK_BASE,mat,32);
n=(16-1)/8+1;
for(j=0;j<16;j++) /*这部分显示汉字*/
{ for(i=0;i<n;i++)
{
for(k=0;k<8;k++)
{
if(mat[j*n+i]&(0x80>>k)) /*测试为 1 的位则显示*/
put_pixel(x+i*8+k,y+j);
}