社区导航

 
查看: 1039|回复: 9

[原创] 基于Proteus的MSP430单片机仿真实例14-LCD1602液晶显示字符

[复制链接]

6471

TA的帖子

4955

TA的资源

博客管理员

Rank: 6Rank: 6

资源大师勋章

发表于 2018-1-18 14:52:04 | 显示全部楼层 |阅读模式



此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处



一、任务要求
利用MSP30F247单片机驱动LCD1602液晶,使其显示两行字符:第一行显示“lao ma shi tu mcu”,第二行显示“msp430f247 study”。
二、硬件电路
硬件电路如下图所示。
选取MSP430F247单片机的P2端口连接LCD1602的数据线D0~D7,P3.0,P3.1,P3.2分别连接LCD1602的使能EN端口,读写RW端口,寄存器RS端口,产生LCD1602所需要的时序。
三、程序设计
//main.c
#include "msp430f247.h"
#include "stdlib.h"
#include "string.h"
/*****************************************软件延时,主频1M*******************/
#define CPU_F1 ((double)1000000)
#define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0))
#define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0))
/****************************************************************************/
#define SET_RS P3OUT |= BIT2
#define RST_RS P3OUT &= ~BIT2
#define SET_RW P3OUT |= BIT1
#define RST_RW P3OUT &= ~BIT1
#define SET_E P3OUT |= BIT0
#define RST_E P3OUT &= ~BIT0
//
const unsigned char Table1[]={"lao ma shi tu mcu"};
const unsigned char Table2[]={"msp430f247 study"};
void write_com(unsigned char com);//写命令函数
void write_dat(unsigned char dat);//写数据函数
/************************************************
函数名称:主函数
函数功能:LCD1602液晶显示字符
入口参数:无
出口参数:无
描述:
作者:老马识途单片机
日期:2018年1月6日
************************************************/
main()
{
unsigned char i;
WDTCTL = WDTPW + WDTHOLD;//关看门狗
P2DIR=0xff;//端口初始化
P3DIR=BIT0+BIT1+BIT2;
RST_E;
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
delay_ms1M(5);
write_com(0x01);//显示清屏
delay_ms1M(5);
write_com(0x0c);//显示开关,光标设置
delay_ms1M(5);
write_com(0x06);//显示开关,光标设置
delay_ms1M(5);
write_com(0x80);//数据指针设置,第一行显示
delay_ms1M(5);
for(i=0;i<sizeof(Table1);i++)
{
write_dat(Table1);
}
write_com(0x80+0x40);//数据指针设置,第二行显示
delay_ms1M(5);
for(i=0;i<sizeof(Table2);i++)
{
write_dat(Table2);
}
while(1)
{
}
}
void write_com(unsigned char com)
{
RST_RS;
RST_RW;
P2OUT=com;
SET_E;
delay_ms1M(2);
RST_E;
}
void write_dat(unsigned char dat)
{
SET_RS;
RST_RW;
P2OUT=dat;
SET_E;
delay_ms1M(2);
RST_E;
}
四、程序说明
程序首先对端口进行初始化,将单片机与液晶LCD1602相连的端口设置为输出端口,并对液晶进行初始化设置。在液晶的程序设计中,用了一些宏定义实现对液晶RS,RW,EN等引脚的高低电平的控制,其顺序是按照液晶显示时序设计的。
值得注意的是,当单片机将字符串输出给液晶显示器后,液晶显示器就不需要单片机对其进行动态刷新操作,这种显示类似于数码管的静态显示,可使单片机程序设计得以简化。
另外,液晶显示一般都是对字符串的输出,在很多情况下,比如A/D转换,数据处理等,结果都是数字,需要将这些数字转换成字符串。
五、仿真结果与分析
在proteus中画好电路图后,双击单片机,将可执行文件装载到单片机内,点击运行,观察数码管的显示情况。如下图所示。

此帖出自MSP430论坛


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-2-26 16:26:23 | 显示全部楼层
本帖最后由 13432812441 于 2018-2-26 17:17 编辑

发现了楼主的程序有个小错误,write_dat(Table1);应该改为write_dat( Table1 );
write_dat(Table2);应该改为write_dat( Table2 );

Snipaste_2018-02-26_16-17-24.png


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-2-26 16:38:05 | 显示全部楼层
我刚刚的回复不知道为什么打不了括号”[]“,所以回复了跟没回复一样,真的很抱歉。不过楼主的程序中有两句确实少了括号”[]“

点评

不好意思,请问哪里少了“[]”,请指正一下。 这个程序我仿真时候是能够正常运行的  详情 回复 发表于 2018-2-27 08:58


回复

使用道具 举报

6471

TA的帖子

4955

TA的资源

博客管理员

Rank: 6Rank: 6

资源大师勋章

 楼主| 发表于 2018-2-27 08:58:59 | 显示全部楼层
13432812441 发表于 2018-2-26 16:38
我刚刚的回复不知道为什么打不了括号”[]“,所以回复了跟没回复一样,真的很抱歉。不过楼主的程序中有两句 ...

不好意思,请问哪里少了“[]”,请指正一下。
这个程序我仿真时候是能够正常运行的

点评

有两个小错误: (1)write_dat(Table1);应改为write_dat(Table1[ i ]); (2)write_dat(Table2);应改为write_dat(Table2[ i ]);  详情 回复 发表于 2018-2-27 12:08


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-2-27 12:08:05 | 显示全部楼层
tiankai001 发表于 2018-2-27 08:58
不好意思,请问哪里少了“[]”,请指正一下。
这个程序我仿真时候是能够正常运行的

有两个小错误:
(1)write_dat(Table1);应改为write_dat(Table1[ i ]);
(2)write_dat(Table2);应改为write_dat(Table2[ i ]);

点评

感谢你指出错误, 我仔细对照了我的源程序,发现我的源程序里面是正确的,不知道为什么粘贴出来后就变了  详情 回复 发表于 2018-2-27 12:23


回复

使用道具 举报

6471

TA的帖子

4955

TA的资源

博客管理员

Rank: 6Rank: 6

资源大师勋章

 楼主| 发表于 2018-2-27 12:23:57 | 显示全部楼层
13432812441 发表于 2018-2-27 12:08
有两个小错误:
(1)write_dat(Table1);应改为write_dat(Table1[ i ]);
(2)write_dat(Table2);应 ...

感谢你指出错误,
我仔细对照了我的源程序,发现我的源程序里面是正确的,不知道为什么粘贴出来后就变了

点评

其实我当时打字打括号“[]”的时候,也发现明明打上了,可发布之后就变没了。后来把括号里面加了空格符就好了  详情 回复 发表于 2018-2-27 22:06


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-2-27 22:06:35 | 显示全部楼层
tiankai001 发表于 2018-2-27 12:23
感谢你指出错误,
我仔细对照了我的源程序,发现我的源程序里面是正确的,不知道为什么粘贴出来后就变了

其实我当时打字打括号“[]”的时候,也发现明明打上了,可发布之后就变没了。后来把括号里面加了空格符就好了

点评

哦,原来是这样啊,又学了一招,非常感谢  详情 回复 发表于 2018-2-28 08:46


回复

使用道具 举报

6471

TA的帖子

4955

TA的资源

博客管理员

Rank: 6Rank: 6

资源大师勋章

 楼主| 发表于 2018-2-28 08:46:19 | 显示全部楼层
13432812441 发表于 2018-2-27 22:06
其实我当时打字打括号“[]”的时候,也发现明明打上了,可发布之后就变没了。后来把括号里面加了空格符就 ...

哦,原来是这样啊,又学了一招,非常感谢

点评

不客气,应该说非常感谢楼主分享的资料  详情 回复 发表于 2018-2-28 11:24


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-2-28 11:24:50 | 显示全部楼层
tiankai001 发表于 2018-2-28 08:46
哦,原来是这样啊,又学了一招,非常感谢

不客气,应该说非常感谢楼主分享的资料


回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-3-26 21:30:20 | 显示全部楼层
gangxie


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-9-26 21:24 , Processed in 0.284114 second(s), 20 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表