基于msp430G2533的LCD1602液晶字符串循环显示课程设计策画
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 学 号: 课 程 设 计
题 目 LCD1602液晶字符串循环显示
学 院 专 业 班 级 姓 名 指导教师 2013 年 1 月 15 日 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 题目要求 : 使用LaunchPad上的板上资源,外接1602液晶,编写程序使字符串在液晶上循环移动。 时间安排: 2014年元月1日~2014年元月17日下午17:30 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 目录 引言................................................................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文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 引言 本次课程设计旨在设计一个基于 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语言,电子技术基础,微机原理,单片机等课程的自主实验环节以及课程设计。该套开发板为单片机热爱者提供了一个很好的学习平台。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 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可以被选用作为外围模块的时钟输入。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 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 方案选择
(完整word)基于FPGA的 LCD1602显示控制器设计
唐山学院《EDA技术》课程设计题目 LCD1602显示控制器设计系(部) 信息工程系班级 11电本3班姓名刘亮学号 4110218214指导教师郭耀华田丽欣柳延领2014 年6 月 30 日至 7月 4日共 1 周2014年 7月 4日课程设计成绩评定表目录1 引言 01.1 EDA技术的介绍 01。
2 EDA技术的发展 (1)2 VHDL/Quartus II简介 (2)2.1 VHDL语言介绍 (2)2。
2 界面介绍 (3)3 模块设计 (4)3。
1 LCD1602液晶模块 (4)3.2 矩阵键盘模块 (7)3。
3 设计思路 (8)4 系统设计方案一 (8)4.1 矩阵键盘模块设计 (9)4。
2 LCD1602液晶显示模块设计 (12)5 系统设计方案二 (14)5.1拨码开关控制的LCD1602显示模块 (14)5。
2拨码开关控制的LCD1602显示模块程序 (15)5。
3拨码开关控制的LCD1602显示模块仿真图 (18)6 设计总结 (18)参考文献 (19)1 引言1.1 EDA技术的介绍在电子设计自动化(英语:Electronic design automation,缩写:EDA)出现之前,设计人员必须手工完成集成电路的设计、布线等工作,这是因为当时所谓集成电路的复杂程度远不及现在.工业界开始使用几何学方法来制造用于电路光绘(photoplotter)的胶带.到了1970年代中期,开发人员尝试将整个设计过程自动化,而不仅仅满足于自动完成掩膜草图。
第一个电路布线、布局工具研发成功.设计自动化会议(Design Automation Conference)在这一时期被创立,旨在促进电子设计自动化的发展.电子设计自动化发展的下一个重要阶段以卡弗尔·米德(Carver Mead)和琳·康维于1980年发表的论文《超大规模集成电路系统导论》(Introduction to VLSI Systems)为标志。
msp430单片机1602显示
/****************POWSOS__430************************ 程序功能:静态显示各种字符----------------------------------------------------测试说明:观察液晶显示****************************************************/ #include <msp430.h>#include "Cry1602.h"#include "Cry1602.c"uchar shuzi[] = {"0123456789"};uchar zimu1[] = {"abcdefghigklmnopqrstuvwxyz"};uchar zimu2[] = {"ABCDEFGHIGKLMNOPQRSTUVWXYZ"};uchar *fuhao = "~`!@#$%^&*()_+-=/|,.、;'<>?:""";uchar *jieshu = "This is the end!";/***********************主函数************************/ void main( void ){/*下面六行程序关闭所有的IO口*/P1DIR = 0XFF;P1OUT = 0XFF;P2DIR = 0XFF;P2OUT = 0XFF;P3DIR = 0XFF;P3OUT = 0XFF;P4DIR = 0XFF;P4OUT = 0XFF;P5DIR = 0XFF;P5OUT = 0XFF;P6DIR = 0XFF;P6OUT = 0XFF;uchar i;WDTCTL = WDT_ADLY_1000; //间隔定时器,定时1000ms P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换LcdReset();DispNChar(3,0,10,shuzi);//延时2sfor(i = 0; i < 3; i++){IFG1 &= ~WDTIFG;while(!(IFG1 & WDTIFG));IFG1 &= ~WDTIFG;}LcdWriteCommand(0x01, 1); //清除显示DispNChar(0,0,26,zimu1);//延时2sfor(i = 0; i < 3; i++){IFG1 &= ~WDTIFG;while(!(IFG1 & WDTIFG));IFG1 &= ~WDTIFG;}LcdWriteCommand(0x01, 1); //清除显示DispNChar(0,0,26,zimu2);//延时2sfor(i = 0; i < 3; i++){IFG1 &= ~WDTIFG;while(!(IFG1 & WDTIFG));IFG1 &= ~WDTIFG;}LcdWriteCommand(0x01, 1); //清除显示 DispStr(0,0,fuhao);//延时2sfor(i = 0; i < 3; i++){IFG1 &= ~WDTIFG;while(!(IFG1 & WDTIFG));IFG1 &= ~WDTIFG;}LcdWriteCommand(0x01, 1); //清除显示 DispStr(0,0,jieshu);while(1);}//1602#include <msp430x14x.h>#include "cry1602.h"typedef unsigned char uchar;typedef unsigned int uint;/**************宏定义***************/#define DataDir P2DIR#define DataPort P2OUT#define Busy 0x80#define CtrlDir P6DIR#define CLR_RS P6OUT&=~BIT3; //RS = P3.0#define SET_RS P6OUT|=BIT3;#define CLR_RW P6OUT&=~BIT4; //RW = P3.1#define SET_RW P6OUT|=BIT4;#define CLR_EN P6OUT&=~BIT5; //EN = P3.2#define SET_EN P6OUT|=BIT5;/***********************************************函数名称: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功能:让液晶从某个位置起连续显示N个字符参数: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 |= 0x38; //控制线端口设为输出状态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){P2DIR &= 0x00; //将P4口切换为输入状态CLR_RS;SET_RW;_NOP();SET_EN;_NOP();_NOP();while((P2IN & Busy)!=0); //检测忙标志CLR_EN;P2DIR |= 0xFF; //将P4口切换为输出状态}/******************************************* 函数名称:Delay5ms功能:延时约5ms参数:无返回值:无********************************************/ void Delay5ms(void){uint i=40000;while (i != 0){i--;}}。
lcd1602程序流程图
lcd1602程序流程图预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制lcd1602程序流程图1、引脚3(对比调整电压)接正电源时对比度最低,接地时对比度最高,通常通过一个10k的电位器相连后接地,上电后需要对电位器进行调整以显示出相应的字符(就像调节电视的对比度使图像清晰,这里是使字符清晰)2、D0~D7为8为数据总线,用于与单片机之间的数据传送了解了引脚功能后,我们再来看其内置芯片关于HD44780HD44780内部含有DDRAM,CGROM,CGRAM下面我来简单介绍一下这三个存储器DDRAM是用于寄存待显示字符代码的,其内部带有80字节的RAM 缓冲区,与LCD屏幕的位置一一对应。
通常我们只使用前16个地址(两行32个),这样一来,我们便可以将这32个地址当作是我们的坐标,比如要在DDRAM的02H地址(对应的是屏幕第一行第三个)显示字符“A”,我们就可以分两步走,首先用程序先找到“坐标点”,也就是将地址转到02H(具体如何不做详细说明),然后在这个位置写入“A”,写入地址和数据都是通过D0~D7实现的,详细的程序在文章的后面举例说明。
CGROM与CGRAM是LCD内部固化的字模存储器,这相当于芯片内部划出的一块区域,CGROM里面存放着我们日常所使用的一些字符(192个),而CGRAM则允许用户自定义一些字符(8个)。
具体对应关系如下,0x00~0x0F就是用户自定义的CGRAM区。
再回到之前的问题,在DDRAM的02H地址显示字符“A”,首先通过程序找到地址02H,然后在该地址写入41H,从图中也可看出该位置对应的字符就是“A”。
我们再来理一理这个过程,有关字符显示,首先便是找到DDRAM 中我们所要显示位置对应的地址,接着便是在这个地址写入一个地址(单片机中的间接寻址),LCD根据这个地址在CGROM中找到对应的字符,然后在02H这个位置显示出来,这个过程也到此结束。
lcd1602程序流程图
LCD1602程序代码和显示流程图LCD1602显示程序代码_ DB P0 //---P0 = DB0〜DB7位LCD_ RS = P2; //--p2.0 = RS 位LCD_ RW = P2; //--p2.1 = RW 位LCD_ E = P2; //-p2.2 = E / /---/--/--定义函数ා 定义uchar unsigned char ා 定义uint unsigned int // //-定义子程序函数void LCD_ Init (void ); //-初始化LCD1602函数void LCD_ write_ Command (uchar command ); //-写指令功能无效LCD 到LCD1602_ write_数据(uchar DAT ); //-将无效的LCD 数据写入LCD1602_ set_ XY (uchar x ,uchar y ); //设置LCD1602的显示位置x (0-16),y(1-2)void LCD_ disp_ Char(uchar x,uchar y,uchar DAT); //-在LCD1602_ disp_ String (uchar x,uchar y,uchar * s)上显示字符无效的LCD;//-在LCD1602上显示字符串// void LCD_ check_ Busy(void); //检查忙功能。
我没有使用此功能,因为通过率非常低。
LCD_ delay_ 10us(uint n); //-一个10微秒的延迟子程序void LCD_ delay_ 50uS(uint n); /-延迟子程序50微秒_ init(无效){LCD_ delay_ 10us(20); LCD_ write_命令(0x38); //-设置8位格式,2行,5x7 LCD_ delay_ 10us(5);LCD_ write_命令(0x0c); //-整体显示,关闭光标,不闪烁LCD_ delay_ 10us(5);LCD_ write_命令(0x06); //-设置输入模式,增量不移位LCD_ delay_ 10us(5);LCD_ write_命令(0x01); // /-清除屏幕上的LCD_ delay_ 50uS(40);} //将无效的LCD指令写入LCD1602_ write_命令(uchar dat){LCD_ delay_ 10us (5);LCD_ Rs = 0; //命令LCD_RW = 0;//写入LCD_ DB = dat; LCD_ delay_ 10us(5); LCD_ E = 1; //允许LCD_delay_10us(5);LCD_ E = 0;} /-将数据无效LCD写入LCD1602_ write_ data(uchar dat){LCD_ delay_ 10us(5);LCD_ Rs = 1; //数据LCD_RW = 0;//写入LCD_ DB = dat; LCD_ delay_ 10us(5); LCD_ E = 1; //允许LCD_delay_10us(5);LCD_ E = 0;} /-设置显示位置无效LCD_ set_ XY(uchar x,uchar y){uchar地址;如果(y = = 1){地址= 0x80 + X; /-第一行位置} else {地址= 0xc0 + X; //第二行位置} LCD_ delay_ 10us(5); LCD_ write_命令(地址);} /-显示字符函数void LCD_ disp_ char(uchar x,uchar y,uchar dat)//--LCD_ disp_ Char(0,1,0x38); /-显示8 {LCD_ set_ xy(x,y); LCD_ delay_ 10us(5); LCD_ write_ Data(DAT);} /-显示字符串函数void LCD_ disp_ string(uchar x,uchar y,uchar * s){LCD_ set_ xy(x,y); LCD_ delay_ 10us(5); while(* s!='\ 0'){LCD_ write_ Data(* s); s + +;} / /≡S + +;} /≡S + _ check_ Busy()// /实践证明,在我的LCD1602上,检查忙指令的通过率非常低,并且{/ /液晶正常使用。
1602液晶显示设计
摘要本次课程设计是以AT89C52为核心控制器,1602液晶为显示器设计的液晶显示电路。
该电路可在1602液晶上显示ASCII码表里的各种字符,通过编程设定的显示方式。
设计中采用了二种动态显示方式,第一种是整屏左移操作,先将待显示的内容写入1602RAM 的后面几个存储单元,当内容写入完成后,写入指令,实现指针不动而屏幕动的效果。
第二种是将内容一个个写到1602显示,这主要通过延时函数控制写入的两个字符间的时间间隔。
1602液晶一次可以显示32个字符,通过编程可以实现不同的动态显示方式。
关键词:AT89C52;1602;动态显示1 Proteus仿真流程与Keil编译器简介1.1 Proteus仿真流程(1)工作界面Proteus ISIS的工作界面是一种标准的Windows界面,如图1-2所示。
包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
图1.1 proteus操作界面(2)基本操作①图形编辑窗口在图形编辑窗口内完成电路原理图的编辑和绘制。
为了方便作图坐标系统(CO-ORDINATE SYSTEM)。
ISIS中坐标系统的基本单位是10nm,主要是为了和Proteus ARES保持一致。
但坐标系统的识别(read-out)单位被限制在1th。
坐标原点默认在图形编辑区的中间,图形的坐标值能够显示在屏幕的右下角的状态栏中。
点状栅格(The Dot Grid)与捕捉到栅格(Snapping to a Grid)编辑窗口内有点状的栅格,可以通过View菜单的Grid命令在打开和关闭间切换。
点与点之间的间距由当前捕捉的设置决定。
捕捉的尺度可以由View菜单的Snap命令设置,或者直接使用快捷键F4、F3、F2和CTRL+F1。
②预览窗口该窗口通常显示整个电路图的缩略图。
在预览窗口上点击鼠标左键,将会有一个矩形蓝绿框标示出在编辑窗口的中显示的区域。
基于MSP430G2553的电压表设计
数字式直流电压表一、整体说明在电子技术中,往往离不开对电压的测量,作为一种测量电压的仪器——电压表是近代电子技术领域的常用工具之一,在许多领域得到广泛应用。
本设计是基于TI单片机设计的数字式直流电压表,它主要由MSP430G2553、LCD12864和分压电路三部分组成。
分压电路先将输入的电压信号衰减一定的倍数,后通过控制双路选择开关设定测量的量程,分别有0~3V和0~15V两个档,以便实现精确读数;分压处理后的电压信号由MSP430G2553内部的ADC10模块转换成数字信号;再通过LCD12864液晶屏进行串行显示。
经多次测量实验得出误差范围在2%以内。
二、原理图基于MSP430G2553单片机设计的数字式直流电压表的电路图如图1所示。
由于MSP430开发板已具备单片机最小系统结构,只需添加显示电路和分压电路。
LCD12864通过串口方式显示,只需占用单片机2个I/O口;分压电路可以通过开关S1选择量程档位,只占用1个I/O口。
图1 直流电压表电路图三、接口定义MSP430G2553的接口说明如表1所示。
图1中的复位和晶振部分是MSP430开发板固有的部分,故不再说明。
P1.0接液晶屏的SID脚,作为串行的数据口用;P1.1则接液晶屏的SCLK脚,控制串行的同步时钟;P1.4接分压电路的输出端。
LCD12864的接口说明如表2所示。
当PSB脚接低电平时,串口模式被选择。
在该模式下,只用2根线(SID与SCLK)来完成数据传输。
RS接高电平,不使用片选功能。
注意:信号源与单片机之间要共地。
表1 MSP430G2553的接口说明表2 LCD12864的接口说明四、程序流程图(一)主函数主函数的流程框图如图1所示。
主函数主要是调用系统初始化函数和循环开启ADC 转换,这是由于ADC10采用单通道单次转换模式,每次采样后需要重新开启ADC ,才会进行下一次信号采样转换。
另外,信号的采样与处理以及电压值的显示都是通过中断来完成。
103636_基于MSP430G2553的频率计设计
数字式频率计一、设计概述在电子技术中,频率是最基本的参数之一,数字频率计具有精度高、使用方便、测量迅速、以及便于实现测量过程自动化等优点,是近代电子技术领域的重要工具之一,在许多领域得到广泛应用。
本系统以超低功耗MSP430G2553单片机为核心处理芯片来测量信号的频率,通过定时器A 采用计数法完成信号频率测量,并将被测频率值通过LCD12864液晶串行显示。
频率可测量范围在1Hz 到999MHz 之间。
如需要,范围可继续扩宽,频率计的误差在1%以内。
二、原理图基于MSP430G2553的频率计设计原理图如图1所示,通过串口方式液晶显示,只需配置单片机三个口线便可以实现对频率的测量。
其中待测频率信号从P1.0口输入,然后可以直接在液晶屏上显示。
三、引脚说明(一)MSP430G2553引脚功能说明由原理图可以看出,430单片机的最小系统用到1脚电源、16脚复位端、20脚接地端、配置P1.0口为待测信号输入端,P1.4为串行数据输出口,P1.5为串行时钟输出口,如表1所示。
图1 基于MSP430G2553频率计设计原理图表1 MSP430G2553引脚功能说明引脚序号引脚名称功能说明备注1 VCC 电源正2 P1.0 频率信号输入端6 P1.4 串行数据输出端7 P1.6 串行时钟输出端16 RST 复位脚20 GND 电源地(二)LCD12864引脚功能说明LCD12864液晶显示屏用到1、2脚,电源接口线,19、20脚背光电源接口线,15脚并行/串行接口选择,5脚串行数据口,6脚串行的同步时钟。
LCD12864引脚功能如表2所示。
表2 LCD12864接口说明引脚序号引脚名称功能说明备注1 VSS 模块的电源地2 VDD 模块的电源正端4 RS(CS) 并行指令/数据选择信号;串行片选信号5 R/W(SID) 并行读写选择信号;串行的数据口6 E(CLK) 并行使能信号;串行的同步时钟15 PSB PSB并/串行接口选择:H-并行,L-串行19 LED_A 背光源正极20 LED_K 背光源负极(0V)四、软件设计流程图系统软件设计包括初始化模块、中断模块和信号频率显示模块。
单片机LCD1602显示字符和数字的汇编程序
单片机LCD1602显示字符和数字的汇编程序1,单片机和LCD1602的连线,和程序结果显示如下图:2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。
程序如下:RS EQU P2.4RW EQU P2.5E EQU P2.6ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HMOV 40H,#01HMOV 41H,#02HMOV 42H,#03HMOV 43H,#04HMOV 44H,#05HMOV 45H,#06HMOV 46H,#07HACALL DD1 ;DD1是LCD初始化MOV DPTR,#TABLE1ACALL DD2;DD2是LCD第一行显示TABLE1ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据SJMP $DD1: MOV p0,#01H ;清屏CALL ENABLEMOV p0,#38H ;显示功能CALL ENABLEMOV p0,#0FH ;显示开关控制CALL ENABLEMOV p0,#06H ;显示光标右移加1CALL ENABLERETDD2: MOV p0,#80H;第一行的开始位置cALL ENABLECALL WRITE1;到TABLE1取码?RETENABLE: CLR RS ;送命令CLR RWCLR ECALL DELAYSETB ERETWRITE1: MOV R1,#00H ;显示table中的值A1: MOV A,R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1CJNE A,#00H,A1 ;是否到00hRETWRITE2:MOV p0,A ;显示SETB RSCLR RWCLR ECALL DELAYSETB ERET(动态显示频率、幅度核心程序设计思想:可以利用如下程序)MOV40H,#01HMOV41H,#02HMOV42H,#03H)MOV R1,#40H;显示table中的值MOV A,R1;到table取码MOVC A,@A+DPTRMOV P0,AINC R1LJMP LOOPDELAY: PUSH ACCMOV A,R4MOV R4,#05D1: MOV R5,#0FFHDJNZ R5,$DJNZ R4,D1MOV R4,APOP ACCRETPPP: MOV p0,#0C0H;第二行的位置CALL ENABLEMOV DPTR,#TAB;显示CALL WRITE3;到TABLE2 取码RETWRITE3: MOV R1,#40H ;显示table中的值MOV R7,#07HA2: MOV A,@R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1DJNZ R7,A2 ;是否到00hRETtable1: db"XIAORENGUANG ",00H TAB: DB 30H, 31H, 32H, 33HDB 34H, 35H, 36H, 37HDB 38H, 39HEND。
lcd1602流程图
lcd1602流程图LCD1602流程图是指在液晶显示屏模块上显示特定信息的流程图。
下面我们将介绍一个简单的LCD1602流程图,包括初始化液晶模块、设置显示模式、输入要显示的内容等步骤。
首先,我们需要准备一个Arduino开发板和一个LCD1602模块。
将LCD模块的VCC和GND引脚分别连接到Arduino的3.3V和GND引脚上,将SDA和SCL引脚连接到Arduino的A4和A5引脚上。
然后,编写以下步骤来实现流程图。
第一步,初始化液晶模块。
在Arduino开发环境中,我们需要包含LiquidCrystal_I2C.h库文件,然后创建一个LiquidCrystal_I2C对象。
使用begin()函数初始化LCD模块,并设置显示模式和光标的闪烁。
第二步,设置显示模式。
使用setCursor()函数将光标移动到特定位置,并使用print()函数输入要显示的内容。
根据需要可以设置一到两行进行显示。
第三步,设置滚动显示。
使用scrollDisplayLeft()或scrollDisplayRight()函数在屏幕上滚动显示内容。
第四步,设置光标显示状态。
使用noCursor()函数关闭光标显示,使用cursor()函数开启光标显示。
第五步,设置光标闪烁状态。
使用noBlink()函数关闭光标闪烁,使用blink()函数开启光标闪烁。
第六步,设置显示打开/关闭状态。
使用noDisplay()函数关闭显示,使用display()函数开启显示。
第七步,设置自定义字符。
使用createChar()函数在CGRAM (字符生成RAM)中自定义字符,并使用write()函数在屏幕上显示。
第八步,清除屏幕。
使用clear()函数清除屏幕上的内容。
第九步,设置屏幕显示次数。
使用blinkDisplay()函数设置屏幕的显示次数,并使用count()函数检测屏幕的显示次数。
第十步,控制光标位置。
使用setCursor()函数将光标移动到特定位置。
基于单片机的LCD1602设计
2011年5月刊计算机教学信息化信息与电脑China Computer&Communication1. 概述在单片机系统中应用晶液显示器作为输出器件具有以下很多优点:显示质量高,由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT )那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC 上,因而耗电量比其它显示器要少得多。
2. 液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA 移动通信工具等众多领域。
3. 1602LCD显示与初始化1602LCD 分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。
1602LCD 主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W ×H)mm 3.1 引脚功能说明1602LCD 采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表所示:编号符号引脚说明编号符号引脚说明1VSS 电源地9D2数据2VDD 电源正极10D3数据3VL 液晶显示偏压11D4数据4RS 数据/命令选择12D5数据5R/W 读/写选择13D6数据6E 使能信号14D7数据7D0数据15BLA 背光源正极8D1数据16BLK背光源负极3.2 1602LCD 的指令说明及时序1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
