AVR单片机_实验7-基于3310LCD上显示图片和文字

曾巧文 发布于:2012-8-10 19:01 分类:AVR单片机 标签: 实验 单片机 AVR

1、实验目的

通过实验,掌握如何在嵌入式系统上实现小型的自定义字库,并且实现高效汉字显示。

2、实验内容

(1) 在小型嵌入式系统中制作小型汉字字库;

(2) 实现汉字、图标的液晶显示;

3、实验预习要求

仔细阅读ATmega16单片机的数据手册中SPI接口章节;仔细阅读PCD8544数据手册,了解3310液晶的命令和显示RAM的内部结构;

4、实验步骤

1、启动ICCAVR,新建工程文件“LCD.PRJ”,新建LCD3310.c文件,并将LCD3310.c文件添加到Adkey工程中,并设置project->option->target 下的device configuration 选择ATMega16;

2、利用Application Builder产生SPI的初始化代码,参考教材中关于SPI初始化代码的生成方法。参照实例代码完成液晶模块的初始化,字符、数字和汉字的显示功能。

注:字符、数字和汉字的字模可以用字模软件自动生成。推荐两款字模软件:

LCD3310.exe:专门针对3310液晶模块的字模生成软件,特点是简单方便,直接输入汉字,然后选择字模点阵,最后生成字模即可; 缺点是:只能用于3310液晶的字模生成,不能用于其他LCD模块,无法调节字幕的上下偏移位置;

Pctolcd2002完美版.exe :特点是功能强大,适用范围广,缺点是操作复杂,需要设置生成字模的模式;

3、在LCD3310.c文件下添加相应代码,实现在3310液晶模块上显示字符、数字和汉字。选择【Project】->【Rebuild All】编译工程,通过PROGISP程序下载程序到单片机,观察实验现象。

4、尝试按照LCD_write_english_string()的显示方式设计汉字显示函数,例如LCD_disp_chinese(0,0,"计算机科学与技术"),在坐标为0,0的位置开始显示“计算机科学与技术”

5、按下图所示显示常用图标。

 AVR单片机_实验7-基于3310LCD上显示图片和文字

5、实验效果的要求如下

1、 学习汉字字模软件的使用,并运用字模软件生成嵌入式汉字字库,阅读英文字符显示函数void LCD_write_char(unsigned char c),该函数的参数为英文字母的Ascii码,请设计显示单个汉字的函数,函数原型为void LCD_write_CHchar(unsigned int c),参数为汉字的即内码;(只写出函数LCD_write_CHchar()的实现过程)

2、设计汉字显示函数LCD_disp_CHstr(U8 x,U8 y,U8* string),x,y为坐标,string是汉字字符串指针。并运用该函数实现在3310液晶上显示中文字符,效果如下:第一行显示:“嵌入式科学技术”第二行显示“计算机工程系”,第三行显示“中山学院”(居中)。

3、 实现常用图标的显示、反显等功能,要求制作的效果如上图所示:

 

//ICC-AVR application builder : 2012-5-12 19:51:03
// Target : M16
// Crystal: 4.0000Mhz
#include <iom16v.h>
#include <macros.h>

#include "3310LCD.h"

void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x70;
 PORTB = 0x00;
 DDRB  = 0xB0;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;
}

//SPI initialize
// clock rate: 1000000hz
void spi_init(void)
{
 SPCR = 0x50; //setup SPId
 SPSR = 0x00; //setup SPI
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 spi_init();
 LCD_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

int main()
  {
    init_devices();
	LCD_write_chinese_string(0,0,"我们嵌入式");	
	LCD_write_ico(0,3);
	return 0;  
  }
#include "3310LCD.h"

const HZZM_12 chinese_12[] = 
{
    {
	 "我",	 
	 {0x28,0x28,0x28,0xF8,0x24,0xA0,0xFC,0x20,0x24,0xA8,0x20,0x00,
 	  0x02,0x12,0x11,0x1F,0x09,0x08,0x05,0x06,0x09,0x10,0x1C,0x00}
	 },
	
	{
	 "们",
	 {0x40,0xF0,0x0C,0x00,0xF4,0x08,0x10,0x08,0x08,0x08,0xF8,0x00,
      0x00,0x1F,0x00,0x00,0x1F,0x00,0x00,0x00,0x10,0x10,0x1F,0x00}
	},
	
	{
	"嵌",
	{0x40,0xFC,0x50,0x50,0xF0,0x5C,0x90,0x70,0x50,0x5C,0xC0,0x00,
     0x00,0x1F,0x0A,0x0A,0x1F,0x11,0x08,0x07,0x04,0x09,0x10,0x00}	
	},
	
	{
	"入",
	{0x00,0x00,0x00,0x04,0xC4,0x38,0xC0,0x00,0x00,0x00,0x00,0x00,
     0x10,0x08,0x04,0x03,0x00,0x00,0x00,0x03,0x04,0x08,0x10,0x00}
	},
	
	{
	"式",
	{0x90,0x90,0x90,0x90,0x90,0x90,0xFC,0x10,0x14,0x18,0x10,0x00,
     0x10,0x10,0x10,0x0F,0x08,0x08,0x01,0x06,0x08,0x10,0x1C,0x00}
	}
};
const unsigned char chinese_12_len = sizeof(chinese_12)/sizeof(chinese_12[0]);
 
 
#define U8 unsigned char 
void LCD_init(void);
void LCD_clear(void);
void LCD_set_XY(unsigned char X, unsigned char Y);
void LCD_write_byte(unsigned char data, unsigned char command);
void LCD_write_char(unsigned char c);
void delay10us(void);
void LCD_full(void);
void LCD_write_CHchar(unsigned char X, unsigned char Y, unsigned char* data);
typedef struct
{
   unsigned char value[2];
   unsigned char data[24];
}HZZM_12;

extern const HZZM_12 chinese_12[];
extern const unsigned char chinese_12_len;
 void LCD_write_ico(U8 X, U8 Y);

版权所有:《曾巧文博客-关注互联网IT技术,记录生活点滴》 => 《AVR单片机_实验7-基于3310LCD上显示图片和文字
本文地址://qiaowen.net/post-1238.html
除非注明,文章均为 《曾巧文博客-关注互联网IT技术,记录生活点滴》 原创,欢迎转载!转载请注明本文地址,谢谢。

有 6138 人浏览,获得评论 0 条

发表评论:

Powered by emlog 粤ICP备12040901号

>>本作品采用-知识共享署名-非商业-禁止演绎-协议-进行许可 |站点地图 | | | | 开放分类目录 |