MSP430F149与1602LCD模块程序

发布者:boczsy2018最新更新时间:2016-08-21 来源: eefocus关键字:MSP430F149  1602LCD模块 手机看文章 扫描二维码
随时随地手机看文章
/*****************MSP430F149与1602LCD模块程序***********************/
/*                ShangYu                                          */
 
 
/**************************Pins defination***************************/
/* RS  P4.4    寄存器选择信号 H-数据寄存器 L-指令寄存器        */
/*  RW  P4.5    读写信号    H-读     L-写             */
/*  E   P4.6    片选信号    下降沿触发                  */
/*  DB0-DB7  P5.0-P5.7   数据线 数据传输             */
/**************************over*************************************/
 
#include "msp430x14x.h"
#include "stdio.h"
 
#define uchar unsigned char                                                
#define uint unsigned int 
 
 
uchar dis1[]="ShangYu";
uchar dis2[]="       AnNa";
 
void int_clk()
{
  uchar i;
  BCSCTL1&=~XT2OFF;         //打开XT振荡器
  BCSCTL2|=SELM1+SELS;     //MCLK为8MHz,SMCLK为8MHz
  do
  {
     IFG1&=~OFIFG;         //清除振荡错误标志
     for(i=0;i<100;i++)
      _NOP();            //延时等待
   }
   while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待
   IFG1&=~OFIFG;
}
 
 
void delay(int j)                                                         
{                                                                          
   int i;                                                                  
   while(j--)                                                             
   {                                                                       
     for(i = 0; i< 2000; i++)                                               
     {                                                                     
      _NOP();                                                             
      _NOP();                                                             
      _NOP();                                                             
      _NOP();                                                             
     }                                                                     
   }                                                                       
}   
 
 
/*******************  检查LCD忙状态   *********************/
/*************  lcd_busy为1时,忙,等待   *****************/
/*************  lcd-busy为0时,闲,可写指令与数据  *********/              
int lcd_busy()                                                             
{                                                                          
    int busy; 
    P5DIR=0x00;
    P4OUT &=~ BIT4 ; //  RS = 0
    P4OUT |= BIT5 ;  //  RW = 1 
    P4OUT |= BIT6 ;  //  EN = 1                                                           
    _NOP();                                                               
    busy =P5IN&0x80;
    _NOP();
    P4OUT &=~ BIT6 ;  //  EN = 0                                                           
    P4OUT &=~ BIT5 ;  //  RW = 0 
    P4OUT |= BIT4 ;   //  RS = 1                                                           
    P5DIR=0XFF;
    return busy;  
 
//写指令数据到LCD  RS=L,RW=L,E=高脉冲,D0-D7=指令码。                                     
void lcd_wcmd(uchar cmd)                                                   
{                                                                          
   while(lcd_busy());                                                      
    P4OUT &=~ (BIT4 + BIT5) ;    // RS = 0  RW = 0                                                       
    P5OUT = cmd;                                                              
    _NOP();                                                           
    P4OUT |= BIT6 ;   // E = 1                                                          
    _NOP();                                                                                                                              
    P4OUT &=~ BIT6 ;                                                            
}                                                                          
                                                                           
//写显示数据到LCD        RS=H,RW=L,E=高脉冲,D0-D7=数据。                                       
void lcd_wdat(uchar dat)                                                   
{                                                                          
   while(lcd_busy());                                                      
    P4OUT |= BIT4 ;  // RS = 1
    P4OUT &=~ (BIT5 + BIT6) ; // RW = 0   E = 0
    P5OUT = dat;                                                              
    _NOP(); 
    P4OUT |= BIT6 ;    //  E = 1
    _NOP();                                                              
    P4OUT &=~ BIT6 ;    //  E = 0
}                 
 
 
void lcd_pos(uchar pos)                                                    
{                                                                          
   lcd_wcmd(pos|0x80);      //数据指针=80+地址变量                         
}
 
void lcd_clr()                                                             
{                                                                          
    lcd_wcmd(0x01);          //清除LCD的显示内容                           
    delay(1);                                                              
}
 
                                                                    
void lcd_init()                                                            
{                                                                          
    delay(10);                     //等待LCD电源稳定                       
    lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据                  
    delay(1);                                                              
    lcd_wcmd(0x38);                                                        
    delay(50);                                                              
    lcd_wcmd(0x38);                                                        
    delay(1);                                                              
                                                                           
    lcd_wcmd(0x0c);          //显示开,关光标                              
    delay(1);                                                              
    lcd_wcmd(0x06);          //移动光标                                    
    delay(1);                                                              
    lcd_wcmd(0x01);          //清除LCD的显示内容                           
    delay(1);                                                              
}                                                                          
      
 
 
 
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  int_clk();
  P4DIR |= BIT4 + BIT5 + BIT6 ;
  
  while(1)
  { int i;
    lcd_init();
    lcd_pos(0x00);
    for(i=0;i<7;i++)
    {lcd_wdat(dis1[i]);
    delay(100);
    }
    lcd_pos(0x40);
    for(i=0;i<11;i++)
    {lcd_wdat(dis2[i]);
    delay(100);
    }
    delay(1000);
  }
  
 
}
关键字:MSP430F149  1602LCD模块 引用地址:MSP430F149与1602LCD模块程序

上一篇:MSP430F149定时数据采集程序
下一篇:MSP430F149 TimerA 输出pwm信号 C程序代码

推荐阅读最新更新时间:2024-03-16 15:06

基于MSP430F149的单片机最小系统设计
单片机最小系统,或称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对于MSP430系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。本文介绍了MSP430F149单片机的特点,设计了MSP430最小系统中电源模块、晶振电路模块、复位电路模块、串口通讯模块和数据存储模块的电路原理图,并介绍了各部分的功能。 0 引言 单片机芯片配以必要的外部器件,一般包括电源供入及电源开关、复位电路、晶振、输入输出电路等就能构成最小系统。 MSP430F149芯片是超低功耗微处理器,有60KB+256字节FLASH,2KBRAM,包括基本时钟模块、看门狗定时器、带 3个捕获/比较寄存器和PWM输出的16位定时器、
[单片机]
基于<font color='red'>MSP430F149</font>的单片机最小系统设计
基于MSP430F149的水稻插秧机水平智能控制系统
摘要:以超低功耗微处理器 MSP430F149 为核心,设计一种水稻插秧机的水平智能控制系统。该控制系统实现对插植部位置的实时、有效控制,保证插植部的倾角范围控制在±4°以内。介绍了系统的组成结构、软硬件设计及结果分析。实验证明该控制系统可靠性高、移植能力强,可控制的角度范围在±45°以内,可方便应用于各种智能控制插秧机。 关键词:MSP4310F149;插秧机;水平控制;智能控制;农业机械 随着我国农业机械化、智能化的发展,对农业机械的要求越来越高。传统的插秧机工作时,插秧深度位于同一水平面,当遇到田地低陷时,秧苗的入土深度就会减少,反之,当田土抬高时,秧苗的入土深度就会增加,在一定程度上会影响秧苗的存活率。因此需要一
[工业控制]
基于<font color='red'>MSP430F149</font>的水稻插秧机水平智能控制系统
基于MSP430F149和nRF905的无线血氧指夹的设计
0 引言 血氧饱和度可以反映病人的呼吸功能,并在一定程度上反映动脉血氧的变化,故在临床监护和家庭监护中都具有重要意义。用常规多参数监护仪监护血氧饱和度时,通常用一个血氧指夹夹在手指端或者脚趾端来采集光电脉搏波信号,并通过一条线缆将信号传到监护设备进行处理和计算。由于线缆的影响,病人往往不便翻身,而且线缆容易脱落,造成测量结果错误,严重危害病人的及时抢救。单模块的血氧饱和度测量设备虽然便于携带,但由于其功耗较高,采用电池供电限制了监护的持续时间:一般此类设备只能将监护信息存储在设备内部,而无法把监护信息及时发送出去,耽误病人的抢救时间。为此,本文提出了一种基于射频芯片nRF905和超低功耗单片机MSP430F149的血氧饱和度指夹
[单片机]
基于<font color='red'>MSP430F149</font>和nRF905的无线血氧指夹的设计
MSP430F149内部Flash操作
硬件介绍: 要对Flash读写,首先要了解MSP430的存储器组织。430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分。 一般430的单片机都统一编址在0-64k地址范围中,只有少数高端的型号才能突破64k(如:FG461x系列)。绝大多数的msp430单片机都编址在64kB范围内。地址的大概编码方式如下: 这是msp430f425的存储器分配图,其他在64k范围内的存储器的单片机编址方式与此类似:低256B是寄存器区,然后是RAM;空白;1000H到10FFH是信息Flash区;大于1100H-0FFFFH是主存储器区(从0FFFFH开始往低地址有单片机的主F
[单片机]
<font color='red'>MSP430F149</font>内部Flash操作
采用内存接液晶显示模块设计
  点阵式液晶接口简单,能以点阵或图形方式显示出各种信息,因此在各种电子设计中得到广泛应用。但是,它的接口必须遵循一定的硬件和时序规范,根据不同的液晶驱动器,可能需要发出不同的命令进行控制才能显示数据。而且命令的执行需要耗费一定时间,在系统大量的实时数据的情况下,如果直接控制液晶显示,可能会消耗过多的时间,从而影响数据的处理。因此,由于某种需要必须采用不同的液晶模块,这就需要修改软件。为了解决这些问题,文提出采用内存接口的液晶显示模块,在现有点阵式液晶显示屏上附加一个MCU(Micro-Controller Unit微处理器)及相关器件,利用内存与外部控制器进行接口,从而解决了统一接口和显示速度的问题。   1 系统设计   1
[单片机]
采用内存接液晶显示<font color='red'>模块</font>设计
基于MSP430F149和nRF905的无线血氧指夹的设计与实现
引言   血氧饱和度可以反映病人的呼吸功能,并在一定程度上反映动脉血氧的变化,故在临床监护和家庭监护中都具有重要意义。用常规多参数监护仪监护血氧饱和度时,通常用一个血氧指夹夹在手指端或者脚趾端来采集光电脉搏波信号,并通过一条线缆将信号传到监护设备进行处理和计算。由于线缆的影响,病人往往不便翻身,而且线缆容易脱落,造成测量结果错误,严重危害病人的及时抢救。单模块的血氧饱和度测量设备虽然便于携带,但由于其功耗较高,采用电池供电限制了监护的持续时间:一般此类设备只能将监护信息存储在设备内部,而无法把监护信息及时发送出去,耽误病人的抢救时间。为此,本文提出了一种基于射频芯片nRF905和超低功耗单片机MSP430F149的血氧饱和度指
[单片机]
MSP430F149按键检测程序
该程序由IAR编译运行,使用单片机的P1.0~P1.3口作为四个独立按键。由外部中断的下降沿触发。 /********************************************** *程序描述:单片机的P1.0~P1.3连接四个独立按键,外部中断下触发 *作者 :huasir *时间 :2017.10.28 22:10 ***********************************************/ #include msp430x14x.h #define keyin (P1IN & 0X0F) unsigned int KeyVal = 0; // 键值,0表示异常,1,2,3,4分
[单片机]
基于MSP430F149单片机的目标指示器设计
针对目前我军侦察分队和射击指挥分队野外训练时,各种目标设置、显示费时费力、安全隐患大等诸多问题,本文提出基于 MSP 430F149 单片机 设计目标指示器,以满足部队野外训练时快速设置目标,并能根据不同的战术需要灵活显示目标和根据不同的射击法则显示炸点等,较好地解决部队野外训练的急需。 目标指示器的功能 根据需要,目标指示器以灯光、烟火等方式显示目标或炸点。每个指示器可以模拟显示如机枪火力点、坦克火力点、炮阵地等n类性质的目标,同时带有m个炸点显示器。目标指示器主要完成GPS模块的数据采集、执行灯光显示和烟火显示等任务。 目标指示器硬件设计 硬件设计方案 目标指示器的设计是以单片机为核心的,集灯光显示
[单片机]
基于<font color='red'>MSP430F149</font>单片机的目标指示器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved