MSP430+LCD1602显示实验
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显示实验相关推荐
- 实验(四):LCD1602显示实验
一.实验目的与任务 实验目的: 1. 掌握LCD1602显示控制方法: 2. 掌握利用Proteus进行单片机控制系统的仿真及调试方法. 3. 掌握单片机开发板的使用. 任务: 1.根据要求编写程序, ...
- 单片机 LCD1602显示实验
电路图如下: 1.请描述液晶显示器的显示原理,及其与数码管相比的技术特点. 显示原理: 液晶显示器是利用偏光板这个特性来完成的,利用上下两片栏栅之间相互垂直的偏光板之间充满了液晶, 再利用电场控制液晶 ...
- 仿真软件proteus构建LCD1602显示字符串实验
LCD1602模块的显示需要注意几点: 1.显示两行,第一行的起始地址是0x80,第二行的地址是0x80+0x40 = 0xC0. 2.RS,RW,EN接线没有说一定要接到P1,P2,P3上,只要给对 ...
- 基于C51单片机的万年历设计(LCD1602显示)
C51单片机万年历设计 注:该程序基于普中科技C51 V2.2开发板设计,库函数和硬件资料均来自普中科技,侵删.main.c大部分为原创,如有雷同,纯属巧合. 名称:C51万年历. 硬件:以C51芯片 ...
- 1602实现计算机实验报告,LCD1602液晶显示实验报告
LCD1602液晶显示实验报告 一.实验目的 (1)了解LCD1602的基本原理,掌握其基本的工作流程. (2)学习用Verilog HDL语言编写LCD1602的控制指令程序,能够在液晶屏 上显示出 ...
- C语言LCD1602液晶实验报告,LCD1602液晶显示实验报告.doc
LCD1602液晶显示实验报告 LCD1602液晶显示实验报告 实验目的 (1)了解LCD1602的基本原理,掌握其基本的工作流程. 学习用Verilog HDL语言编写LCD1602的控制指令程序, ...
- 基于51单片机驱动ADXL346 (LCD1602显示)
基于51单片机驱动ADXL346 (LCD1602显示) 一.ADXL346传感器介绍 1.实物图 2.产品说明 3.电气参数 4.通信协议 二.驱动代码 1.引脚定义 2.初始化函数 3.主函数 三 ...
- 山东大学单片机原理与应用实验 3.7LCD 1602显示实验
目录 一.实验题目 二.实验要求 三.实验过程及结果分析 四.实验流程图 五.实验源代码 一.实验题目 3.7 LCD 1602显示实验 二.实验要求 1.画出实验的流程图 2.编写源程序并进行注释 ...
- 【Proteus仿真】51单片机汇编实现DS18B20+LCD1602显示
[Proteus仿真]51单片机汇编实现DS18B20+LCD1602显示 Proteus仿真 汇编代码(.asm) ;**************************************** ...
最新文章
- python资料百度云-Java+Python+前端 学习资料大全 百度云盘
- c++ auto 关键字
- Python知识:生成声波并显示
- javase基础第三天
- Asp.net中利用ExecuteNonQuery()执行存储过程返回-1解决方案
- 网狐棋牌(三) 调度引擎初步分析
- 垃圾回收算法简单介绍——JVM读书笔记lt;二gt;
- VHDL四选一数据选择器和基本触发器的设计
- 计算机卡在无法显示网页,我的电脑上网上银行一直“无法显示网页”
- 【CodeForces - 1102C 】Doors Breaking and Repairing (思维,简单博弈)
- 常见开源协议大白话说明
- spring、mybatis、测试用例执行后数据没有入库
- 不同时期的项目变更控制流程
- 地图比例尺与空间分辨率之间的关系_地图比例尺与分辨率
- [ERROR] InnoDB: Write to file (merge)failed at offset 4249878528, 1048576 bytes should have been wri
- html 点击方块旋转,前端每日实战:86# 视频演示如何用纯 CSS 创作一个方块旋转动画...
- MonthCalendar显示该年的12个月份
- 校园招聘的秋招和春招有什么区别?
- 百度网盘新用户超级会员多少钱
- 运营推广一款新的app到底需要哪些完整步骤?