標(biāo)題: 求助:LCD12864測(cè)試字符表時(shí)顯示問題,加while(1);不顯示 [打印本頁(yè)]

作者: ANDATE    時(shí)間: 2016-4-24 14:35
標(biāo)題: 求助:LCD12864測(cè)試字符表時(shí)顯示問題,加while(1);不顯示
問題描述:我用12864液晶顯示字符表的時(shí)候,液晶顯示字符不停地從第一行到最后一行快速刷新;后來我打算在主函數(shù)中加入“while(1);”希望可以停止刷新,字符穩(wěn)定顯示在液晶屏幕上。但是下載程序到單片機(jī)中,結(jié)果什么都不顯示了。嘗試了很多方法:驗(yàn)證串行時(shí)序,查詢手冊(cè)規(guī)范初始化,調(diào)整延長(zhǎng)時(shí)間,但并沒解決,望大家?guī)兔φ艺覇栴}。
基本信息:lcd:jm12864g  驅(qū)動(dòng)器是st7920                                 單片機(jī):stc89c52 編譯環(huán)境: keil軟件
程序內(nèi)容:
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int
//*******JM12864端口定義***********//     
sbit cs=P3^5;            //數(shù)據(jù)命令輸入選擇
sbit sid=P3^6;            //讀寫操作選擇
sbit sclk=P3^4;         //液晶使能控制
sbit psb=P3^7;           //串并數(shù)據(jù)傳輸方式選擇
sbit dula=P2^6;
sbit wela=P2^7;          //位鎖端鎖


//***********************************************************//
//*          延遲函數(shù)                                                                                          *//
//***********************************************************//
void delay_Nms(int ms)
{
    while(ms--)
        {
      uchar i;
          for(i=0;i<250;i++)  
           {
        delayNOP();
           }
        }
}


//***********************************************************//
//*        發(fā)送一個(gè)字節(jié)數(shù)據(jù)                                                                              *//
//***********************************************************//

void sendbyte(uchar byte)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                if((byte<<i)&0x80)  
        {  
            sid= 1;  
        }  
        else  
        {  
            sid= 0;  
        }  
        sclk= 0;  
        sclk= 1;   
    }

}

void send(bit start, uchar ddata) //寫指令或數(shù)據(jù)
{
  uchar start_data,Hdata,Ldata;
  if(start==0)
    start_data=0xf8;  //寫指令
  else      
    start_data=0xfa;  //寫數(shù)據(jù)
  cs=1;
  Hdata=ddata&0xf0;    //取高四位
  Ldata=(ddata<<4)&0xf0;  //取低四位
  sendbyte(start_data);   //發(fā)送起始信號(hào)
  delay_Nus(600);
  sendbyte(Hdata);       //發(fā)送高四位
  delay_Nus(600);
  sendbyte(Ldata);    //發(fā)送低四位
  delay_Nus(600);
  cs=0;
}


//***********************************************************//
//*          LCD初始化設(shè)定                                                                                *//
//***********************************************************//
void lcd_init()
{
        psb=0;
        
        send(0,0x30);    //基本指令集
        delay_Nms(1);
        send(0,0x30);    //基本指令集
        delay_Nms(1);
        send(0,0x0c);    //顯示開,關(guān)光標(biāo)
        delay_Nms(1);
        send(0,0x01);    //清屏
        delay_Nms(20);
        send(0,0x06);    //游標(biāo)右移
        delay_Nms(10);
        send(0,0x80);    //設(shè)定起始位置
}

//***********************************************************//
//*                主程序                                                                                       *//
//***********************************************************//
  void main()
{
   uchar i;
    delay_Nms(1);                 //延時(shí)

    lcd_init();                //初始化lcd  

     send(0,0x80);             //設(shè)置顯示位置為第一行第一個(gè)字符
                 for(i=1;i<16;i++)
                 {send(1,0x00+i);}
     send(0,0x90);             //設(shè)置顯示位置為第二行第一個(gè)字符
                 for(i=1;i<16;i++)         
                 {send(1,0x10+i);}
     send(0,0x88);
                 for(i=1;i<16;i++)
                 {send(1,0x20+i);}
     send(0,0x98);             //設(shè)置顯示位置為第四行第一個(gè)字符
                 for(i=1;i<16;i++)
                 {send(1,0x30+i);}

      while(1);
}






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1