基于ATmega16的TFTLCD显示系统设计
- 格式:doc
- 大小:26.50 KB
- 文档页数:3
基于ATMEGA16焊接人机交互系统的设计【摘要】以ATMEGA16单片机来设计实现数字化焊接电源的键盘显示电路。
硬件电路主要包括键盘输入电路、LCD液晶显示电路、通信电路等。
本文所设计的键盘显示电路具有简洁、直观的特点,并采用结构化编程的思想对此系统进行了软件实现。
通过仿真测试表明,该系统工作稳定,操作灵活、简单,实现了设计要求。
【关键词】ATMEGA16;焊接;人机交互焊接系统采用了IGBT逆变技术的脉冲MIG焊,设计了单片机(MCU)+数字信号处理器(DSP)的双机控制系统。
其中DSP为控制系统的核心,主要完成焊接参数的实时采集、模糊控制运算、PI运算和PWM波形的产生;单片机对整个控制系统进行管理,可以实现人机交互系统(包括键盘和显示)。
此外,单片机与DSP之间采用串行通信方式进行信息交换。
本文是在MCU+DSP双处理器数字化焊接系统的框架下,以ATMEGA16单片机为控制芯片,设计了数字化焊接电源的人机交互系统,这也是数字化焊接系统的重要组成部分[1]。
1.硬件电路设计我们用ATMEGA16来实现键盘与显示电路,其电路如图1所示。
图1键盘显示电路图1.1键盘电路在本设计中,采用了4×4的16键标准键盘作为整个系统的输入设备,如图2所示,这个键盘使用8根连接线,依靠连接线间不同的连通组合判断是哪个按键按下。
键盘连接真值表如图2所示。
表2 键值表采用查询方式的按键工作电路,按键与单片机的I/O口相连,通过读I/O口,判定I/O口线的电平状态,即可识别出按下的按键,各按键开关均采用了上拉电阻,这是为了保证在按键断开时,各I/O口线有确定的高电平。
该接口电路是采用软件消抖的方法。
1.2显示电路本系统采用SMC 1602A LCM液晶显示器。
该显示器可以显示字母、数字符号,其屏幕共可显示16×2个字符。
LCD1602A的工作电压为5V,VDD、VSS为供电电源,BLA、BLK为背光电源。
课程设计任务书学生姓名:专业班级:自动化0501班指导教师:工作单位:自动化学院题目: 电压和温度的采集及液晶显示要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)系统能够测量环境温度,测量范围0-100摄氏度。
(2)系统能够测量给定电压,测量范围0-5V。
(3)电压测量精确到0.01伏,温度测量精确到0.1摄氏度。
(4)具有液晶实时显示当前电压及温度的功能。
时间安排:指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (3)1. 硬件选择及各模块组成 (4)1.1设计原理 (4)1.2器件选择及基本原理 (4)1.2.1 模数转换模块 (5)1.2.2 ATmega16芯片模块....................... 错误!未定义书签。
1.2.3 DS18B20模块 (6)1.2.4 液晶显示器模块 (7)2各模块实现方法说明及整体电路图 (9)2.1 温度采集.................................... 错误!未定义书签。
2.2 电压采集 (9)2.3液晶中文显示 (10)2.4整体电路图 (10)3.软件设计 (11)3.1程序设计流程图 (11)3.2源程序 (11)4 仿真调试结果 (12)总结 (13)参考文献: (14)附录1 (15)主程序源程序: (15)显示驱动程序源程序: (22)摘要此次课程设计是基于ATmega16实现的电压和温度的采集及液晶显示系统。
该系统主要包括控制器、温度传感器、外部参考电压及测试电压、液晶显示器几个硬件部分。
控制器采用的8位AVR系列单片机-ATmega16,有高性能、低功耗等优点,电压采集是通过单片机内部的数模转换器实现的;温度传感器则采用DS18B20实现,该传感器有低功耗单总线控制的特点,显示部分采用控制芯片为KS0108的12864液晶显示器,通过单片机的I/O口直接驱动。
目录摘要 (1)前言 (1)第1章绪论 (2)1.1单片机技术和发展趋势 (2)1.2LCD显示技术 (3)第2章多功能显示屏设计构思 (4)2.1系统总设计流程 (4)2.2单片机选择方案 (5)2.3数据模块方案采集 (7)2.4AVR单片机系统开发工具 (8)第3章系统硬件设计和实现 (9)3.1系统硬件概述 (10)3.2硬件电路各模块工作原理 (10)第4章系统软件设计 (18)4.1系统设计总框图 (19)4.2各模块软件设计 (19)第5章系统设计结果和分析 (24)5.1测试仪器 (24)5.2硬件测试 (24)5.3软件测试 (24)5.4测试结果分析 (25)第6章全文总结和展望 (25)致谢 (27)参考文献 (28)附录: (30)基于单片机的多功能显示屏使用系统设计学生:李丽指导老师:邓丽华(三峡大学电气和新能源学院)摘要:本设计利用ATmega16单片机读取来自时钟芯片,温度传感器的数据,实现秒、分、时、日、月、年的控制以及室内温度的采集并最终通过LCD液晶显示屏显示结果。
此外还可以实现时间调整、定时和滚动显示等多种实用功能。
整个设计分硬件和软件两大部分。
硬件部分采用ATMega16单片机作为控制核心,FYD 12864液晶屏作为信号输出显示部分;软件部分利用C语言作为设计语言,对ATmega16进行编程来实现各种功能。
关键词:单片机,LCD,温度采集Abstract:This design used ATMega16 read from the clock chip microcontroller, temperature sensor, its AD data, to achieve seconds, minutes, hours, days, months, years, indoor temperature control and output voltage of the collection and the collection and eventually through the LCD liquid crystal The display shows the results. Also allows time to adjust, timing, and a variety of practical functions such as scrolling display. The design of hardware and software most of the points. Hardware used as the control ATMega16 SCM, FYD12864 character LCD display as part of the signal output; software components using C language as a language, on the ATMega16 to programming functions.Keywords: microcontroller, LCD, temperature collection前言在如今人们生活中,科技的发展让多功能显示屏在我们身边随处可见。
XXXXXXX学院课程设计报告( 2011 -- 2012年度第一学期)名称:单片机与嵌入式系统设计题目:基于ATmega16的比赛专用秒表设计学号:学生姓名:指导教师:成绩:日期:2011年12月25日基于单片机ATmega16的比赛专用秒表设计摘要:近几年来,人们越来越重视体育事业的发展,发展体育事业既可以促进本国人民练就强健体魄,又可以作为各国之间的竞争手段,体现各国实力。
为了创造公平公正的体育竞争环境,必须对各种比赛项目的结果进行准确的记录。
本文论述了基于AVR单片机的体育比赛专用秒表的设计与实现。
该系统以AVR单片机ATmega16为硬件核心,通过内部计时器进行准确的计时,采用LCD显示屏作为辅助显示模块,显示记录的比赛成绩,当按下记录按键,会记录成绩,按下停止按键会显示记录的成绩。
文中重点讲述系统的软硬件结构和功能特点,着重阐述了单片机及扩展电路的设计思路和实现方法。
在目前的使用中,该系统能够可靠、稳定、准确的记录比赛时间,具有推广应用价值。
关键词:AVR单片机;计时器;按键;LCD显示屏Design of the Competition Dedicated Stopwatch onATmega16 A VR MicrocontrollerAbstract: In recent years, there is growing emphasis on sports development, sports development both for its own people trained to physical fitness, but also as a means of competition between countries, reflecting the national strength. In order to create a fair and just competitive sports environment, must be the result of a variety of events accurate records. This article discusses the A VR-based microcontroller dedicated sports stopwatch design and implementation. The system for the A VR microcontroller ATmega16hardware core, through the internal timer for accurate timing, using the LCD screen as a secondary display module, displaying the record game results, when the record button will record the results, press the stop button will be displayed record results. The article focuses on the structure and function of the system hardware and software features, focusing on the expansion of the circuit chip and the design ideas and implementation methods. Currently in use, the system can be reliable, stable and accurate record of playing time, with the application value.Keywords: A VR microcontroller; timer; buttons; LCD display目录摘要 (II)第1章绪论 (1)1.1 课题目的及意义 (1)1.2 系统设计内容 (1)第2章系统概述 (3)2.1 系统设计主要原理 (3)2.2 系统硬件设计方案 (3)2.2.1 微控制器的选择 (3)2.2.2 显示方案的确定 (4)2.3 系统软件设计方案 (5)2.3.1 微控器软件设计方案 (6)第3章系统硬件设计实现 (9)3.1 主控制器最小系统 (9)3.1.1 ATmega16简介[7] (9)3.1.2 引脚图及引脚介绍 (10)3.1.3 单片机最小系统电路设计 (11)3.1.3.1 电源设计 (11)3.1.3.2 复位电路设计 (12)3.1.3.3 晶振电路设计 (13)3.1.3.4 串口通信电路设计 (14)3.2 LCD显示屏的显示电路设计 (15)第4章系统软件设计实现 (17)4.1 总体软件设计 (17)总结 (19)参考文献 (20)附录1 ATmega16的引脚图 (21)附录2 系统设计部分程序 (22)第1章绪论本章主要介绍本次设计的研究背景、目的与作用,以及在本次设计的主要内容和设计技术指标。
#include<>#include<>#include<>#define uint unsigned int#define uchar unsigned char/***********************************************************************/ sbit LCDRS=P2^0; //LCD数据/命令选择端sbit LCDRW=P2^1;sbit LCDEN=P2^2; //LCD使能新号端/***********************************************************************/ sbit IO=P1^0; //1302数据线sbit SCLK=P1^1; //1302时钟线sbit RST=P1^2; //复位uint num=0;uchar Date[]={"Date: 2000-00-00 "};uchar Time[]={"Time: *00:00-00* "};uchar date_time[7]; //从ds1302读取的当前日期时间/***********************************************************************/ void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/***********************************************************************/ void write_ds1302(uchar dat){uchar i;for(i=0;i<8;i++){IO=dat & 0x01; //保持最后一位为1,读状态SCLK=1;delay(1);SCLK=0;dat >>= 1;}}/***********************************************************************/ uchar read_ds1302(){uchar i,b=0x00;for(i=0;i<8;i++){b |= _crol_((uchar)IO,i);SCLK=1;delay(1);SCLK=0;}return b/16*10+b%16; //与BCD码转换}/***********************************************************************/ uchar read_data(uchar addr){uchar dat;RST=0;SCLK=0;RST=1;write_ds1302(addr);dat=read_ds1302();SCLK=1;RST=0;return dat;}/***********************************************************************/ void read_date_time(){uchar i,addr=0x81;for(i=0;i<7;i++){date_time[i]=read_data(addr);addr+=2;}}/***********************************************************************/ void lcd_write_com(uchar com){LCDRS=0; //RS为0时,写指令,RS为1时,写数据P0=com;delay(5);LCDEN=1;delay(5);LCDEN=0;}/***********************************************************************/ void lcd_write_data(uchar dat){LCDRS=1;P0=dat;delay(5);LCDEN=1;delay(5);LCDEN=0;}/***********************************************************************/ void lcd_init(){LCDEN=0;lcd_write_com(0x38); //LCD显示模式设置lcd_write_com(0x0c); //LCD显示开/关及光标设置lcd_write_com(0x06); //当写一个字符后地址指针加1,且光标加1 lcd_write_com(0x01); //显示清屏}/***********************************************************************/ void set_lcd_pos(uchar p){lcd_write_com(p | 0x80);}/***********************************************************************/ void lcd_print(uchar p,uchar *s){set_lcd_pos(p);for(num=0;num<16;num++){lcd_write_data(s[num]);delay(10);}}/***********************************************************************/ void format_datetime(uchar d,uchar *p){p[0]=d/10+'0';p[1]=d%10+'0';}/***********************************************************************/ void main(){LCDRW=0;lcd_init();while(1){read_date_time();format_datetime(date_time[6],Date+8); //年月日format_datetime(date_time[4],Date+11);format_datetime(date_time[3],Date+14);format_datetime(date_time[2],Time+7); //时间转换format_datetime(date_time[1],Time+10);format_datetime(date_time[0],Time+13);lcd_print(0x00,Date);lcd_print(0x40,Time);}}。
基于ATmega16 单片机的微型气象探测系统设计
0 引言
气候变化使得我国干旱,洪涝等自然灾害更加严重,提高我国的气象探测能力,有助于增强我国灾害预警和人工影响天气能力。
因此,气象要素测量系统开发研究具有重要的意义。
目前很多地区气象要素的测量大多依靠当地天气预报,然而天气预报地域范围较广,无法精确到小区域的气候测量。
而搭建气象台成本较高,性价比低,因此设计一种微型化,便携式的综合气象探测系统就显得十分必要。
针对以上问题本文设计了一种便携式气象探测系统,该气象检测系统可以有效地测量小区域的温度、湿度、气压、光照强度等气象参数,精度可达到普通气象测量要求,还有显示、存储、回溯查询的功能,具有低功耗、微型化、便携式、低成本的特点,适应于各种小区域的气象测量,具有一定的实用价值。
1 系统设计和工作原理
本气象测量系统以低功耗AVR 单片机ATmega16 作为核心控制部件,如图1 所示,由温度测量模块、湿度测量模块、气压测量模块、光照强度测量模块、时钟芯片、E2PROM、液晶显示和独立按键等模块组成。
通过各个传感器将温度、湿度、气压、光强度转化为电信号,利用单片机处理后得到测量数据,并在液晶上显示。
通过E2PROM 和独立按键实现数据的存储和查询。
按下存储键,储存各个测量数据和时钟芯片得到的当前时间;按下查询键,查询以前存储的测量数据。
同时该系统还具有自动测量功能,自动测量时,关闭液晶,测得数据每30 min 存入E2PROM 一次。
2 气象探测系统硬件设计。
ATMEGA16开发板本系统包含内容:1、绘制电路板的原理图和pcb图2、下载软件使用中的一些问题3、基于NRF905模块的测试源代码说明:本系统由沧海一声笑原创。
博客地址:画了将近四天的时间做了一块atmega16的开发板,用覆铜板做的。
提供的接口有1602液晶,12864液晶,nrf905无线模块,SPI接口,串口。
同时12864兼容浩豚电子的TFT彩屏。
原理图如下:pcb图如下:说明:1、由于做的是覆铜板,pcb图中,max232附近的有两根线尚未接上。
2、由于个人疏忽,电源部分的ams117芯片管脚不对,可以不焊接进去,依然可以照常使用。
但是如果要焊接的话,须仔细比对原理图。
3、液晶的数据接口采用的是PORTC,jtag下载的相关接口就在其内,开始没注意,不论怎么写程序,测得的PORTC2,3,4,5管脚电压都是高电平。
这也是液晶测试程序仿真时正确,下载上去却无法正常工作的原因。
解决方法是,在下载的时候需对下载的软件进行设置熔丝位,把JTAGEN前面的钩钩去掉即可。
下面以SLISP为例:1)2)3)整整花了四天的时间。
1602的测试程序已经写好,如下:#define uchar unsigned char#define uint unsigned int#include<iom16v.h>#define RS 4#define RW 5#define EN 6#define PORT_CTL PORTA#define DDR_CTL DDRA#define DATA_PORT PORTC#define DATA_DDR DDRC#define DATA_PIN PINCvoid s_ms(uint ms){for(;ms>1;ms--);}//查忙void busy(void){uchar temp;s_ms(500);PORT_CTL&=~(1<<RS); //RS=0 s_ms(500);PORT_CTL|=(1<<RW); //RW=1 s_ms(500);while(temp){PORT_CTL|=(1<<EN); //EN=1s_ms(500);DATA_DDR=0x00; //A口变输入DATA_PORT =0xff; //上拉使能s_ms(500);temp =DATA_PIN&0x80; //读取A口 s_ms(500);DATA_DDR=0xff;DATA_PORT =0xff; //A口变输出 s_ms(500);PORT_CTL&=~(1<<EN); //EN=0s_ms(500);}}//写指令void writecom(uchar com){busy();s_ms(500);PORT_CTL&=~(1<<RS); //RS=0s_ms(500);PORT_CTL&=~(1<<RW); //RW=0 s_ms(500);PORT_CTL|=(1<<EN); //EN=1s_ms(500);DATA_PORT = com; //输出指令s_ms(500);PORT_CTL&=~(1<<EN); //EN=0 s_ms(500);}//1602初始化void LcdInit(void){writecom(0x38);s_ms(1000);writecom(0x01);s_ms(10000);s_ms(1000);s_ms(1000);s_ms(1000);s_ms(1000);s_ms(1000);s_ms(1000);writecom(0x02);s_ms(1000);writecom(0x06);s_ms(1000);writecom(0x0c);s_ms(1000);writecom(0x38);s_ms(1000);}//写数据void writedata(uchar data){busy();s_ms(500);PORT_CTL|=(1<<RS); //RS=1s_ms(500);PORT_CTL&=~(1<<RW); //RW=0 s_ms(500);PORT_CTL|=(1<<EN); //EN=1s_ms(500);DATA_PORT= data; //输出数据s_ms(500);PORT_CTL&=~(1<<EN); //EN=0 s_ms(500);}//读数据uchar readdata(void){uchar temp;busy();s_ms(500);PORT_CTL|=(1<<RS); //RS=1s_ms(500);PORT_CTL|=(1<<RW); //RW=1s_ms(500);PORT_CTL|=(1<<EN); //EN=1s_ms(500);DATA_DDR=0x00; //A端口变输入s_ms(500);temp = DATA_PIN; //读A端口s_ms(500);DATA_DDR=0xff; //A端口变输出s_ms(500);PORT_CTL&=~(1<<EN); //EN=0s_ms(500);return temp;}//================================================= // 描述:写LCD内部CGRAM函数// 入口:‘num’要写的数据个数// ‘pbuffer’要写的数据的首地址// 出口:无//================================================ void WriteCGRAM(uint num, const uint *pBuffer){uint i,t;writecom(0x40);PORT_CTL|=(1<<RS);PORT_CTL&=~(1<<RW);for(i=num;i!=0;i--){t = *pBuffer;PORT_CTL|=(1<<EN);DATA_PORT = t;PORT_CTL&=~(1<<EN);pBuffer++;}}//================================================= //描述:写菜单函数,本程序使用的LCD规格为16 * 2//入口:菜单数组首地址//出口:无//================================================= void WriteMenu(const uchar *pBuffer){uchar i,t;writecom(0x80); //数据地址PORT_CTL|=(1<<RS);PORT_CTL&=~(1<<RW);s_ms(50);for(i=0;i<16;i++){t = *pBuffer;DATA_PORT = t;PORT_CTL|=(1<<EN);s_ms(50);PORT_CTL&=~(1<<EN);pBuffer++;}writecom(0xC0);PORT_CTL|=(1<<RS);PORT_CTL&=~(1<<RW);s_ms(50);for(i=0;i<16;i++){t = *pBuffer;DATA_PORT = t;PORT_CTL|=(1<<EN);s_ms(50);PORT_CTL&=~(1<<EN);pBuffer++;}}//====================================================// 描述:在任意位置写数字函数// 入口:’row‘表示要写数字所在的行地址,只能为1或2// ’col‘表示要写数字所在的列地址,只能为0--15// ‘num’表示要写的数字,只能为0--9// 出口:无//===================================================void WriteNum(uchar row,uchar col,uchar num){if (row == 1) row = 0x80 + col;else row = 0xC0 + col;writecom(row);PORT_CTL|=(1<<RS);s_ms(500);PORT_CTL&=~(1<<RW);s_ms(500);DATA_PORT = num;s_ms(500);PORT_CTL|=(1<<EN);s_ms(500);PORT_CTL&=~(1<<EN);s_ms(500);}//================================================================ // 描述:在任意位置写任意多个字符// 入口:’row‘要写的字符所在的行,只能为1或2;// ‘col’要写的字符所在的列,只能为0---15// ‘num’要写字符的个数// ‘pbuffer’要写字符的首地址//================================================================== void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer){uchar i,t;if (row == 1) row = 0x80 + col;else row = 0xC0 + col;writecom(row);PORT_CTL|=(1<<RS);s_ms(500);PORT_CTL&=~(1<<RW);s_ms(500);for(i=num;i!=0;i--){t = *pBuffer;s_ms(500);DATA_PORT = t;s_ms(500);PORT_CTL|=(1<<EN);s_ms(500);PORT_CTL&=~(1<<EN);s_ms(500);pBuffer++;}}uchar wz[]={""};uchar gd[]={"Good Luck!"};main(){DATA_DDR=0xff;DATA_PORT=0xff;DDR_CTL=0xff;PORT_CTL=0xff;LcdInit();while(1){WriteChar(1,1,13,wz);WriteChar(2,3,10,gd);}}NRF905无线模块双向计数测试程序:发送部分:/*注:发送部分的硬件电路是用以前做的16的最小系统版和数码管模块用杜邦线搭建的。
基于Atmega16L的LCD液晶显示电路设计
朱洪雷;代慧
【期刊名称】《企业技术开发(学术版)》
【年(卷),期】2011(030)003
【摘要】文章首先介绍了AVR单片机最小系统的设计,然后基于最小系统阐述了AVR单片机控制的液晶显示电路.
【总页数】2页(P59-59,95)
【作者】朱洪雷;代慧
【作者单位】广州番禺职业技术学院,广东广州511483;广东技术师范学院天河学院,广东广州510080
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于FPGA的LCD1602液晶显示屏系统控制设计 [J], 段旭阳;韩延义;王晓丹;宋闻萱
2.新型液晶显示器(LCD)电磁干扰(EMI)滤波器 EMIF10-LCD01F1 [J],
3.液晶显示器件(LCDs)用反射式背光源 [J], 卢有祥(译);季旭东(校对)
4.容易混淆的液晶显示器概念辨清LED背光液晶显示器与普通LCD显示器 [J], 孙力夫;老乔
5.液晶电脑时代扑面而来LCD显示器谁主沉浮十六款主流品牌LCD液晶显示器综合评测 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。
基于ATmega16的TFTLCD显示系统设计
摘要介绍320 ×240的点阵式液晶作为屏显输出的系统设计,以ATmega16单片机为控制核心,HX8347D作为LCD驱动芯片的硬件连接,以及显示方法的设计与软件的编写。
关键词ATmega16;TFTLCD;HX8347D
0引言
LCD(Liquid Crystal Display)也就是我们俗称的液晶显示器,近年来,由于TFTLCD显示的图像清晰度高,彩色纯正艳丽,无闪烁及动态拖尾等众多优点,使其得到了迅猛的发展。
从可视电话、门铃、各种监视器,便携式彩电、随身看到摄像机、彩投、笔记本电脑等等,无所不用。
很快便成为彩色液晶图像显示的主流。
1TFTLCD驱动芯片
常用的带图形显存TFTLCD驱动芯片有ILI9320、ILI9325、HX8347、SSD1289等,不带图形显存的如LQ043等。
本系统采用的是SHENZHEN DISPLAYSUN OPTECH TECHNOLOGY CO.LTD公司的DST1072A 320×240TFTLCD,内部集成驱动芯片HX8347D。
HX8347D是一款非常好用的驱动芯片,通过对内部寄存器的配置可以实现很多的显示功能,比如设置显示区域、显示反转、显示镜像对称等。
由于在HX8347D的Datasheet有详细的介绍,这里就不再详细介绍。
2TFTLCD与ATmega16的硬件接口
TFTLCD的接口有数据接口、控制借口、背光控制接口以及电源端口。
本系统使用的TFTLCD有16个数据口DB0-15,我们把DB0-15分别接到ATmega16的PA、PC口上,对与控制接口我们把他们接到PB口上,PB0-4依次接LCD控制端口的复位端口LCD_RESET、读端口RD、写端口WR、命令数据控制端口RS、LCD片选端口CS。
对于本光控制端口我们直接把他接到5V电源上。
3软件设计
3.1底层读写函数设计
对TFTLCD的寄存器、显存的写数据是整个系统最底层的。
若底层的程序没有调试成功像是程序的编写又从何谈起,下面是本系统最重要的两个底层函数下面对其详细解释:
寄存器配置函数
void LCD_SetReg(unsigned int Cmd_Reg, unsigned int Cmd_Data) // Cmd_Reg 为寄存器地址,Cmd_Data为写入该寄存器的数据
{
LCD_DATA = Cmd_Reg>>8; //取指令的底八位
PORTC&=~(1>8; //取指令数据的低八位
PORTC&=~(1<<LCD_HLE);;PORTC|=(1<<LCD_HLE); //写入低八位锁存器
LCD_DATA = Cmd_Data; //取指令的高八位
PORTC&=~(1<<LCD_LLE);PORTC|=(1<<LCD_LLE); //写入高八位锁存器
PORTC&=~(1<<LCD_DATA_OE); //同时从锁存器输出
PORTC&=~(1<<LCD_WR);;; //向TFTLCD写指令数据
PORTC|=(1<<LCD_WR); //拉高为下一次写准备
PORTC|=(1<<LCD_DATA_OE);//禁止锁存器
}
PORTC|=(1<<LCD_CS);// 禁止TFTLCD
}
3.2显示区域设置函数设计
HX8347D有一组很好用的寄存器,那就是区域设置寄存器,水平起始寄存器0x0002、0x0003,水平结束寄存器0x0004、0x0005,垂直起始寄存器0x0006、0x0007,垂直结束寄存器0x0008、0x0009。
可以通过这些就存起的设置很方便的设置我们需要显示的任意一个区域。
在设置完区域后接着向显存写数据,然后显示改变的区域为设置的区域。
3.3显示程序设计
TFTLCD显示器所需要的数据量是非常大的。
比如65K色一个像素要16位的颜色数据,26万色的一个像素要18位颜色数据,1600万色的一个像素需要24
位的颜色数据。
倘若要显示一幅320×240图片65K色,需要150KB的ROM存储空间。
由于我们使用的ATmega16单片机ROM只有16KB,远远小于一幅图片所需的数据量,更别说先是几幅图片,因此要对此问题进行解决。
常用的方法是用单片机外挂一个sd卡,sd卡的数据存储量大,很适合图片存储,但是对sd卡的操作不仅要有硬件的设计,还要有软件的设计比较麻烦。
由于本系统的显示要求不高,所以我们采用了一种软件的的处理方法。
本系统主要是显示数字,为了节省存储空间,我们对数字和用到的字符用zim221进行取模,每个显示像素用一个位来表示,每八个横向连在一起像素用1Byte表示,则对本系统使用的LCD屏320×240个像素共需要9KB的存储空间,比先前的缩小了近20倍。
如果该位被置为一则显示一种颜色,若为零则显示另一种颜色,这样既可以把想要像是的字符像是出来又可以像是不同的颜色,达到满意的效果。
4结论
本系统用软件的控制显示的控制方法,使显示的存储数据大量的减少,不仅满足了显示要求,而且减少了程序存储空间,系统简单、可靠,适合与实际应用。
参考文献
[1]顾荣荣.基于LPC2138控制的LCD及触摸屏接口设计.科技信息,2008,18.
[2]王诚成等.基于51单片机的触摸屏控制器制作.电子制作,2009,9.。