24寸LCD屏多功能显示要点.docx
- 文档编号:8964028
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:50
- 大小:1.92MB
24寸LCD屏多功能显示要点.docx
《24寸LCD屏多功能显示要点.docx》由会员分享,可在线阅读,更多相关《24寸LCD屏多功能显示要点.docx(50页珍藏版)》请在冰豆网上搜索。
24寸LCD屏多功能显示要点
武汉工程大学继续教育学院
毕业设计[论 文]
题 目 基于51单片机的TFT屏多功能显示设计
专 业 机电一体化工程
班 级 11级03班
姓 名 张明波
指导教师 熊杰
2014年 11 月 15 日
---------------XX云盘有具体资料--------------
---------------
基于51单片机的TFT屏多功能显示设计
作者:
张明波
摘要:
MCS-51作为入门式的8位单片机,还是应用广泛的一种。
国产的宏晶STC单片机以其低功耗、廉价、稳定性能,占据着国内51单片机较大市场。
STC12C5A60S2更是资源丰富。
基于STC12C5A60S2的TFT屏显示设计,通过调用API绘制GUI界面,完成汉字显示、ASCII显示、图像显示。
以及通过DS1302实时时钟,DHT11温湿度测量,按键设置、蜂鸣器提醒。
完成最基本的智能家居室内温度、湿度监控、时钟显示。
关键词:
MCS-51APIDS1302实时时钟DHT11温湿度测量智能家居
一、设计要求与方案设计
(一)设计要求
(1)完成TFT屏绘图的图形API;
(2)能显示日期、时间;
(3)能显示温度、湿度;
(4)通过按键可以设定时间,以及温度警戒提醒;
(二)电路设计
综上所述要求,电路设计方案是:
采用STC12C5A60S2作为主控芯片;DS1302提供时钟;DHT11作为温、湿度采集的传感器;TFT彩屏作为显示;移动电源供电;通过74HC138译码器扩展主控芯片的I/O口提供蜂鸣器、按键的运作;串行口作为通信端口和下载程序。
二、相关软件的介绍
(一)字体取模软件
1、双击图标
,进入图1.1界面:
图2.1
2、点击参数设置文字输入区字体选择字体。
选择所需字体、字号,如图2.2:
图2.2
3、其他选项。
勾选横向取模、字节倒序、保留、任何时候都加0。
4、在文字输入区输入相应文字后,按键盘的Ctrl+Enter键完成编辑,如图2.3:
图2.3
5、点击取模格式,选择C51格式,然后在点击点阵生成区,即可出现相应的文本,如图2.4:
图2.4
6、复制文本到你的字体数组中。
(二)图片取模软件
1、双击图标
,进入图2.5界面:
图2.5
2、打开图片文件。
3、配置参数C语言数组水平扫描16为真彩色x*x像素保存,如图2.6
图2.6
4、将文件里的内容复制到你的函数文件
(三)KEIL软件的使用
1、双击图标
,进入如图2.7界面:
图2.7
2、点击ProjectNewuvisionproject,在你指的的地方新建一个文件夹,并在其中再建立一个名为OBJ的文件夹,将项目文件建立在里面,如下图2.8:
图2.8
3、然后再在里面新建DIVER、GUI、SYS、USER、DS1302、DHT11、DELAY、KEY文件夹,把相应的文件复制到其中。
4、进入界面选择STC12C5A60S2,点击OK,不要选择添加启动代码,如图2.9。
图2.9
5、如图2.10所示,在Target1上点击右键选择选择ManageComponents…
图2.10图2.11
6、如图所示编辑修改,如图2.11:
7、然后再向相应的Groups里面添加源文件,点击AddFiles,完成添加后点击OK,如图2.12、2.13:
图2.12图2.13
8、点击
进入配置界面,如图2.14:
图2.14
9、标签Target中设置MemoryModel为Large:
variablesinXDATA
CodeRomSize为Large:
64Kprogram
标签Output中勾选CreatHEXFile
10、在标签C51中的IncludePaths中添加如下文件夹,只要文件夹中含有所需的头文件,都要在此次指明路径!
,如图2.15
图2.15图2.16
11、编译后头文件将出现在相应的分组文件夹中,如图2.16:
三、硬件电路设计与实现
(一)电路整体设计框图与整体原理图
系统框图
系统原理图
(二)STC主控制器模块
图3.1
STC12C5A60S2单片机是STC生产的单时钟/机器周期(1T)的单片机,指令代码完全兼容传统8051但是速度快8~12倍。
1、工作电压:
5.5V~3.5V(5V单片机)。
2、工作频率范围:
0~35MHz。
3、程序存储空间:
60K;片上集成1280字节SRAM。
4、通用I/O口40个,复位后为准双向口/弱上拉(普通8051传统I/O口)。
每个I/O口驱动能力均可达20mA,但整个芯片最大不要超过120mA。
5、ISP(在系统可编程)/IAP(在应用可编程),无需专用的编程器,可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成下载。
6、时钟源:
外部高精度晶体/时钟,内部R/C振荡器。
7、共4个16位定时器:
两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器。
8、3个时钟输出口、7路外部中断I/O口、2路PWM、8路10位精度A/D转换。
9、同用全双工异步串行口(UART)。
10、工作温度范围:
-40~85℃(工业级)、0~75℃(商业级)。
11、封装:
LQFP-48,LQFP-44,PDIP-40。
本项目采用PDIP-40。
为了让程序运行更快,采用了24MHz的晶振。
(三)DS1302实时时钟模块
图3.2
DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。
DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线
(1)RES(复位),
(2)I/O(数据线),(3)SCLK(串行时钟)。
时钟/RAM的读/写数据以一个字节或多达31字节的字符组方式通信。
DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。
电路的搭建采用32.768KHz的晶振、两个30pf瓷片电容构成晶振电路,以3V纽扣电池来提供备用电,这样即使主电源掉电,时钟仍然可以在DS1302计时,下次上电后仍可以显示正确时间。
(四)DHT11温、湿度测量模块
图3.3
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与8位单片机相连接。
每个DHT11传感器都在极为精确地湿度校验室中进行校准。
校准系数以程序的形式存储在OTP内存中,传感器内部在检测信号的处理过程中需要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号的传输距离可达20米以上。
产品为4针单排引脚封装,连接方便。
DHT11参数表
型号
测量范围
测湿精度
测温精度
分辨力
封装
DHT11
20-90%RH0-50℃
±5%RH
±2℃
1
4针单排直插
建议连线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。
DHT11的供电电压为3~5.5V。
传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。
SDA用于微处理器与DHT11之间通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。
数据格式:
8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据=8bit检验值。
测量分辨率:
8bit温度、8bit湿度。
DHT11引脚功能表
Pin
名称
注释
1
VCC
供电3-5.5V
2
SDA
串行数据,单总线
3
NC
空脚,悬空
4
GND
接电源负极
(五)TFT彩屏显示模块
图3.4
TFT-LCD液晶显示屏是薄膜晶体管型液晶显示屏,也就是“真彩”(TFT)。
TFT液晶为每个像素都设有一个半导体开关,每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制,不仅提高了显示屏的反应速度,同时可以精确控制显示色阶,所以TFT液晶的色彩更真。
TFT液晶显示屏的特点是亮度好、对比度高、层次感强、颜色鲜艳,但也存在着比较耗电和成本较高的不足。
TFT液晶技术加快了手机彩屏的发展。
彩屏手机中基本上都支持65536色,还有26万.130万显示,有的甚至支持1600万色显示,这时TFT的高对比度,色彩丰富的优势就非常重要了。
液晶显示器由液晶面板和背光板两大部分组成:
液晶面板(液晶盒)包括偏振片、玻璃基板、彩色滤色膜、电极、液晶及定向层。
背光模组由冷阴极荧光灯(CCFL)、导光板(光波导)、扩散板和棱镜片组成,其作用是件光源均匀地传送到液晶面板。
此设计采用普中科技提供的2.4寸TFT彩屏模块,以并行16位通信,240X320分辨率,以4个LED并联作为背光灯。
引脚功能:
TFT屏引脚功能表
引脚
功能
引脚
功能
REST
复位
CS
片选
RD
读信号
P1
低8位数据端
WR
写信号
P2
高8位数据端
RS
数据/命令选择
TFT模块的坐标系,如图3.5:
图3.5图3.6
采用16位二进制数来表示一个彩色点,格式为5-6-5,如图3.6:
(六)移动电源模块
图3.7
为了让项目在后期可以便于扩展,特意使用AMS1117-5V-3.3V稳压芯片,是的该线路板可以提供5V和3.3V两种电压。
并且使用DC-005电源座,可以使用移动电源供电,不必依附于笔记本电脑工作。
(七)译码器、按键、蜂鸣器模块
图3.8图3.9图3.10
为节省I/O口,通过74HC138译码器来扩展I/O口,以提供独立按键、蜂鸣器I/O口,以及后期项目扩展。
四、程序设计思路与实现
本项目采用模块化编程,分成不同的模块来完成程序的编制。
项目程序文件目录如下,所包含的头文件未展开。
项目相关文件
程序的编制遵循分层的思想,分为TFT屏驱动层、TFT屏API层、TFT屏应用层
驱动层:
完成最基本的屏幕命令输入、数据读出。
API层:
完成函数接口,绘制各种图形,以及字符、数字、汉字的显示。
应用层:
调用API函数,完成整体项目的输出。
(一)TFT驱动层
驱动层属于最底层的函数,连接了底层硬件,提供底层最基本的函数。
这些函数囊括了发送命令、发送数据、写数据设置扫描区域、已经界面的刷新。
由DIVER.h进行变量、函数的声明。
头文件内容如下:
#ifndef__DIVER_H__
#define__DIVER_H__
#defineBus_16//16位数据模式
#defineLCD_DataPortHP2//高8位数据口
#defineLCD_DataPortLP1//低8位数据口
sbitLCD_REST=P0^6;//RST引脚定义
sbitLCD_RD=P0^7;//RD引脚定义
sbitLCD_WR=P3^6;//WR引脚定义
sbitLCD_RS=P3^3;//RS引脚定义
sbitLCD_CS=P3^7;//CS引脚定义
#defineLCD_SIZE_X240
#defineLCD_SIZE_Y320
/*定义常用颜色的颜色码*/
#defineRED0xf800//红
#defineYELLOW0xffe0//黄
#defineGREEN0x07e0//绿
#defineCYAN0x07ff//青
#defineBLUE0x001f//蓝
#definePURPLE0xf81f//紫
#defineBLACK0x0000//黑
#defineWHITE0xffff//白
#defineGRAY0x7bef//灰
voidLCD_Init(void);//屏幕初始化
voidLCD_Write_COM(charVL);//发送命令
voidLCD_Write_Para(charVL);//发送数据
voidLCD_Writ_Bus(charVH,charVL);//并行数据写入函数
voidLCD_Write_DATA(uintdat);//发送数据
voidPant(uintdat);//清屏程序
voidSet_XY(uintx1,uinty1,uintx2,uinty2);//设置扫描起始、终止点
voidSet_Point(ucharx,uinty);//单点像素
voiddelayms(intcount);
#endif
DIVER.c完成函数的定义。
TFT屏的驱动IC采用三星的S6D04H0,根据三星公司提供的数据手册编程。
其基本的命令如下:
指令
代码
指令
代码
NOP
00h
显示关闭
28h
软件复位
01h
显示开启
29h
读取显示状态
09h
列地址设置
2Ah
读取电源模式
0Ah
行地址设置
2Bh
休眠
10h
存储器写
2Ch
唤醒
11h
存储器读
2Eh
正常显示模式
12h
电源控制
F3h
(二)API层
API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
API层的函数通过GUI.h头文件定义:
#ifndef__GUI_H__
#define__GUI_H__
externucharsize;
externuintBk_Color;
externuintFor_Color;
ucharSIZE(ucharnum);/设置显示字符的尺寸
voidSet_Color(uintfor_color,uintback_color);//设置颜色
/*******************************************************/
/***********************画图API**********************/
/*******************************************************/
uintRGB(ucharR,ucharG,ucharB);//RGB颜色混合
voidGUI_Clear(ucharx1,uinty1,ucharx2,uinty2);//清区域
voidGUI_Point(ucharx,uinty);//画点
voidGUI_HL(ucharx,uinty,ucharlength);//画横线
voidGUI_RL(ucharx,uinty,uinthigh);//画竖线
voidGUI_L(uintx1,uinty1,uintx2,uinty2);//画直线
voidGUI_Box(ucharsx,uintsy,ucharex,uintey);//画实心矩形
voidGUI_rectangle(ucharsx,uintsy,ucharex,uintey);//画空心矩形
voidGUI_Circle(ucharxc,uintyc,ucharr,ucharfill);//画圆函数
voidCo_s(ucharx_axis,uchary_axis,ucharstyle,ucharamplitude,ucharphase,floatstep);//绘制正弦曲线
voidDraw_CS(ucharx_axis,uchary_axis,ucharstyle);//绘制坐标轴
voidLine_graph(ucharx,uinty,ucharmin,uintmax,ucharstep);//绘制随机线图
/*******************************************************/
/***********************显示字符**********************/
/*******************************************************/
voidGUI_DisPic(ucharx,uinty,ucharlength,uinthigh,constuchar*pic);//显示图片(图标)
voidGUI_DisChar(ucharx,uinty,ucharch);//显示英文或数字字符
voidGUI_DisStr(ucharx,uinty,ucharcode*s);//显示英文字符串
voidPutGB18(ucharx,uinty,ucharc[2]);//显示单个汉字
voidPutGB18Str(ucharx,uinty,uchar*q);//显示汉字串
voidPutGB24(ucharx,uinty,ucharc[2]);
voidPutGB24Str(ucharx,uinty,uchar*p);
/*******************************************************/
/***********************显示数字**********************/
/*******************************************************/
voidGUI_sprintf_chartobit(ucharx,uinty,uchardat);//无符号字符型数以二进制形式显示
voidGUI_sprintf_nu(ucharx,uinty,ucharnu);//显示1位16进制数
voidGUI_sprintf_chartohex(ucharx,uinty,uchardat);//无符号字符型数以十六进制形式显示
voidGUI_sprintf_chartodec(ucharx,uinty,uchardat);//无符号字符型数以十进制形式显示
voidGUI_DisTime(ucharx,uinty,uchardat);//显示两位时间
voidGUI_wrul(ucharx,uinty,unsignedlongnum);//以十进制形式显示无符号长整型数
voidGUI_wrlval(ucharx,uinty,ulongnum,ucharbits,uchardp);//以十进制形式显示浮点数
#endif
各函数的说明格式如下:
“----部分函数名称并未及时更改----”
函数原型
功能说明
参数说明
调用举例
1、SIZE
函数原型
ucharSIZE(ucharnum);
功能说明
设置字符、汉字的显示尺寸
参数说明
num指定显示字符、汉字的尺寸
调用举例
SIZE
(1);
2、Set_Color
函数原型
voidSet_Color(uintfor_color,uintback_color);
功能说明
设置显示字符、汉字、图像等的背景色和前景色
参数说明
for_color用于指定前景色、back_color指定背景色
调用说明/举例
画图形要指定前景色、刷新要指定背景色
3、RGB
函数原型
uintRGB(ucharR,ucharG,ucharB);
功能说明
分别写入R、G、B的参数,返回RGB值
参数说明
R:
红色G:
绿色B:
蓝色
调用举例
RGB(0,255,0);//绿色
4、GUI_Clear
函数原型
voidGUI_Clear(ucharx1,uinty1,ucharx2,uinty2);
功能说明
清除指定区域为背景色
参数说明
(x1,y1)起始对角点、(x2,y2)结束对角点
调用举例
GUI_Clear(20,20,60,60);
5、GUI_Point
函数原型
voidGUI_Point(ucharx,uinty);
功能说明
画点
参数说明
点的(x,y)坐标
调用举例
GUI_Point(25,45)
6、GUI_HL
函数原型
voidGUI_HL(ucharx,uinty,ucharlength);
功能说明
画水平直线
参数说明
(x,y)起点坐标,length为长度
调用举例
GUI_HL(35,45,50);
7、GUI_RL
函数原型
voidGUI_RL(ucharx,uinty,uinthigh);
功能说明
画竖直直线
参数说明
(x,y)起点坐标,high为高度
调用举例
GUI_RL(20,30,45);
8、GUI_L
函数原型
voidGUI_L(uintx1,uinty1,uintx2,uinty2);
功能说明
画直线
参数说明
(x1,y1)为起点坐标,(x2,y2)为终点坐标
调用举例
GUI_L(25,35,45,67);
9、GUI_Box
函数原型
voidGUI_Box(ucharsx,uintsy,ucharex,uintey);
功能说明
画实心矩形
参数说明
(sx,sy)为对角线起点坐标,(ex,ey)为对角线终点坐标
调用举例
GUI_L(25,35,45,67);
10、GUI_Rec
函数原型
voidGUI_Rec(ucharsx,uintsy,ucharex,uintey);
功能说明
画矩形
参数说明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 24 LCD 多功能 显示 要点