微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请教一个有关12864的问题,谢谢

请教一个有关12864的问题,谢谢

时间:10-02 整理:3721RD 点击:
感谢您能抽出时间来看一下愚生的问题。查阅了些资料,依然不知问题所在。可能是在下比较愚笨,无法看清本质,还请各位大侠指点迷津,在下感激不尽!这是一个12864显示的小函数。如有陋处,还请多多包涵,本人小白一枚。
问题如下:
我的想法是,按某个键一下,12864上的显示就会在dis12[][10]这个数组里面一个一个显示。但不知道为什么,只能显示51%,在按的话,就成了50%了,且后面都是50%。就酱。
代码不美,将就的看吧。控制的按键的部分已经红字标出。
该链接附有视频,在愚生的QQ空间相册里,12864的那个,密码12864。
https://user.qzone.qq.com/183137 ... eNPCldR1a6RwLVnUdc_

步入正题,代码如下:
#include<reg52.h>
#include <stdlib.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_data P0
sbit col1=P1^7;   //列端口定义
sbit col2=P1^6;
sbit col3=P2^0;
sbit col4=P2^1;
sbit LCD_EN=P3^4;
sbit LCD_RS=P3^5;
sbit LCD_RW=P3^6;
sbit LCD_PSB=P3^7;
uchar code dis0[]={"****智能控制****"};
uchar code dis1[]={"当前功能显示区"};
uchar code dis2[]={"当前水温:"};
uchar code dis3[]={"当前水位比: 50%"};
uchar code dis4[]={"按S17 开始上水"};
uchar code dis5[]={"目标水位比: 50%"};
uchar code dis6[]={"按 S5 停止上水"};
uchar code dis7[]={"上水中..."};
uchar code dis8[]={"按S18 开始加热"};
uchar code dis9[]={"目标水温:"};
uchar code dis10[]={"按 S6 停止加热"};
uchar code dis11[]={"加热中..."};
uchar code dis12[][10]={"51%","52%","53%","54%","55%","56%","57%","58%","59%","60%", //0-9
                                            "61%","62%","63%","64%","65%","66%","67%","68%","69%","70%", //10-19
                                            "71%","72%","73%","74%","75%","76%","77%","78%","79%","80%", //20-29
                                            "81%","82%","83%","84%","85%","86%","87%","88%","89%","90%", //30-39
                                            "91%","92%","93%","94%","95%","96%","97%","98%","99%","100%"};//40-49
uchar code dis13[][10]={"49%","48%","47%","46%","45%","44%","43%","42%","41%","40%",//0-9
                                            "39%","38%","37%","36%","35%","34%","33%","32%","31%","30%"};//10-19
/*uchar code dis12[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                        0x00,0x00,0x00,0x00};//清行*/
void delay1ms(uint);
void dekay(uchar);                                          
void keyscan();
void write_cmd(uchar cmd);
void write_dat(uchar dat);
void lcd_pos(uchar X,uchar Y);
void lcd_init();
uchar num,i,m,n,temp;
uint counter,a,counter1,b;
uint add0;
void main()//固定界面显示
{
        //uint add0,add1,minus0,minus1;
        delay1ms(10);
        lcd_init();

        lcd_pos(0,0);//智能控制
        i=0;
        while(dis0!='\0')
        {
                write_dat(dis0);
                i++;
        }

        lcd_pos(1,0);//当前水温
        i=0;
        while(dis2!='\0')
        {
                write_dat(dis2);
                i++;
        }

        lcd_pos(2,0);//当前水位比
        i=0;
        while(dis3!='\0')
        {
                write_dat(dis3);
                i++;
        }

        lcd_pos(3,0);//当前功能显示区
        i=0;
        while(dis1!='\0')
        {
                write_dat(dis1);
                i++;
        }

        delay1ms(10);
        while(1)
        {
                //P1=0xff;
                //P2=0xff;
                //P3=0xff;
                keyscan();
        }
}
void delay1ms(uint x)//延时
{
        uint i,j;
        for(j=0;j<x;j++)
                for(i=0;i<110;i++);
}
void delay(uchar i)//延时
{
        uchar j,k;
        for(j=i;j>0;j--)
                for(k=125;k>0;k--);
}
void keyscan()
{
                col1=1;col2=1;col3=0;col4=1;//上水按键区
                temp=P2;
                temp=P2&0x3f;
                if(col3==0)         
                {                        
                        delay(80);
                        if(temp!=0x3f)
                        {        
                                temp=P2&0x3c;
                                switch(temp)
                                {
                                        case 0x1c:        //进入上水功能界面
                                        counter++;
                                        a=counter%2;
                                                switch(a)
                                                {
                                                        case 1:         //第一功能键,显示上水界面
                                                                write_cmd(0x01);
                                                                delay1ms(5);
                                                                delay(20);
                                                                lcd_pos(0,0);
                                                                i=0;
                                                                while(dis0!='\0')
                                                                {
                                                                        write_dat(dis0);
                                                                        i++;
                                                                }
                                                                delay(20);
                                                                lcd_pos(1,0);
                                                                i=0;
                                                                while(dis4!='\0')
                                                                {
                                                                        write_dat(dis4);
                                                                        i++;
                                                                }
               
                                                                delay(20);
                                                                lcd_pos(2,0);
                                                                i=0;
                                                                while(dis5!='\0')
                                                                {                                                                           
                                                                        write_dat(dis5);
                                                                        i++;
                                                                }
                                                                delay(20);
                                                                lcd_pos(3,0);
                                                                i=0;
                                                                while(dis1!='\0')
                                                                {
                                                                        write_dat(dis1);
                                                                        i++;
                                                                }
                                                                break;
                                                        case 0:           //第二功能键,开始上水
                                                                write_cmd(0x01);
                                                                delay1ms(5);
                                                                delay(20);
                                                                lcd_pos(0,0);
                                                                i=0;
                                                                while(dis0!='\0')
                                                                {
                                                                        write_dat(dis0);
                                                                        i++;
                                                                }
                                                                delay(20);
                                                                lcd_pos(1,0);
                                                                i=0;
                                                                while(dis6!='\0')
                                                                {
                                                                        write_dat(dis6);
                                                                        i++;
                                                                }
               
                                                                delay(20);
                                                                lcd_pos(2,0);
                                                                i=0;
                                                                while(dis3!='\0')
                                                                {
                                                                        write_dat(dis3);
                                                                        i++;
                                                                }
                                                                delay(20);
                                                                lcd_pos(3,0);
                                                                i=0;
                                                                while(dis7!='\0')
                                                                {
                                                                        write_dat(dis7);
                                                                        i++;
                                                                }
                                                                break;
                                                        }
                                                        break;
                                
                                        case 0x2c:        //增加水位比
                                
                                                add0++;
                                                if(add0==1)
                                                {
                                                        write_cmd(0x01);
                                                        delay1ms(5);                                         
        
                                                        delay(20);
                                                        lcd_pos(0,0);
                                                        i=0;
                                                        while(dis0!='\0')
                                                        {
                                                                write_dat(dis0);
                                                                i++;
                                                        }
        
                                                        delay(20);
                                                        lcd_pos(1,0);
                                                        i=0;
                                                        while(dis4!='\0')
                                                        {
                                                                write_dat(dis4);
                                                                i++;
                                                        }
        
                                                        delay(20);
                                                        lcd_pos(2,0);
                                                        i=0;
                                                        while(dis5!='\0')
                                                        {
                                                                write_dat(dis5);
                                                                i++;
                                                        }
        
                                                        delay(20);
                                                        lcd_pos(3,0);
                                                        i=0;
                                                        while(dis1!='\0')
                                                        {
                                                                write_dat(dis1);
                                                                i++;
                                                        }
                                                        break;
                                                }

                                                else if(add0>1&&add0<51)
                                                {
                                                        write_cmd(0x01);
                                                        delay1ms(5);                                         
        
                                                        delay(20);
                                                        lcd_pos(0,0);
                                                        i=0;
                                                        while(dis0!='\0')
                                                        {
                                                                write_dat(dis0);
                                                                i++;
                                                        }
        
                                                        delay(20);
                                                        lcd_pos(1,0);
                                                        i=0;
                                                        while(dis4!='\0')
                                                        {
                                                                write_dat(dis4);
                                                                i++;
                                                        }
        
                                                        delay(20);
                                                        lcd_pos(2,0);
                                                        i=0;
                                                        while(dis5!='\0')
                                                        {
                                                                write_dat(dis5);
                                                                i++;
                                                        }
                                                        //delay(20);
                                                        lcd_pos(2,6);
                                                        while(dis12[m][n]!='\0')
                                                        {
                                                                write_dat(dis12[m][n]);
                                                                n++;
                                                                if(n==9||n==19||n==29||n==39)
                                                                {        
                                                                        m++;
                                                                }
                                                                if(n==9&&m==4)
                                                                {
                                                                        n=0;
                                                                        m=0;
                                                                }
                                                        }
        
                                                        delay(20);
                                                        lcd_pos(3,0);
                                                        i=0;
                                                        while(dis1!='\0')
                                                        {
                                                                write_dat(dis1);
                                                                i++;
                                                        }
                                                        break;        
                                                }
                                        case 0x34:  //降低水位比
                                                 write_cmd(0x01);
                                                delay1ms(5);
                                                delay(20);
                                                lcd_pos(0,0);
                                                i=0;
                                                while(dis0!='\0')
                                                {
                                                        write_dat(dis0);
                                                        i++;
                                                }
                                                delay(20);
                                                lcd_pos(1,0);
                                                i=0;
                                                while(dis4!='\0')
                                                {
                                                        write_dat(dis4);
                                                        i++;
                                                }
                                                delay(20);
                                                lcd_pos(2,0);
                                                i=0;
                                                while(dis5!='\0')
                                                {
                                                        write_dat(dis5);
                                                        i++;
                                                }
                                                delay(20);
           &nb

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

网站地图

Top