基于msp430G2533的LCD1602液晶字符串循环显示课程设计.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 msp430G2533 LCD1602 液晶 字符串 循环 显示 课程设计
- 资源描述:
-
学 号: 课 程 设 计 题 目 LCD1602液晶字符串循环显示 学 院 专 业 班 级 姓 名 指导教师 2013 年 1 月 15 日 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 题目要求 : 使用LaunchPad上的板上资源,外接1602液晶,编写程序使字符串在液晶上循环移动。 时间安排: 2014年元月1日~2014年元月17日下午17:30 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 目录 引言................................................................1 1 课程设计要求......................................................2 2 硬件电路..........................................................3 2.1 MSP430G2553单片机...........................................3 2.1.1 MSP430G2553单片机特点..................................3 2.1.2 MSP430G2553单片机结构..................................3 2.1.3 MSP430G2553的时钟系统..................................4 2.1.4 I/O寄存器..............................................5 2.2 LCD1602液晶屏................................................5 3 方案设计..........................................................7 3.1 设计方案....................................................7 3.2 方案选择....................................................7 4 程序设计..........................................................8 4.1 程序结构....................................................8 4.2 主程序源程序................................................8 4.3 子程序源程序................................................8 4.4 子程序头文件...............................................12 5 调试.............................................................13 5.1 CCSv5编译软件..............................................13 5.2 调试过程...................................................13 6 结束语...........................................................15 附录1:代码........................................................16 附录2:实物图......................................................22 参考文献...........................................................23 本科生课程设计成绩评定表...........................................24 引言 本次课程设计旨在设计一个基于 MSP430 系列微处理器的LCD1602液晶字符串循环移动。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正在以前所未见的速度被单片机智能控制系统所代替。单片机的使用随处可见,而人们的生活也越来越离不开单片机。 液晶是相态的一种,因为其特殊的物理、化学、光学特性,20世纪中叶开始被广泛应用在轻薄型的显示技术上液晶显示器也被广泛运用,也发挥着越来越大的作用。尽年来,液晶显示技术飞速发展,运用更加广泛。 本课程设计通过MSP430G2553单片机控制LCD1602液晶显示器实现一串字符循环移动。 1 课程设计要求 使用LaunchPad上的板上资源,外接1602液晶,编写程序使“Wuhan Uniwersity of Technology welcome You!”在液晶上循环移动显示。 2 硬件电路 2.1 MSP430G2553单片机 2.1.1 MSP430G2553单片机特点 MSP430G2系列是德州仪器近期推出的一款产品,在秉承MSP430超低功耗,高集成度的优点的同时,具有高性价比的特点。该系列被称为ValueLine,旨在以8位单片机的价格实现16位单片机的性能。MSP-EXP430Launchpad是TI推出的又一套用于MSP430和电路实验的开发板。除了学生自主创新实践外,LaunchPad开发板还可以用于本科低年级课程,如嵌入式C语言,电子技术基础,微机原理,单片机等课程的自主实验环节以及课程设计。该套开发板为单片机热爱者提供了一个很好的学习平台。 2.1.2 MSP430G2553单片机结构 如图所示是板载一颗MSP430G2553单片机的Launch Pad评估实验开发板: 图1 Launch Pad评估实验开发板 板上额外资源: (1) 板载 USB 调试与编程仿真器接口,无驱动可安装 (2) 支持所有采用 DIP14 和 DIP20 封装 MSP430G2XX 和 MSP430F20 器 (3) 红绿两粒 LED,两个按键 (4) 配套两款电容触摸板 (5) 所有管脚在板子两边引出 2.1.3 MSP430G2553的时钟系统 MSP430G2系列单片机的时钟系统需要支持系统低功耗运行的需要。通过对三个内部时钟信号的运用,用户可很容易的选择功耗最低,效率最高的系统时钟方案。在软件的控制下,MSP430G2系列单片机运行时可以不接外接晶振,也可接一只外接电阻或者接一到两只外接晶振,也可以外接频率发生器。 基本时钟模块包括二至四个时钟源: LFXT1CLK:外接低频或高频振荡器,如手表晶振,频率发生器,外部时钟源(400kHz至16MHz). XT2CLK:外接高频晶振,范围在400kHz至16MHz DCOCLK:内部时钟震荡 VLOCLK:内部低频低功耗晶振,标准频率是12kHz 三种时钟信号可被CPU和外设所使用: ACLK:辅助时钟,ACLK可被软件配置成从LFXT1CLK或VLOCLK输入震荡ACLK可以被1,2,4,8分频。ACLK可以被选用作为外围模块的时钟输入。 MCLK:主时钟,主时钟可以从LFXT1CLK或VLOCLK,XT2CLK或DCOCLK输入MCLK用在CPU系统之中。 SMCLK:辅助主时钟。SMCLK可被选择从LFXT1CLK,VLOCLK,XT2CLK或DCOCLK输入。SMCLK可以被1,2,4,8分频。SMCLK可被选用为外围模块的时钟。 2.1.4 I/O寄存器 和大部分单片机类似,MSP430系列单片机也是将8个IO口编为一组。每个IO口有四个控制寄存器,P1和P2还有额外的3个中断寄存器。寄存器情况可参见表1。 表1 I/O寄存器 2.2 LCD1602液晶屏 LCD1602采用8位并行数据传输,其操作时序如下图所示: LCD1602接口由8位数据线,电源地电源正,液晶显示偏压信号(VL),数据命令选择端(RS),读写选择端(RW)组成。其接口信号说明如下图所示: 图2接口信号说明图 可以在1602的液晶显示偏压信号端接一个可变电阻,调节显示亮度,初始状态时,调至1602上面一排显示12个黑块为止,LCD1602电路图如下图所示: 3 方案设计 3.1 设计方案 方案一:使用MSP430F1612编程控制LCD1602液晶屏实现实现一串字符左右交替整屏移动。 方案二:使用MSP430G2553编程控制LCD1602液晶屏实现一串字符左右交替整屏移动。 3.2 方案选择 要完成控制LCD1602液晶屏实现一串字符左右交替整屏移动,MSP430G2553单片机足够了,而且能够比MSP430F1612节省资源,价格低,所以选择方案二。 4 程序设计 4.1 程序结构 该程序主要由主程序源程序main.c、子程序源程序cry1602.c和子程序头文件cry1602.h构成采用这种程序结构,使程序更加清晰,一目了然,减少程序错误的机会,增强了程序的可移植性。在程序设计中MSP430G2553中P1口作为并行数据输出端,P2.0、P2.1、P2.2分别作为LCD1602液晶的RS、RW、E端。 4.2 主程序源程序 主程序中使用看门狗定时器进行计时,控制字符串移动的速度。字符串先左移,再右移,之后循环移动。程序如下: #include <msp430g2533.h> #include "cry1602.h" #define uchar unsigned char uchar *s1 = " Wuhan University of Technology Welcome!"; void main(void) { WDTCTL = WDT_ADLY_250; //间隔定时器,定时250ms uchar *s2; uchar j,k,l; uchar i = 0; s2 = s1; LcdReset(); while(*s1++ != '\0') i++; //计算字符串有效字符个数 while(1) { for(j = 0;j < i;j++) { l = j; for(k = 0;k < 16;k++) { if(l < i) Disp1Char(k,0,s2[l++]); else Disp1Char(k,0,' '); } IFG1 &= ~WDTIFG; //清除中断失效标志 while(!(IFG1 & WDTIFG)); IFG1 &= ~WDTIFG; } } } 4.3 子程序源程序 子程序中包含一些宏定义,使程序可移植性增强,还包含一些对LCD1602液晶的操作程序及延时程序。程序如下: #include <msp430g2533.h> #include "cry1602.h" #define datadir P1DIR #define dataport P1OUT #define busy 0x80 #define ctrldir P2DIR #define CLR_RS P2OUT &= ~BIT0; //RS = P2.0 #define SET_RS P2OUT |= BIT0; #define CLR_RW P2OUT &= ~BIT1; //RW = P2.1 #define SET_RW P2OUT |= BIT1; #define CLR_EN P2OUT &= ~BIT2; //EN = P2.2 #define SET_EN P2OUT |= BIT2; void DispStr(uchar x,uchar y,uchar *ptr) { uchar *temp; uchar i,n = 0; temp = ptr; while(*ptr++ != '\0') n++; //计算字符串有效字符个数 for(i = 0; i < n; i++) { Disp1Char(x++,y,temp[i]); if(x == 0x0f) { x = 0; y ^= 1; } } } void DispNChar(uchar x,uchar y,uchar n,uchar *ptr) { uchar i; for(i = 0; i < n; i++) { Disp1Char(x++,y,ptr[i]); if(x == 0x0f) { x = 0; y ^= 1; } } } void LocateXY(uchar x,uchar y) { uchar temp; temp = x&0x0f; y &= 0x01; if(y) temp |= 0x40;//如果在第2行 temp |= 0x80; LcdWriteCommand(temp,1); } void Disp1Char(uchar x,uchar y,uchar data) { LocateXY(x,y); LcdWriteData(data); } void LcdReset(void) { ctrldir |= 0x07; //控制线端口设为输出状态 datadir = 0xff; //数据端口设为输出状态 LcdWriteCommand(0x38,0); //规定的复位操作 Delay5ms(); LcdWriteCommand(0x38,0); Delay5ms(); LcdWriteCommand(0x38,0); Delay5ms(); LcdWriteCommand(0x38,1); //显示模式设置 LcdWriteCommand(0x08,1); //显示关闭 LcdWriteCommand(0x01,1); //显示清屏 LcdWriteCommand(0x06,1); //写字符时整体不移动 LcdWriteCommand(0x0c,1); //显示开,不开游标,不闪烁 } void LcdWriteCommand(uchar cmd,uchar chk) { if(chk) WaitForEnable(); //检测忙信号? CLR_RS; CLR_RW; _NOP(); dataport = cmd; //将命令字写入数据端口 _NOP(); SET_EN; //产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } void LcdWriteData(uchar data) { WaitForEnable(); //等待液晶不忙 SET_RS; CLR_RW; _NOP(); dataport = data; //将四显示数据写入数据端口 _NOP(); SET_EN; //产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } void WaitForEnable(void) { P1DIR &= 0X00; //将P1口切换为输入状态 CLR_RS; SET_RW; _NOP(); SET_EN; _NOP(); _NOP(); while((P1IN & busy) != 0); //检测忙标志 CLR_EN; P1DIR |= 0xff; //将P1口切换为输出状态 } void Delay5ms(void) { uint i = 40000; while(i != 0) { i--;} } 4.4 子程序头文件 该头文件中是对子程序进行程序说明,方便主程序的调用。程序如下: #ifndef _CRY1602_H #define _CRY1602_H #define uchar unsigned char #define uint unsigned int void DispStr(uchar x,uchar y,uchar *ptr); void DispNChar(uchar x,uchar y,uchar n,uchar *ptr); void LocateXY(uchar x,uchar y); void Disp1Char(uchar x,uchar y,uchar data); void LcdReset(void); void LcdWriteCommand(uchar cmd,uchar chk); void LcdWriteData(uchar data); void WaitForEnable(void); void Delay5ms(void);#endif 5调试 5.1 CCSv5编译软件 Code Composer Studio 是一种针对TI的DSP、微控制器和应用处理器的集成开发环境。CCStudio 包括一套用于开发和调试嵌入式应用程序的工具。它包括用于各种 TI 设备系列的编译器、源代码编辑器、项目生成环境、调试程序、探查器、模拟器和其他许多功能。CCStudio提供一个单一用户界面,指导用户完成应用程序开发流程的每一步骤。 安装好CCSv5之后,先新建一个工程,然后在新建的工程里建立.c或.h文件,接下来便可以在文件里编写程序,并调试运行,Build Project 为编译,Debug是仿真。 5.2 调试过程 程序编写完成后,经检查无误后,点击Project->Build Project,进行编译,编译结果如图2所示: 图2 程序调试界面 在调试过程中,开始时LCD1602液晶一直没有显示,认为是程序出了问题,不过经过检查和调试,发现程序没问题。不是程序问题,就检查硬件,最终发现了问题是LCD1602液晶屏的V0口与GND间的滑动变阻器没有调节合适,导致无法观察到显示效果。经过调节滑动变阻器,就可以观察到课程设计所要求的效果。如图3所示: 图4 LCD1602液晶显示 在调试过程中,有时候会出现无法脱机运行的情况,经过检查,发现是因为芯片管脚接触不良导致的,压紧芯片即可解决问题。 6结束语 通过完成本次课程设计,我学到了许许多多的知识,获得了丰富的经验。在完成课程设计的过程中对MSP430G2553有了初步的了解,掌握了该单片机的一些使用技巧,例如:I/O口寄存器的设置及使用,定时器的使用和中断的使用等等。掌握并能够熟练使用CCSv5这个编程软件,在该软件上进行编写程序,下载并进行调试,最终完成了本次课程设计。在程序设计、编写程序到调试的过程中,加强了我独立发现问题解决问题的能力,同时使得实践能力得到进一步的提高。 在实践中,充分将理论知识用于实践,使自身对知识的理解更进一层,更加能够熟练的掌握并使用理论知识。实践是检验真理的唯一标准,只有通过实践才能体现出理论知识的价值。 附录1 1 主程序 /********************************************************* 程序功能:循环显示字符串 ********************************************************/ #include <msp430g2533.h> #include "cry1602.h" #define uchar unsigned char uchar *s1 = " Wuhan University of Technology Welcome!"; void main(void) { WDTCTL = WDT_ADLY_250; //间隔定时器,定时250ms uchar *s2; uchar j,k,l; uchar i = 0; s2 = s1; LcdReset(); while(*s1++ != '\0') i++; //计算字符串有效字符个数 while(1) { for(j = 0;j < i;j++) { l = j; for(k = 0;k < 16;k++) { if(l < i) Disp1Char(k,0,s2[l++]); else Disp1Char(k,0,' '); } IFG1 &= ~WDTIFG; //清除中断失效标志 while(!(IFG1 & WDTIFG)); IFG1 &= ~WDTIFG; } } } 2 子程序源程序 #include <msp430g2533.h> #include "cry1602.h" /*****************宏定义***********************/ #define datadir P1DIR #define dataport P1OUT #define busy 0x80 #define ctrldir P2DIR #define CLR_RS P2OUT &= ~BIT0; //RS = P2.0 #define SET_RS P2OUT |= BIT0; #define CLR_RW P2OUT &= ~BIT1; //RW = P2.1 #define SET_RW P2OUT |= BIT1; #define CLR_EN P2OUT &= ~BIT2; //EN = P2.2 #define SET_EN P2OUT |= BIT2; /*************************************************** 函数名称:Dispstr 功 能:让液晶从某个位置起连续显示一个字符串 参 数:x--位置的列坐标 y--位置的行坐标 ptr--指向字符串存放位置的指针 返回值 :无 ***************************************************/ void DispStr(uchar x,uchar y,uchar *ptr) { uchar *temp; uchar i,n = 0; temp = ptr; while(*ptr++ != '\0') n++; //计算字符串有效字符个数 for(i = 0; i < n; i++) { Disp1Char(x++,y,temp[i]); if(x == 0x0f) { x = 0; y ^= 1; } } } /*************************************************** 函数名称:DispNChar 功 能:让液晶从某个位置起连续显示一个字符串 参 数:x--位置的列坐标 y--位置的行坐标 n--显示字符个数 ptr--指向字符串存放位置的指针 返回值 :无 ***************************************************/ void DispNChar(uchar x,uchar y,uchar n,uchar *ptr) { uchar i; for(i = 0; i < n; i++) { Disp1Char(x++,y,ptr[i]); if(x == 0x0f) { x = 0; y ^= 1; } } } /*************************************************** 函数名称:LocateXY 功 能:向液晶输入显示字符位置的坐标信息 参 数:x--位置的列坐标 y--位置的行坐标 返回值 :无 ***************************************************/ void LocateXY(uchar x,uchar y) { uchar temp; temp = x&0x0f; y &= 0x01; if(y) temp |= 0x40;//如果在第2行 temp |= 0x80; LcdWriteCommand(temp,1); } /*************************************************** 函数名称:Disp1Char 功 能:在某个位置显示一个字符 参 数:x--位置的列坐标 y--位置的行坐标 data--显示的字符数据 返回值 :无 ***************************************************/ void Disp1Char(uchar x,uchar y,uchar data) { LocateXY(x,y); LcdWriteData(data); } /*************************************************** 函数名称:LcdReset 功 能:对1602液晶模块进行复位操作 参 数:无 返回值 :无 ***************************************************/ void LcdReset(void) { ctrldir |= 0x07; //控制线端口设为输出状态 datadir = 0xff; //数据端口设为输出状态 LcdWriteCommand(0x38,0); //规定的复位操作 Delay5ms(); LcdWriteCommand(0x38,0); Delay5ms(); LcdWriteCommand(0x38,0); Delay5ms(); LcdWriteCommand(0x38,1); //显示模式设置 LcdWriteCommand(0x08,1); //显示关闭 LcdWriteCommand(0x01,1); //显示清屏 LcdWriteCommand(0x06,1); //写字符时整体不移动 LcdWriteCommand(0x0c,1); //显示开,不开游标,不闪烁 } /*************************************************** 函数名称:LcdWriteCommand 功 能:向液晶模块写入命令 参 数:cmd--命令, chk--是否判忙的标志,1:判忙,0:不判 返回值 :无 ***************************************************/ void LcdWriteCommand(uchar cmd,uchar chk) { if(chk) WaitForEnable(); //检测忙信号? CLR_RS; CLR_RW; _NOP(); dataport = cmd; //将命令字写入数据端口 _NOP(); SET_EN; //产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } /*************************************************** 函数名称:LcdWriteData 功 能:向液晶显示的当前地址写入显示数据 参 数:data--显示字符数据 返回值 :无 ***************************************************/ void LcdWriteData(uchar data) { WaitForEnable(); //等待液晶不忙 SET_RS; CLR_RW; _NOP(); dataport = data; //将四显示数据写入数据端口 _NOP(); SET_EN; //产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } /*************************************************** 函数名称:WaitForEnable 功 能:等待1602液晶完成内部操作 参 数:无 返回值 :无 ***************************************************/ void WaitForEnable(void) { P1DIR &= 0X00; //将P1口切换为输入状态 CLR_RS; SET_RW; _NOP(); SET_EN; _NOP(); _NOP(); while((P1IN & busy) != 0); //检测忙标志 CLR_EN; P1DIR |= 0xff; //将P4口切换为输出状态 } /*************************************************** 函数名称:Delay5ms 功 能:延时约5ms 参 数:无 返回值 :无 ***************************************************/ void Delay5ms(void) { uint i = 40000; while(i != 0) { i--; } } 3 子程序头文件 #ifndef _CRY1602_H #define _CRY1602_H #define uchar unsigned char #define uint unsigned int void DispStr(uchar x,uchar y,uchar *ptr); void DispNChar(uchar x,uchar y,uchar n,uchar *ptr); void LocateXY(uchar x,uchar y); void Disp1Char(uchar x,uchar y,uchar data); void LcdReset(void); void LcdWriteCommand(uchar cmd,uchar chk); void LcdWriteData(uchar data); void WaitForEnable(void); void Delay5ms(void);#endi 附录2 图5 实物 参考文献 [1]曹磊.MSP430单片机C程序设计与实践[M].北航大学出版社,2007-7. [2]李建忠.MSP430单片机原理与实践教程[M].西安电子科技大学出版社,2002. [3]皮大能,南光群,刘金华.单片机课程设计指导书[M].北京理工大学出版社,2010-7-1. [4]沈建华,杨艳琴,翟晓曙.MSP430系列16位超低功耗单片机实践与系统设计[M].清华大学出版社,2005-4. 本科生课程设计成绩评定表 姓 名 性 别 男 专业、班级 课程设计题目:LCD1602液晶字符循环显示 课程设计答辩或质疑记录:展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




基于msp430G2533的LCD1602液晶字符串循环显示课程设计.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/2931498.html