MSP430+LCD1602显示实验
LCD12864同样适用
1、本实验用开发板
2、程序代码
3、实验效果

1、本实验用开发板
使用的模块是TI官方的MSP430F5529开发板,只需更改引脚即可适用于其他型号的MSP430开发板。

2、程序代码
代码如下:

#include "MSP430F5529.h"
#define uchar unsigned char
#define uint unsigned int
#define CPU_F ((double)8000000)   //外部高频晶振8MHZ
//#define CPU_F ((double)32768)   //外部低频晶振32.768KHZ
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
//12864/1602液晶控制管脚
#define RS_CLR                P6OUT &= ~BIT1           //RS置低
#define RS_SET                P6OUT |=  BIT1           //RS置高#define RW_CLR                P6OUT &= ~BIT2           //RW置低
#define RW_SET                P6OUT |=  BIT2          //RW置高#define EN_CLR                P6OUT &= ~BIT3           //E置低
#define EN_SET                P6OUT |=  BIT3           //E置高
//彩屏/12864液晶/1602液晶的数据口,三液晶共用
#define DataDIR         P3DIR                     //数据口方向
#define DataPort        P3OUT                     //P4口为数据口void clock_init()
{UCSCTL3 = SELREF_2;                       // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2;                        // Set ACLK = REFOUCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx// Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilizedo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG;                      // Clear fault flags}while (SFRIFG1&OFIFG);                   // Test oscillator fault flag__bis_SR_register(SCG0);                  // Disable the FLL control loopUCSCTL1 = DCORSEL_5;                      // Select DCO range 16MHz operationUCSCTL2 |= 249;                           // Set DCO Multiplier for 8MHz// (N + 1) * FLLRef = Fdco// (249 + 1) * 32768 = 8MHz__bic_SR_register(SCG0);                  // Enable the FLL control loop// Worst-case settling time for the DCO when the DCO range bits have been// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx// UG for optimization.// 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle__delay_cycles(250000);
}//*************************************************************************
//                        初始化IO口子程序
//*************************************************************************
void Port_init()
{P1DIR|=BIT0;P1OUT|=BIT0;P3SEL = 0x00;P3DIR = 0xFF;                   //数据口输出模式P6SEL = 0x00;P6DIR|= BIT1 + BIT2 + BIT3;     //控制口设置为输出模式
}//***********************************************************************
//        显示屏命令写入函数
//***********************************************************************
void LCD_write_com(unsigned char com)
{RS_CLR;RW_CLR;EN_SET;DataPort = com;                 //命令写入端口delay_ms(5);EN_CLR;
}//***********************************************************************
//        显示屏数据写入函数
//***********************************************************************
void LCD_write_data(unsigned char data)
{RS_SET;RW_CLR;EN_SET;DataPort = data;                //数据写入端口delay_ms(5);EN_CLR;
}//***********************************************************************
//        显示屏清空显示
//***********************************************************************
void LCD_clear(void)
{LCD_write_com(0x01);            //清屏幕显示delay_ms(5);
}//***********************************************************************
//        显示屏字符串写入函数
//***********************************************************************
void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
{if (y == 0){LCD_write_com(0x80 + x);        //第一行显示}else{LCD_write_com(0xC0 + x);        //第二行显示}while (*s){LCD_write_data( *s);s ++;}
}//***********************************************************************
//        显示屏单字符写入函数
//***********************************************************************
void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)
{if (y == 0){LCD_write_com(0x80 + x);        //第一行显示}else{LCD_write_com(0xC0 + x);        //第二行显示}LCD_write_data( data);
}//***********************************************************************
//        显示屏初始化函数
//***********************************************************************
void LCD_init(void)
{LCD_write_com(0x38);                //显示模式设置delay_ms(5);LCD_write_com(0x08);                //显示关闭delay_ms(5);LCD_write_com(0x01);                //显示清屏delay_ms(5);LCD_write_com(0x06);                //显示光标移动设置delay_ms(5);LCD_write_com(0x0C);                //显示开及光标设置delay_ms(5);
}void main( void )
{// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;clock_init();uchar i,*p;Port_init();                        //系统初始化,设置IO口属性delay_ms(100);                      //延时100msLCD_init();                         //液晶参数初始化设置LCD_clear();                        //清屏while (1){i = 1;p = "12345678";                //字符串输出显示LCD_clear();LCD_write_str(0,0,"Welcome.MSP430");delay_ms(250);while (*p) {LCD_write_char(i,1,*p);      //单个字符输出显示i ++;p ++;delay_ms(100);               //延时250ms}delay_ms(250);P1OUT^=BIT0;}
}

3、接线

RS P6.1
RW P6.2
EN P6.3
D0 ~D7 P3.0~P3.7
A(背光+) 5V
K(背光-) GND

4、实验效果如图:
下面一行“12345678”挨个字符依次显示,可以在程序更改想要显示的字符。
使用 LCD1602需要注意的是
引脚3:VL为液晶显示器对比度调节端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10k的电位器调整其对比度。

MSP430+LCD1602显示实验相关推荐

  1. 实验(四):LCD1602显示实验

    一.实验目的与任务 实验目的: 1. 掌握LCD1602显示控制方法: 2. 掌握利用Proteus进行单片机控制系统的仿真及调试方法. 3. 掌握单片机开发板的使用. 任务: 1.根据要求编写程序, ...

  2. 单片机 LCD1602显示实验

    电路图如下: 1.请描述液晶显示器的显示原理,及其与数码管相比的技术特点. 显示原理: 液晶显示器是利用偏光板这个特性来完成的,利用上下两片栏栅之间相互垂直的偏光板之间充满了液晶, 再利用电场控制液晶 ...

  3. 仿真软件proteus构建LCD1602显示字符串实验

    LCD1602模块的显示需要注意几点: 1.显示两行,第一行的起始地址是0x80,第二行的地址是0x80+0x40 = 0xC0. 2.RS,RW,EN接线没有说一定要接到P1,P2,P3上,只要给对 ...

  4. 基于C51单片机的万年历设计(LCD1602显示)

    C51单片机万年历设计 注:该程序基于普中科技C51 V2.2开发板设计,库函数和硬件资料均来自普中科技,侵删.main.c大部分为原创,如有雷同,纯属巧合. 名称:C51万年历. 硬件:以C51芯片 ...

  5. 1602实现计算机实验报告,LCD1602液晶显示实验报告

    LCD1602液晶显示实验报告 一.实验目的 (1)了解LCD1602的基本原理,掌握其基本的工作流程. (2)学习用Verilog HDL语言编写LCD1602的控制指令程序,能够在液晶屏 上显示出 ...

  6. C语言LCD1602液晶实验报告,LCD1602液晶显示实验报告.doc

    LCD1602液晶显示实验报告 LCD1602液晶显示实验报告 实验目的 (1)了解LCD1602的基本原理,掌握其基本的工作流程. 学习用Verilog HDL语言编写LCD1602的控制指令程序, ...

  7. 基于51单片机驱动ADXL346 (LCD1602显示)

    基于51单片机驱动ADXL346 (LCD1602显示) 一.ADXL346传感器介绍 1.实物图 2.产品说明 3.电气参数 4.通信协议 二.驱动代码 1.引脚定义 2.初始化函数 3.主函数 三 ...

  8. 山东大学单片机原理与应用实验 3.7LCD 1602显示实验

    目录 一.实验题目 二.实验要求 三.实验过程及结果分析 四.实验流程图 五.实验源代码 一.实验题目 3.7 LCD 1602显示实验 二.实验要求 1.画出实验的流程图 2.编写源程序并进行注释 ...

  9. 【Proteus仿真】51单片机汇编实现DS18B20+LCD1602显示

    [Proteus仿真]51单片机汇编实现DS18B20+LCD1602显示 Proteus仿真 汇编代码(.asm) ;**************************************** ...

最新文章

  1. python资料百度云-Java+Python+前端 学习资料大全 百度云盘
  2. c++ auto 关键字
  3. Python知识:生成声波并显示
  4. javase基础第三天
  5. Asp.net中利用ExecuteNonQuery()执行存储过程返回-1解决方案
  6. 网狐棋牌(三) 调度引擎初步分析
  7. 垃圾回收算法简单介绍——JVM读书笔记lt;二gt;
  8. VHDL四选一数据选择器和基本触发器的设计
  9. 计算机卡在无法显示网页,我的电脑上网上银行一直“无法显示网页”
  10. 【CodeForces - 1102C 】Doors Breaking and Repairing (思维,简单博弈)
  11. 常见开源协议大白话说明
  12. spring、mybatis、测试用例执行后数据没有入库
  13. 不同时期的项目变更控制流程
  14. 地图比例尺与空间分辨率之间的关系_地图比例尺与分辨率
  15. [ERROR] InnoDB: Write to file (merge)failed at offset 4249878528, 1048576 bytes should have been wri
  16. html 点击方块旋转,前端每日实战:86# 视频演示如何用纯 CSS 创作一个方块旋转动画...
  17. MonthCalendar显示该年的12个月份
  18. 校园招聘的秋招和春招有什么区别?
  19. 百度网盘新用户超级会员多少钱
  20. 运营推广一款新的app到底需要哪些完整步骤?

热门文章

  1. mysql 修改权限主机_修改mysql允许主机访问的权限方法
  2. Java学习笔记----------集合Set
  3. 【Leetcode】5 longestPalindrome python解法
  4. app逆向篇之常用命令及刷机
  5. 化妆品零售变革 电子商务VS传统零售
  6. 计算机教学能力提升体会,信息化教学能力培训心得范文(精选4篇)
  7. 免疫学实验美图赏析馆(第三期)
  8. 【深度学习之美】BP算法双向传,链式求导最缠绵(入门系列之八)
  9. P2455 [SDOI2006]线性方程组
  10. windows双屏显示如何设置