• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

12864液晶无法正常显示数字(汉字、字符串都正常) msp430

凌寒2009 2014-11-23 浏览量:1550
#include
#define uchar unsigned char
#define SCLK1 P5OUT |=BIT7    //时钟拉高
#define SCLK0 P5OUT &=~BIT7   //时钟拉低
#define SID1  P5OUT |=BIT6    //数据端置1
#define SID0  P5OUT &=~BIT6   //数据端清零
#define CS1   P5OUT |=BIT5    //片选高电平
#define CS0   P5OUT &=~BIT5    //片选低电平
#define PSB   P5OUT &=~BIT0   //串口端拉低 设置串行模式
#define CPU_F ((double)8000000)   //外部高频晶振8MHZ
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 

void portinit() 
{
   P5SEL=0;                             //P5口为普通I/O口
   P5DIR |=BIT0+BIT1+BIT5+BIT6+BIT7;    //设置P5口操作液晶串口的位为输出
}

void wr_lcd(uchar com,uchar data)
{
   uchar i,j;
   CS1;               //CS片选高电平有效,选中12864
      for(i=0;i<5;i++)
      {
        SCLK1;
        SCLK0;
      }
   SID0;              //写操作
   SCLK1;             //时钟拉高
   SCLK0;             //时钟拉低
      if(com==0)
      {
   SID1;              //写数据
   SCLK1;             //时钟拉高
   SCLK0;             //时钟拉低
      }
      else
      {
   SID0;              //写指令
   SCLK1;             //时钟拉高
   SCLK0;             //时钟拉低
      }
   
   SID0;              //最后一个控制位为零 
   SCLK1;             //时钟拉高
   SCLK0;             //时钟拉低
   for(j=0;j<2;j++)
   {
   for(i=0;i<4;i++)          //写数据高四位
      {
         if(data&0x80)       //如果数据位为1
           SID1;             //则数据位置1
         else                //否则
           SID0;             //清零
         SCLK1;              //时钟拉高
         SCLK0;              //时钟拉低
         data=data<<1;
      } 
      SID0;
      for(i=0;i<4;i++)       //四个时钟脉冲
      {
         SCLK1;             //时钟拉高
         SCLK0;             //时钟拉低
      }
   }
      CS0;      
      SID1;
}
void lcdinit()
{
   P5OUT |=BIT1;     //是RST为高电平,此为液晶的正常电平状态,拉低会一直复位
   PSB;                //液晶串口方式
   //SCLK0;            //可有可无
   wr_lcd(1,0x30);      //8位基本指令设置
   delay_ms(0.2);
   wr_lcd(1,0x30);      //8位基本指令设置
   delay_ms(0.1);
   wr_lcd(1,0x0c);      //开显示,关光标
   delay_ms(0.2);
   wr_lcd(1,0x01);      //清屏,地址指针指向00H
   delay_ms(12);   
   wr_lcd(1,0x06);      //设定光标的移动方向
}
void display(uchar addr,uchar *data)
{
   wr_lcd(1,addr);
   while(*data != \'\')  
  {
    wr_lcd(0,*data);
    data++;
  }
}
int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;    // Stop watchdog timer to prevent time out reset
  portinit();
  lcdinit();
  uchar a[5];
  uchar temp_0=1;
  uchar temp_1=1;
  uchar temp_3=1;
  a[0]=temp_0;
  a[1]=temp_1;
  a[2]=\'.\';
  a[3]=temp_3;
  a[4]=\'V\';
  display(0x80,"当前电压为");

  display(0x93,a);

}

}12864液晶无法正常显示数字(汉字、字符串都正常) msp430

为什么 temp_1  temp_2  temp_3   的数值显示不正常呢

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 要显示的数字+0x30就ok了,很明显的!
    • 发布于 2014-11-25
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • 数字要转成对应的ASCII吧,你给所有的数字 加上一个0x30可能就好了,测试一下
    • 发布于2014-11-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 是有字库还是无字库?数字也需要取摸的   
    • 发布于2014-11-24
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

12864液晶无法正常显示数字(汉字、字符串都正常) msp430