液晶显示设计

更新时间:2024-06-25 12:41:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

生产实习总结报告

基本项目 单片机最小系统板 扩展项目 LCD1602液晶显示 姓

学 号 院 别 专 业 班 级 完成时间

扩展项目 基于单片机的1602LCD显示

目 录

1. 方案设计………………….……………………………………..2

1.1系统分析…………………………………………………….….2 2. 系统设计………………………………………………………...2

2.1 硬件设计………….……………………………………….....2

2.1.1 主控制器AT89S52………...…………………………..…3 2.1.2 时钟电路………………………………………………..…4 2.1.3复位电路………………………………………………...…4 2.1.4 LCD1602显示电路…………………………………..……4 2.2 软件设计………………………………………………...…...7

2.2.1主程序………………………………………………..….….7 2.2.2流程图………………………………………………..……..7 3. 系统测试…………………………………………………….…..7 4. 总结……………………………………………………………...7

参考文献……………………………………………………………7 附录1 原理图…………………………………………………….9 附录2 源程序……………………………………………………10

1

1 方案设计

1.1系统分析

根据系统功能要求,可将系统组成结构分成两大部分: (1)单片机控制部分——单片机控制部分是在核心板上实现。 (2)液晶显示部分——液晶显示部分由扩展板实现。

单片机核心板 1602LCD

图1 系统组成结构图

2 系统设计

主要包括硬件设计和软件设计

2.1 硬件设计

2.1 .1主控制器AT89S52

AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 Flash 存储器。使用Atmel 公司高密非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时

器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止

2

2.1.2 时钟电路

图2时钟电路

2.1.3 复位电路

图3复位电路

3

2.1.4 LCD1602显示电路

Lcd1602能够同时显示16x02即32个字符,采用标准的16脚接口,其中:

包括8根数据线,3根控制线(rs,rw,e),电源地,电源以及液晶驱动电压引脚。

LCD1602引脚功能说明:

引脚 1 2 符号 VSS VDD 功能说明 一般接地 接电源(+5V) 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比3 V0 度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4 RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 E(或EN)端为使能(enable)端,下降沿使能。 低4位三态、 双向数据总线 0位(最低位) 低4位三态、 双向数据总线 1位 低4位三态、 双向数据总线 2位 低4位三态、 双向数据总线 3位 高4位三态、 双向数据总线 4位 高4位三态、 双向数据总线 5位 高4位三态、 双向数据总线 6位 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 背光电源正极 背光 电源负极 4

5 6 7 8 9 10 11 12 13 14 15 16

R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BLA BLK

寄存器选择控制表 RS 0 0 1 1 R/W 0 1 0 1 操作说明 写入指令寄存器(清除屏等) 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 写入数据寄存器(显示各字型等) 从数据寄存器读取数据 注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0. busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求。

LCD1602驱动电路原理图如下:

图3 LCD1602驱动电路

5

2.2软件设计

2.2.1主程序

此程序所需实现的基本功能主要有:

在液晶芯片显示 1.“湖南理工学院”2.“www.hnist.cn”3. “2011-5-20”。

主要通过89S52单片机对液晶lcd1602的读写来实现(程序清单详见)。

(说明:液晶太小,所以“湖南理工学院”这六个字在一个区域循环显示。) 2.2.2流程图

起 始 初始化液晶 调用显示字符串程序 显示字符串(网址和日期) 调用汉字显示程序 显 示 汉 字 (依次闪现六个汉字) 图8 流程图

6

3系统测试

我们最终采用跳线连接单片机核心板和LCD1602液晶,下载程序液晶显示达到效果,但1602不带汉字库需自行编写,显示字符是5×8的点阵。字符和字符之间,还有一个点的空间,不适合显示汉字。调试的过程就是程序与硬件相结合的过程。必须相互匹配,才能调试成功。 4 总结

本次实习的过程主要可分为以下几个部分。分别是焊接核心板,程序编写,系统测试与调试。

1. 焊接:焊点要适中,焊接时间要适宜,不然容易烧毁元器件和板上的铜线。

2. 程序编写:程序编写需要了解各个接口的作用,在此基础上外加时序和各个汉子和字符的显示程序,尤其汉字的拼写与最终显示的方式有一定的难度。

3. 系统测试:这里主要是程序的测试。程序写好后,需要通过一步步验证,自己的想法与结果是否一致,需要逐个验证。

4. 系统调试;系统调试是最重要的环节,他涉及到程序的各个部分及硬件端口的接线。调试的过程就是程序与硬件相结合的过程。必须相互匹配,才能调试成功。

参考文献

[1]张毅刚等.单片机原理及接口技术.人民邮电出版社,2010. [2]王东峰等.单片机C语言应用100例[M].电子工业出版社,2009. [3]陈海宴.51单片机原理及应用[M].北京航空航天大学出版社,2010. [4]刘守义等.单片机技术基础[M].西安电子科技大学出版社,2007. [5]钟富昭等.8051单片机典型模块设计与应用[M].人民邮电出版社,2007. [6]李平等.单片机入门与开发[M].机械工业出版社,2008.

7

附录1 原理图

8

附录2 源程序 #include

#define uchar unsigned char #define uint unsigned int sbit rs=P2^4; sbit en=P2^6; sbit wr=P2^5;

/*湖南理工学院——汉子图形编码*/

/*******************************************/ /******************湖***********************/ uchar code CGCODE1[]={

0x00,0x04,0x02,0x01,0x00,0x04,0x02,0x01, 0x00,0x04,0x04,0x04,0x1F,0x04,0x04,0x04, 0x00,0x00,0x01,0x02,0x04,0x08,0x00,0x00, 0x1F,0x11,0x11,0x11,0x11,0x1F,0x00,0x00, 0x00,0x1F,0x11,0x11,0x11,0x11,0x1F,0x11, 0x00,0x0E,0x0A,0x02,0x0E,0x08,0x0A,0x0E, 0x11,0x1F,0x11,0x11,0x13,0x11,0x00,0x00, 0x0E,0x0A,0x08,0x0E,0x02,0x0A,0x0E,0x00};

/******************南***********************/ uchar code CGCODE2[]={

0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07, 0x04,0x04,0x04,0x1F,0x04,0x04,0x04,0x1F, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04, 0x11,0x0A,0x1F,0x04,0x0E,0x04,0x04,0x04, 0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1C, 0x00,0x0E,0x0A,0x02,0x0E,0x08,0x0A,0x0E, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x0C, 0x0E,0x0A,0x08,0x0E,0x02,0x0A,0x0E,0x00};

9

/******************理***********************/ uchar code CGCODE3[]={

0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x1F, 0x00,0x1F,0x15,0x15,0x1F,0x15,0x15,0x1F, 0x04,0x04,0x04,0x05,0x06,0x0C,0x18,0x00, 0x04,0x04,0x0E,0x04,0x04,0x04,0x1F,0x00, 0x00,0x0E,0x11,0x11,0x01,0x01,0x06,0x04, 0x00,0x0E,0x0A,0x02,0x0E,0x08,0x0A,0x0E, 0x0C,0x10,0x10,0x11,0x11,0x0E,0x00,0x00, 0x0E,0x0A,0x08,0x0E,0x02,0x0A,0x0E,0x00};/

/******************工***********************/ uchar code CGCODE4[]={

0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0x04,0x04,0x04,0x04, 0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00, 0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00, 0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00, 0x00,0x0E,0x0A,0x02,0x0E,0x08,0x0A,0x0E, 0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00, 0x0E,0x0A,0x08,0x0E,0x02,0x0A,0x0E,0x00};

/******************学***********************/ uchar code CGCODE5[]={

0x00,0x00,0x00,0x08,0x04,0x02,0x0F,0x10, 0x00,0x00,0x00,0x08,0x04,0x02,0x1F,0x00, 0x03,0x00,0x00,0x07,0x00,0x00,0x00,0x00, 0x1F,0x01,0x04,0x1F,0x04,0x14,0x0C,0x04, 0x00,0x00,0x00,0x02,0x04,0x08,0x1F,0x02, 0x00,0x0E,0x0A,0x02,0x0E,0x08,0x0A,0x0E, 0x18,0x00,0x00,0x1C,0x00,0x00,0x00,0x00, 0x0E,0x0A,0x08,0x0E,0x02,0x0A,0x0E,0x00};/

10

/******************院***********************/ uchar code CGCODE6[]={

0x00,0x1E,0x11,0x11,0x12,0x1C,0x12,0x11, 0x00,0x03,0x01,0x0F,0x18,0x10,0x07,0x00, 0x11,0x11,0x19,0x15,0x13,0x10,0x10,0x10, 0x0F,0x02,0x02,0x02,0x06,0x0C,0x08,0x10, 0x00,0x00,0x10,0x1E,0x01,0x03,0x1C,0x00, 0x00,0x0E,0x0A,0x02,0x0E,0x08,0x0A,0x0E, 0x1E,0x10,0x10,0x10,0x11,0x11,0x19,0x0e, 0x0E,0x0A,0x08,0x0E,0x02,0x0A,0x0E,0x00};

/*********** 网址和日期——显示 ************/ uchar code web[]={%uchar code time[]={\

/**************** 延时程序 ***************/ void delay(uint t) { uint x,y; for(x=0;x

for(y=0;y<110;y++);

}

/**************向1602写指令***************/ void write_com(uchar com) { rs=0; P0=com; delay(5); en=1; delay(5); en=0; }

11

/**************向1602写数据***************/ void write_date(uchar dat) { rs=1; P0=dat; delay(5); en=1; delay(5); en=0;

}

/**************程序初始化***************/ void init() { wr=0; en=0;

write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); }

/**********写入并显示***********/ void display(uchar p[]) { uchar i;

write_com(0x40);//将自定义字符写入CGRAM for(i=0;i<64;i++)//循环64次写入 {

write_date(p[i]); }

write_com(0x80);//写入初始地址 write_date(0x00);

write_com(0x80+1);//写入初始地址

write_date(0x01); 12

write_com(0x80+0x40);//写入初始地址 write_date(0x02); write_com(0x80+0x41); write_date(0x03);

write_com(0x80+2);//写入初始地址 write_date(0x04);

write_com(0x80+3);//写入初始地址 write_date(0x05);

write_com(0x80+0x42);//写入初始地址 write_date(0x06); write_com(0x80+0x43); write_date(0x07); delay(1000);

}

/*********主函数********/ void main() { uchar i; init(); rs=0; wr=0;

write_com(0x80+0x04); for(i=0;i<13;i++) { write_date(web[i]);

}

write_com(0x80+0x44); for(i=0;i<14;i++) { write_date(time[i]); } while(1)

{ display(CGCODE1);

13

}

}

display(CGCODE2); display(CGCODE3); display(CGCODE4); display(CGCODE5); display(CGCODE6);

14

本文来源:https://www.bwwdw.com/article/4no3.html

Top