【求助】关于12864的疑问

2019-03-24 18:58发布

是这样的,我今天写了一段代码,让12864显示两行字符,正常的话应该是这种效果:

年 月 日
时 分 秒

一上来写的时候写错了,把显示代码放在了while(1)里,也就是这段显示程序一直无限循环。
这个的效果是能看出来字符在闪动,这个我可以理解,可是我不理解的是,字符显示居然成了这样:

年 月 日
时 分 秒 年

月 日

难道说12864比单片机反应快吗? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
blue_bm
2019-03-26 03:47
我一直都用的这段程序...就是不知道为什么放while(1)里就不行了...


uchar code tab1[]="  年  月  日";
uchar code tab2[]="  时  分  秒";

sbit lcd_rs = P2^0;   //H=data; L="command";
sbit lcd_rw = P2^1;   //H=read; L="write";
sbit lcd_en = P2^2;   //input enable;
sbit lcd_psb= P2^3;   //H=并口; L="串口";
sbit lcd_rst= P2^4;   //Reset Signal 低电平有效
sbit lcd_busy=P0^7;   //lcd busy bit



void main()
{
        while(1)
            {
                lcd_init();
                 lcd_wcmd(0x01);

                lcd_pos(0,0);
                print(tab1);
                lcd_pos(2,0);
                print(tab2);
        }
}





//液晶检测忙状态
void busy_lcd(void)
{
        lcd_data=0xff;
        lcd_rs=0;
        lcd_rw=1;
        lcd_en=1;
        while(lcd_busy==1);
        lcd_en=0;
}


//对液晶写指令
void lcd_wcmd(uchar cmd)
{
        busy_lcd();
        lcd_rs=0;
        lcd_rw=0;
        lcd_data=cmd;
        lcd_en=1;
        ;
        lcd_en=0;
}


//对液晶写数据
void lcd_wdata(uchar dat)
{
        busy_lcd();
        lcd_rs=1;
        lcd_rw=0;
        lcd_data=dat;
        lcd_en=1;
        ;
        lcd_en=0;
}


//液晶初始化
void lcd_init(void)
{
        lcd_wcmd(0x30);
        //基本指令操作
        lcd_wcmd(0x06);
        /*光标的移动方向*/
        lcd_wcmd(0x0c);
        /*开显示,关游标*/
        lcd_wcmd(0x01);
        //清除显示内容
}


//指定要显示字符的坐标
void lcd_pos(uchar y, uchar x)
{
       
        if(y==1)
        lcd_wcmd(0x80|x);
        if(y==2)
        lcd_wcmd(0x90|x);
        if(y==3)
        lcd_wcmd((0x80|x)+8);
        if(y==4)
        lcd_wcmd((0x90|x)+8);

}

//液晶显示字符串程序
void print(uchar str[])
{
        uint i;
        i=0;
        while(str!='')
        {
                lcd_wdata(str);
                i++;
        }
}

一周热门 更多>