《51单片机1602移动液晶显示(共14页).doc》由会员分享,可在线阅读,更多相关《51单片机1602移动液晶显示(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上单片机课时设计设计主题:1602移动液晶显示院 系: 工程技术学院专 业: 11级电气自动化一班学 号: 姓 名: 指导老师: 孙建延 基于单片机控制的1602液晶显示1.引言单片机作为微型计算机发展的一个重要的分支,以其高可靠性、高性价比、低电压、低功耗的优势,赢得了广泛的应用。单片机技术是一门技术性、应用性很强的学科,在目前和今后相当长的一段时间仍有着广泛的应用。实验教学作为其极为重要的组成环节,在硬件扩展、接口应用、编程方法以及程序调试等方面,都起到重要作用。作为学习自动控制专业的学生,单凭课堂理论课学习,不切实认真的进行实践仿真,势必出现理论与实践脱节、学习与
2、应用脱节等局面。1.1课程设计的思想此次单片机原理及系统课程设计,选择的是利用1602液晶显示,利用AT89C52芯片实现一串滚动字符显示,本次设计使用的1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置128个字符的ASC字符集字库,只有并行接口,无串行接口。通过C语言编程经keil软件生成可以在proteus软件中仿真装载的.hex文件,进而通过proteus软件进行硬件电路连接以及软件的仿真,利用LM016L显示器替代1602型液晶显示器,最终得出液晶显示。1.2课程设计的目的此次程设计是在学习必修课程单片机原理与系统设计之后,为加强学生对单片机系统设计和
3、应用能力的培养而开设的综合设计训练环节。本课程设计应结合单片机原理与系统设计课程的基础理论,重点强调实际应用技能训练,包括单片机系统设计的软件和硬件两部分。其课程设计任务是使学生通过应用单片机系统设计的基本理论,基本知识与基本技能,掌握单片机应用系统各主要环节的设计、调试方法,初步掌握并具备应用单片机进行设备技术改造和产品开发的能力,培养学生的创新意识,提高学生的动手能力和分析问题、解决问题的能力。1.3课程设计要求 设计要求:采用单片机控制,通过C语言编程实现在1602液晶的第一行显示”WELCOME TO ZDH!”,然后在第二行显示”K092XWEI”然,定格在屏幕上。2.设计方案及原理
4、2.1 1602型液晶简介 2.1.1 1602引脚功能LCD1602引脚如图2.1所示:图2.1 LCD1602引脚图1602液晶显示屏各端口信号功能如表2.1所示:表2.1 1602液晶接口信号说明编号符号引脚说明编号符号引脚说明1Vss电源地9D2数据口2Vdd电源正极10D3数据口3Vee液晶显示对比度调节端11D4数据口4RS数据/指令端(H/L)12D5数据口5R/W读写选择端(H/L)13D6数据口6E使能信号14D7数据口7D0数据口15BLA背光电源正极8D1数据口16BLK背光电源负极2.2 1062型液晶初始化设置使用该液晶显示屏时,应首先对其进行初始化设置。各初始化设置
5、指令码及功能,如表2.2所示:表2.2 显示开/关及光标设置指令码功能00001DCBD=1 开显示;D=0 关显示00001DCBC=1 显示光标;C=0 不显示光标00001DCBB=1 光标闪烁;B=0 光标不显示000001N1N=1当读或写一个字符后地址光标加1000001N1N=0当读或写一个字符后地址光标加100000001显示清屏:数据指针、所有显示清零00111000162显示、57点阵、8位数据接口2.3 1602液晶写操作时序流程(1)通过RS确定是写数据还是写指令。写指令包括使液晶的光标显示/不显示、光标闪烁/不闪烁、需/不需要移屏、在什么地方显示等。(2)读/写控制端
6、设为写模式,即低电平。(3)将数据或指令送达数据线上。(4)给E一个高脉冲将数据送入液晶控制器,完成操作。2.4 硬件接口设计方案(1)液晶1、2端为电源;15、16为背光电源(在仿真中可不用)。(2)液晶3端为液晶对比度调节端,通过一个10千欧电位器接地来调节对比度。(3)液晶4端为向液晶控制器写数据或写指令选择端,接单片机的P3.5口。(4)液晶5端为读/写选择端,因为我们不从液晶读取任何数据,只向其写入指令或显示数据,因此此端始终选择为写状态,即为低电平接地。(5)液晶6端为使能信号,是操作是必需的信号,接单片机的P3.4口。(6)液晶714端口为数据或指令的输入输出口,接单片机P0的8
7、个接口。3.硬件设计根据如上分析,在proteus软件环境中搭建硬件电路,采用AT89C52型单片机,LM016L显示器替代1602型液晶显示器。硬件连接方式(两种)如图3.1、3.2所示:图3.1 系统硬件电路图连接方式一4.软件设计4.1源程序清单见附录14.2源程序调试结果在keil软件中键入4.1中的源程序并给予调试。调试结果如图4.1所示:图4.1 源程序调试结果由图可知源程序语法无误,并生成了.hex的文件,为在proteus软件中仿真做准备。4.3仿真结果在proteus软件中仿真,屏幕上会出现如下两行字符“Zhong Zhou University”和“A”。如图4.2所示:图
8、4.2 最终效果图继而可知仿真成功,软硬件设计合理。5.总结心得通过一周的课程设计,让我感受最深的就是学习是一种乐趣。在这次课程设计中,我们接触了一种新的实现,试验箱,他多样的功能激发了我们去学子它,进而掌握它的兴趣。从拿到任务书,开始充分利用网络及图书馆等资源,查询资料,了解试验箱的功能。在之前专业课理论知识的基础上,我们又从模糊到熟悉逐渐了解了什么是单片机编程。然后面对我们的首要任务,我们的想法,回顾这一周的课设,我学会了单片机编程的一些功能的使用,但只是一小部分而已,我此后将继续研究这么一个强大的工具。对于仿真软件的使用,非常有成就感,极大的激发了我们对新鲜事物学习的兴趣,从而以积极的心
9、态去面对这次课程设计。最后,我通过这次课程设计,使我对滤波器有了更深刻的认识。总之,在这一周的时间,一直是有条不紊的进行着,到最后看到我们的努力得到收获的时候,我们满怀欣慰。在这次课设中,我们看到了自己的进步,看到了老师和学长对工作的认真负责和对学生的耐心和热情,所以在以后的课程设计中,我将满怀激情,更加努力去面对。参考文献1 孙建延.基于 C 语言编程 MCS-51 单片机原理与应用M . 北京:清华大学出版社,20112 蔡美琴,张为民.MCS-51系列单片机系统及其应用.第2版.北京:高等教育出版社,20043 李广弟,朱月秀,冷祖祁.单片机基础.第3版.北京:北京航空航天大学出版社,2
10、007 4 周润景,张丽娜基于PROTEUS 的电路及单片机系统设计与仿真M北京:航空航天大学出版社,2006附录附录1 源程序清单#include #include #define uchar unsigned char#define uint unsigned intsbit LCD_RS = P33; sbit LCD_RW = P34;sbit LCD_EN = P35;uchar code dis1 = Zhong Zhou University ;uchar code dis2 = A ;/*/* */* 延时子程序 */* */*/void delay(int ms) int i
11、; while(ms-) for(i = 0; i 250; i+) _nop_(); _nop_(); _nop_(); _nop_(); /*/* */*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */* /*/bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; /*/* */*写指令
12、数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */* */*/void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; /*/* */*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */* *
13、/*/void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; /*/* */* 设定显示位置 */* */*/void lcd_pos(uchar pos) lcd_wcmd(pos|0x80); /数据指针=80+地址变量/*/* */* LCD初始化设定 */* */*/void
14、lcd_init() delay(15); /等待LCD电源稳定 lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); /显示开,关光标 delay(5); lcd_wcmd(0x06); /移动光标 delay(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay(5);/*/* */* 清屏子程序 */* */*/void lcd_clr() lcd_wcmd(0x01); /清除LCD的显示内容
15、delay(5);/*/* */* 闪动子程序 */* */*/void flash() delay(600); /控制停留时间 lcd_wcmd(0x08); /关闭显示 delay(200); /延时 lcd_wcmd(0x0c); /开显示 delay(200); lcd_wcmd(0x08); /关闭显示 delay(200); /延时 lcd_wcmd(0x0c); /开显示 delay(200);/*/* */* 主程序 */* */*/main() uchar i,j; delay(10); lcd_init(); /初始化LCD while(1) lcd_clr(); lcd_
16、pos(0x10); /设置显示位置为第一行第17列 i = 0; while(dis1i != 0) /显示字符 lcd_wdat(dis1i); i+; lcd_pos(0x50); /设置显示位置为第二行第17列 i = 0; while(dis2i != 0) lcd_wdat(dis2i); /显示字符 i+; /*for(j=0;j16;j+) /左移动16格 lcd_wcmd(0x18); /字符同时左移一格 delay(100); /控制移动时间 flash(); */ /闪动二次 for(j=0;j29;j+) /向左移动29格 lcd_wcmd(0x18) ; /字符同时左移一格 delay(100) ; /控制移动时间 for(j=0;j13;j+) /向右移动13格 lcd_wcmd(0x1C) ; /字符同时左移一格 delay(100) ; /控制移动时间 flash() ; /闪动二次 附录2 主程序流程图附图2.1 主程序流程图 附图3.1 连线方式一情况下的最终效果o专心-专注-专业