打印

谁能帮我看看我的1602显示程序有什么问题(显示不了)

[复制链接]
801|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我是小白|  楼主 | 2014-7-23 21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************************
1602液晶显示
RW=0     程序中以默认   故并没有定义
*******************************************/
#include<msp430x14x.h>
#define uchar unsigned char
#define uint unsigned int

#define set_rs P5OUT|=BIT5
#define clr_rs P5OUT&=~BIT5
#define set_lcden P5OUT|=BIT7
#define clr_lcden P5OUT&=~BIT7
#define dataout P4DIR=0XFF
#define dataport P4OUT


const uchar table[]="lishuai";
const uchar table1[]="welcome!";
void int_clk()
{
unsigned char i;      
BCSCTL1&=~XT2OFF;     //   打开XT振荡器
BCSCTL2|=SELM1+SELS;  //   MCLK为8M,SMCLK为1M
do
{
IFG1&=~OFIFG;         //   清除振荡器错误标志
for(i=0;i<100;i++)
   _NOP();             //   延时等待
}
while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待
IFG1&=~OFIFG;
}
void delay5ms(void)
{
   unsigned int i=40000;
    while (i != 0)
    {
        i--;
    }
}
void write_com(uchar com)                   //1602写命令
{
        clr_rs;                             //写命令
        clr_lcden;                             //拉低
        dataport=com;                     
        delay5ms();
        set_lcden;                          //拉高
        delay5ms();
        clr_lcden;                            //拉低
}
void write_date(uchar date)                //1602写数据
{
        set_rs;                           //写数据
        clr_lcden;                        //拉低
        dataport=date;
        delay5ms();
        set_lcden;                      //拉高
        delay5ms();
        clr_lcden;                        //拉低
}
void init()
{
        uchar num;
        clr_lcden;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
        for(num=0;num<7;num++)
                {
                        write_date(table[num]);
                        delay5ms();
                }
        write_com(0x80+0x40);
        for(num=0;num<8;num++)
                {
                        write_date(table1[num]);
                        delay5ms();
                }
}
void main()
{
   WDTCTL = WDTPW + WDTHOLD;                    //关闭开门狗
   int_clk();                                   //初始化
   P5DIR|=BIT5+BIT7;
   dataout;
   init();                                
   while(1);                             
}

相关帖子

沙发
dirtwillfly| | 2014-7-23 21:25 | 只看该作者
本帖最后由 dirtwillfly 于 2014-7-23 21:27 编辑

一般1602不显示,可能的原因:
1、背光没调好;
2、大部分是时序问题。
如果有示波器或逻辑分析仪,可以看看读写的时序和1602的手册是否相符。
若没有示波器或者逻辑分析仪,可以在调试的时候注意下每个节点间的执行时间
3、如果是使用的别人的代码,要注意自己的1602的控制器,是否和别人的一样,时序是否兼容。

使用特权

评论回复
板凳
我是小白|  楼主 | 2014-7-24 11:15 | 只看该作者
我都检查过了  实在无能为力了

使用特权

评论回复
地板
我是小白|  楼主 | 2014-7-24 11:16 | 只看该作者
dirtwillfly 发表于 2014-7-23 21:25
一般1602不显示,可能的原因:
1、背光没调好;
2、大部分是时序问题。

我检查过了  实在不知道怎么办了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝