找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2293|回复: 0
打印 上一主题 下一主题
收起左侧

求助:LCD12864测试字符表时显示问题,加while(1);不显示

[复制链接]
跳转到指定楼层
楼主
ID:115705 发表于 2016-4-24 14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:我用12864液晶显示字符表的时候,液晶显示字符不停地从第一行到最后一行快速刷新;后来我打算在主函数中加入“while(1);”希望可以停止刷新,字符稳定显示在液晶屏幕上。但是下载程序到单片机中,结果什么都不显示了。尝试了很多方法:验证串行时序,查询手册规范初始化,调整延长时间,但并没解决,望大家帮忙找找问题。
基本信息:lcd:jm12864g  驱动器是st7920                                 单片机:stc89c52 编译环境: keil软件
程序内容:
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int
//*******JM12864端口定义***********//     
sbit cs=P3^5;            //数据命令输入选择
sbit sid=P3^6;            //读写操作选择
sbit sclk=P3^4;         //液晶使能控制
sbit psb=P3^7;           //串并数据传输方式选择
sbit dula=P2^6;
sbit wela=P2^7;          //位锁端锁


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


//***********************************************************//
//*        发送一个字节数据                                                                              *//
//***********************************************************//

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) //写指令或数据
{
  uchar start_data,Hdata,Ldata;
  if(start==0)
    start_data=0xf8;  //写指令
  else      
    start_data=0xfa;  //写数据
  cs=1;
  Hdata=ddata&0xf0;    //取高四位
  Ldata=(ddata<<4)&0xf0;  //取低四位
  sendbyte(start_data);   //发送起始信号
  delay_Nus(600);
  sendbyte(Hdata);       //发送高四位
  delay_Nus(600);
  sendbyte(Ldata);    //发送低四位
  delay_Nus(600);
  cs=0;
}


//***********************************************************//
//*          LCD初始化设定                                                                                *//
//***********************************************************//
void lcd_init()
{
        psb=0;
        
        send(0,0x30);    //基本指令集
        delay_Nms(1);
        send(0,0x30);    //基本指令集
        delay_Nms(1);
        send(0,0x0c);    //显示开,关光标
        delay_Nms(1);
        send(0,0x01);    //清屏
        delay_Nms(20);
        send(0,0x06);    //游标右移
        delay_Nms(10);
        send(0,0x80);    //设定起始位置
}

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

    lcd_init();                //初始化lcd  

     send(0,0x80);             //设置显示位置为第一行第一个字符
                 for(i=1;i<16;i++)
                 {send(1,0x00+i);}
     send(0,0x90);             //设置显示位置为第二行第一个字符
                 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);             //设置显示位置为第四行第一个字符
                 for(i=1;i<16;i++)
                 {send(1,0x30+i);}

      while(1);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表