为什么我的1602接收不到430发出的时钟信号呢?1602不能正常显示

2019-03-24 13:45发布

120801A000.jpg


采用四线驱动的方式:

#include<msp430g2553.h>
#define uchar unsigned char
#define uint  unsigned int
const uchar tab_1[16]="Hello Msp430";
const uchar tab_2[16]=" 1602test ";

/*********函数声明区***********/
void lcd_dis();                                 // LCD显示函数
void lcd_init();                                 // LCD初始化函数
void write_com(uchar);                         // 写命令函数
void write_data(uchar);                 // 写数据函数

/*********主函数***********/

void main()
{
P1DIR|=BIT0+BIT1+BIT2;
P2DIR|=BIT0+BIT1+BIT2+BIT3;
lcd_init();
while(1)
{
  lcd_dis();
}
}

/*********lcd显示函数******/
void lcd_dis()
{
uchar n;
write_com(0x80);                                 // 设置光标位置
for(n=0;n<16;n++)
  {
        write_data(tab_1[n]);
  }
write_com(0xc0);                                 // 设置光标位置
for(n=0;n<16;n++)
  {
        write_data(tab_2[n]);
  }
}

/*********LCD初始化函数****/
void lcd_init()
{
_delay_cycles(40000);
P1OUT|=BIT2;                                        //LCDEN=1;
write_com(0x33);                                 // 三次显示模式设置
_delay_cycles(5000);
write_com(0x32);
_delay_cycles(5000);
write_com(0x28);                                 // 设置显示模式
write_com(0x08);                                // 关闭显示
write_com(0x01);                                 // 显示清屏
write_com(0x06);                                 // 地址指针及光标自动加1
write_com(0x0c);                                 // 显示开及光标设置
_delay_cycles(5000);
}

/*********写命令函数开始*******/
void write_com(uchar com)
{
  P1OUT&=~(BIT0+BIT1);                                         //LCDRS=0; 低电平写命令
                                                                                          //LCDRW=0;  写有效
  P1OUT|=BIT2;                                                          //LCDEN=1;
  P2OUT&=~(BIT3+BIT2+BIT1+BIT0);
  P2OUT|=(com>>4)&(BIT3+BIT2+BIT1+BIT0);                // 命令字高4位
  P1OUT&=~(BIT2);                                                                  //LCDEN=0;LCD使能端置低电平
  _delay_cycles(1);                                                            //delay(1);
  P1OUT|=BIT2;                                                                     //LCDEN=1;
  P2OUT&=~(BIT3+BIT2+BIT1+BIT0);
  P2OUT|=(com)&(BIT3+BIT2+BIT1+BIT0);//P2=com<<4;         // 命令字低4位
  P1OUT&=~(BIT2);                                                                //LCDEN=0;  LCD使能端置低电平
  _delay_cycles(1);
  P1OUT|=BIT2;                                                                       //LCDEN=1;
}

/*********写数据函数开始*******/
void write_data(uchar dat)
{
  P1OUT|=BIT0;                              // LCDRS=1; 高电平写数据
  P1OUT&=~(BIT1);                       // LCDRW=0; 写有效
  P2OUT=dat;                                                // 数据高4位
  P1OUT&=~(BIT2);                          //LCDEN=0; LCD使能端置低电平
  _delay_cycles(1);
  P1OUT|=BIT2;                              //LCDEN=1;
  P2OUT=dat<<4;                                 // 数据低4位
  P1OUT&=~(BIT2);                       //  LCDEN=0; LCD使能端置低电平
  _delay_cycles(1);
  P1OUT|=BIT2;                              //LCDEN=1;
}

问题就是1602没有反应,怎么回事呢? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
scott123
2019-03-25 03:54
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章