微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于12864液晶的显示问题

关于12864液晶的显示问题

时间:10-02 整理:3721RD 点击:
求大神帮忙看一下该程序为什么仅显示第一行,而后两行不显示,谢谢了
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_data P0
sbit en=P1^6;
sbit rs=P2^0;
sbit rw=P2^1;
sbit cs1=P2^2;
uchar code table[]="湖师电子俱乐部";
uchar code table1[]="ceet.hbnu.edu";
uchar code table2[]="0123456789";
uchar code table3[]="ABCDEFGHIJKLM";
void delay(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}
/*忙查询*/
void chk_busy()
{  rs=0;
   rw=1;
   en=1;
   _nop_();
   P0=0xff;
   while((P0&0x80)==0x80);
   en=0;
}
/*写指令数据到LCD*/
void write_cmd(uchar cmd)
{
        chk_busy();
        rw=0;
        rs=0;
        P0=cmd;
        delay(5);
        en=1;
        delay(5);
        en=0;
}
/*写显示数据到LCD*/
void write_data(uchar date)
{
        chk_busy();
        rw=0;
        rs=1;
        P0=date;
        delay(5);
        en=1;
        delay(5);
        en=0;
}
/*设定显示位置*/
void lcd_pos(uchar x,uchar y)
{
        uchar pos;
        if(x==0)
                {x=0x80;}
        else if(x==1)
                {x=0x90;}
        else if(x==2)
                {x=0x88;}
        else if(x==3)
                {x=0x98;}
        pos=x+y;
        write_cmd(pos);
}
void init()
{
        rw=0;
        cs1=1;
        en=0;
        write_cmd(0x30);
        delay(5);
        write_cmd(0x0c);
        delay(5);
        write_cmd(0x01);
        delay(5);
        write_cmd(0x06);
        delay(5);
}
void main()
{
        uchar i;
        delay(20);
        init();
        lcd_pos(0,1);      //设置显示位置为第一行第一个字符
        i=0;
        while(table[i]!='\0')
        {
                write_data(table[i]);           //显示字符
                i++;
                delay(200);
        }
        lcd_pos(1,0);
        i=0;
        while(table1[i]!='\0');
        {
                write_data(table1[i]);
                i++;
                delay(2000);
        }
        lcd_pos(2,0);
        i=0;
        while(table2[i]!='\0');
        {
                write_data(table2[i]);
                i++;
                delay(200);
        }
        lcd_pos(3,0);
        i=0;
        while(table3[i]!='\0');
        {
                write_data(table3[i]);
                i++;
                delay(200);
        }
        while(1);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top