X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
微控制器 MCU
[讨论] msp430驱动LCD1602液晶显示编程实例分享
Jacktang
2016-2-29 23:02
楼主
msp430驱动LCD1602液晶显示C语言程序
#include "msp430x14x.h"
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F)*(double)x/2000000.0)
#define delay_ms(x) __delay_cycles((long)(CPU_F)*(double)x/20000.0)
#define uint unsigned int
#define uchar unsigned char
#define RS_H P5OUT|=BIT5
#define RS_L P5OUT&=~BIT5 //P1OUT&=~BIT0
#define RW_H P5OUT|=BIT6
#define RW_L P5OUT&=~BIT6
#define E_H P5OUT|=BIT7
#define E_L P5OUT&=~BIT7
#define BF BIT7
#define DataDIR P4DIR
#define DataOUT P4OUT
#define DataIN P4IN
uchar lcd_shuju[]="0123456789-";//定义字符数组显示数字
uchar lcd_tab[]="abcde";
uchar lcd_tab1[]="XYZ";
/*void LCDable(void) //忙检测不写也可以
{
DataDIR&=0X00;//数据端设置为输入(读取液晶状态字,判断液晶状态)
RS_L;
RW_H;
E_H;
delay_us(4);
while((DataIN & BF!=0));
E_L;
DataDIR|=0xff;
}*/
void shizhong()
{
BCSCTL1=0X37; //使用高速晶振XT2,低速模式,8分频
BCSCTL2=0XBE; //选择时钟源为XT2,8分频,DC0震荡电阻选择内部电阻
}
void WriteCommond(uchar Commond) //写指令
{
//LCDable();
DataDIR|=0xff;//数据端设置为输出
RS_L;
RW_L;
E_L;
delay_ms(4);
DataOUT=Commond;
delay_ms(4);
E_H;
delay_ms(4);
E_L;
RW_H;
RS_H;
}
void WriteAddress(uchar x) //写地址
{
WriteCommond(0x80|x);
}
void Writedata(uchar data) //写数据
{
//LCDable();
DataDIR|=0xff;//数据端设置为输出
RS_H;
RW_L;
E_L;
delay_ms(4);
DataOUT=data;
delay_ms(4);
E_H;
delay_ms(4);
E_L;
RW_H;
RS_L;
}
void LCD_Init()
{
DataDIR|=0xff;//数据口设置为输出
P5DIR|=0XE0;//控制端设置为输出
WriteCommond(0X38);//显示模式设置 16X2
WriteCommond(0X0C);//开显示,光标设置为不显示
WriteCommond(0X06);//开显示,光标移动模式设置为:读写一个字符后光标及地址指针加1
WriteCommond(0x80+0x00);//显示起始地址
WriteCommond(0X01);//清屏设置
}
void display_ZFC()
{
uchar i;
WriteAddress(0x05);//显示起始地址:第1行第6个位置
i=0;
while(lcd_tab
!='\0')
{
Writedata(lcd_tab
);
i++;
delay_ms(50);
}
}
void display_ZFC1()
{
uchar i;
WriteAddress(0x42);//显示起始地址:第2行第3个位置
i=0;
while(lcd_tab1
!='\0')
{
Writedata(lcd_tab1
);
i++;
delay_ms(50);
}
}
void display_SJ()
{
uchar i;
WriteAddress(0x03);//显示起始地址:第1行第1个位置
i=0;
while(lcd_shuju
!='\0')
{
Writedata(lcd_shuju
);
i++;
delay_ms(50);
}
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
shizhong();//配置时钟
P5DIR=0xE0;//控制端设置为输出
LCD_Init();//液晶初始化
display_ZFC();//显示字符串
display_ZFC1();//显示字符串1
delay_ms(2000);
display_SJ();//显示数据串0123456789-
}
点赞
回复评论 (1)
沙发
hhfhhm2007
多谢楼主分享
点赞
2016-3-19 20:17
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
疯壳AI开源无人机遥控整机代码走读、编译与烧写
隔离放大器在什么情况下其隔离作用丧失?
proteus单片机仿真教程大全 视频 文档 从入门到精通
研华uno-2182 d12e 工业级嵌入式控制器 低价处理
招聘硬件工程师
【求教】DE1-SOC如何实现在ARM上接受来自FPGA的连续的图像数据
【MSP430共享】基于MSP430F149单片机的逆变器监控系统设计
穿戴 构建具备传感器同步的人体无线局域网(BAN)
求一个单片机编程,求高手们解答,急用,谢谢
求助
MSP430 Vdd只有0.3V?
打着雨伞请教(之3),关于GPIO口的设置问题
s3c2440板扩展IO口来驱动4×4矩阵键盘,出现问题
晒晒我做的自动升旗系统
SDRAM的工作原理
电子围栏,脉冲电子围栏,周界安全,周界防范系统性能对比
quartus 2 9.0编译无法进行
求助,149又烧掉了
MEMS电容式绝对压力传感器
NIOSII那些事1.0版
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复