3275|6

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

我写的基于msp430的1602显示程序 [复制链接]


#

#include "io430.h"
#define uint unsigned int                              //定义数据类型替代码
#define uchar unsigned char
#define dat P1OUT                                      //定义LCD1602的数据口为P1
#define CLR_RS P2OUT&=~BIT0                            //置零P2.0位,即置零RS
#define SET_RS P2OUT|=BIT0                             //置一P2.0位,即置一RS
#define CLR_RW P2OUT&=~BIT1                            //置零P2.1位,即置零RW
#define SET_RW P2OUT|=BIT1                             //置一P2.1位,即置一RW
#define CLR_EN P2OUT&=~BIT2                            //置零P2.2位,即置零EN
#define SET_EN P2OUT|=BIT2                             //置一P2.2位,即置一EN
uchar busy;                                            //1602判忙标志
void delay_lms(int x);                                  //延时程序,短延时
void delay_ls(int x);                                   //延时程序,长延时
void display(void);                                    //显示程序
void busy_1602(void);                                  //液晶查忙程序
void init_1602(void);                                  //液晶初始化
void shj_1602(uchar a);                                //液晶写数据程序
void zhl_1602(uchar a);                                //液晶写指令程序

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  P1DIR=0xff;
  P3DIR=0xff;
  display(); 
}


void delay_lms(int x)                                   //延时程序,短延时
{
  while(x--)
    for(int i=0;i<25;i++);
}


void delay_ls(int x)                                    //延时程序,长延时
{
  for(int i=0;i<8;i++)
  {
    while(x--)
      for(int i=0;i<150;i++);
  }
}


void display(void)                                     //液晶显示程序
{
  uchar i;                                             //定义计数值
  uchar table0[16]={"fuck the rules.."};               //定义LCD1602显示两行的字符
  uchar table1[16]={"God bless you..."};
  init_1602();                                         //初始化1602
  zhl_1602(0x08);                                      //关闭显示
  zhl_1602(0x01);                                      //显示清屏
  for(i=0;i<16;i++)                                    //发送数据第一行
  {
    shj_1602(table0);
  }
  zhl_1602(0x80+0x40);                                 //显示换行
  for (i=0;i<16;i++)                                   //发送数据第二行
  {
    shj_1602(table1);
  }
  zhl_1602(0x0c);                                      //显示开及光标设置
}
            
            
void busy_1602(void)                                   //查询忙碌标志信号程序
{
  do
  {
    CLR_EN;                                            //EN置0
    SET_RW;                                            //RW置1   读信号线
    CLR_RS;                                            //RS置0   读取指令
    SET_EN;                                            //EN置1   读信息
    busy=dat;
    CLR_EN;                                            //EN置0
    delay_lms(10);
  }
  while(busy&&0x10==1);
}
            

void zhl_1602(uchar a)                                 //写指令到LCM程序
{
  busy_1602();
  CLR_EN;                                              //EN置0
  CLR_RW;                                              //RW置0   写信号线            
  CLR_RS;                                              //RS置1   读取指令
  SET_EN;                                              //EN置1   读信息
  dat=a; 
  CLR_EN;                                              //EN置0
}
            
            
void shj_1602(uchar a)                                 //写指令到LCM程序
{
  busy_1602();
  CLR_EN;                                              //EN置0
  CLR_RW;                                              //RW置0   写信号线
  SET_RS;                                              //RS置1   读取数据
  SET_EN;                                              //EN置1    读信息
  dat=a;
  CLR_EN;                                              //EN置0
}
            

void init_1602(void)                                   //启动LCM程序
{
  zhl_1602(0x38);                                      //写指令
  zhl_1602(0x0c);                                      //显示开及光标设置
  zhl_1602(0x06);                                      //光标移动设置
}
     

最新回复

分享谢谢  详情 回复 发表于 2016-1-22 00:49
 
点赞 关注

回复
举报

202

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
不错
 
 

回复

121

帖子

6

TA的资源

一粒金砂(中级)

板凳
 
hh好好
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

4
 
p3dir=0xff
==============
what?
 
 
 

回复

34

帖子

0

TA的资源

一粒金砂(中级)

5
 
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  P1DIR=0xff;
  P3DIR=0xff;改成P2DIR=0xff;
  display();  
}

for(i=0;i<16;i++)                                    //发送数据第一行
  {
    shj_1602(table0);改成shj_1602(table0);
  }
  zhl_1602(0x80+0x40);                                 //显示换行
  for (i=0;i<16;i++)                                   //发送数据第二行
  {
    shj_1602(table1);改成shj_1602(table1);
  }

点评

有区别么  详情 回复 发表于 2014-4-16 19:59
 
个人签名let us go
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

6
 
贾维尔麦基 发表于 2014-3-27 15:10
int main( void )
{
  // Stop watchdog timer to prevent time out reset

有区别么
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

7
 
分享谢谢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表