⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 这是本人有幸收集的最完整的10多级液晶显示程序模块
💻 C
📖 第 1 页 / 共 5 页
字号:
    //              break;
    // case  delay9:
    //              delay=0xd0;
    //              break;
    // case  delay8:
    //              delay=0xc0;
    //              break;
     //case  delay7:
     //             delay=0xb0;
     //             break;
    // case  delay6:
    //              delay=0xa0;
    //              break;
    // case  delay5:
    //              delay=0x90;
    //              break;
     //case  delay4:
      //            delay=0x80;
     //             break;
     //case  delay3:
    //              delay=0x40;
    //              break;
     case  delay2:
                  if(edit_state==1)
                    delay=0x20;
                  break;
     case  delay1:
                  if(edit_state==1)
                    delay=0x10;
                  break;
     case  key_ok:
                  switch(key1)
                  {
                   // case  nokey:
                   //             key=key_temp;
                   //             key_temp=0x00;
                   //             delay=0;
                   //             break;
                    case  upkey:
                               // if(edit_state==1)
                                {
                                 // key=key_temp;

                                  delay=0x08;
                                }
                                break;
                    case  downkey:
                                //if(edit_state==1)
                                {
                                  //key=key_temp;

                                  delay=0x08;
                                }
                    default:    break;

                  }
                  break;
     case   delayflag:
                  key_scan=1;
                  if(key1==key_temp)
                     delay=0x04;
                  else
                  {
                    key_temp=0;
                    delay=0;
                  }
                  break;
     case   havekey:
                  key1=0;
                  key_scan=1;
                  delay=0x02;
                  p25=1;
                  LcdDelay=1;
                  LcdTime=0;
                  break;

   }
    if(delay>2)
      {
            if(key1==nokey)
            {
                key=key_temp;
                key_temp=0x00;
                delay=0;
                upcount=0;
                downcount=0;
            }

       }


}

void lcdinit(void)
{
 e1=low;
 e2=low;
 reset=0;
 reset=1;

 e2=high;                   //关显示
 a0=0;
 wr=0;
 P0=0x0ae;
 e2=low;

 e1=high;
 P0=0x0ae;
 e1=low;

 a0=0;
 e2=high;                /*设置开始显示行*/
 P0=lcd_startl;
 e2=low;

 e1=high;
 P0=lcd_startl;
 e1=low;

 e1=high;               /*关节电模式*/
 P0=0xa4;
 e1=low;

 e2=high;
 P0=0xa4;
 e2=low;

 e1=high;              /*设置列地址*/
 P0=0;
 e1=low;

 e2=high;
 P0=0;
 e2=low;

 e1=high;             /*设置页地址*/
 P0=0xb8;
 e1=low;

 e2=high;
 P0=0xb8;
 e2=low;

 e1=high;            /*设置占空比*/
 P0=0xa9;
 e1=low;

 e2=high;
 P0=0xa9;
 e2=low;

 e1=high;           /*设置输出方向*/
 P0=0xa0;
 e1=low;

 e2=high;
 P0=0xa0;
 e2=low;


 e1=high;         /*设置读修改写特性*/
 P0=0xee;
 e1=low;

 e2=high;
 P0=0xee;
 e2=low;

 e2=high;       //开显示
 P0=0x0af;
 e2=low;


 e1=high;
 P0=0x0af;
 e1=low;
}


/*--------------lcd全屏清零程序----------------*/
/*入口参数:无
  返回参数:无*/

void      clr_fullscreen()
{
 data unsigned char a,b1,c;
 a=0;
 b1=0;
 a0=1;
 lcdinit();
 for(c=0;c<=3;c++)
 {
   a0=0;
   e1=high;             /*设置列地址*/
   P0=0;
   e1=low;
   e2=high;
   P0=0;
   e2=low;
   e1=high;             /*设置页地址*/
   P0=0xb8+c;
   e1=low;
   e2=high;
   P0=0xb8+c;
   e2=low;
   a0=1;
   for(b1=0;b1<=122;b1++)
   {
     if(b1<61)
     {
       e1=high;
       P0=a;
       e1=low;
     }
     else
     {
       e2=high;
       P0=a;
       e2=low;
     }
   }
 }
}
/*--------------lcd全屏清零程序----------------*/


/*--------------lcd字符串写程序----------------*/
/*入口参数:page、row、length、*p
            page:开始显示页地址   page的赋值范围为0~3,2代表最上面一页
            3代表第二页,0代表第三页,1代表最底下的一页。
            row: 开始显示列地址:0~121
            length:显示字符长度
            *p:  要显示的字符    赋值方式为(&数组名)*/
void lcdwrite(unsigned char page,unsigned char row,unsigned char length,unsigned char *p)
{
   data unsigned char temp_page,temp_row,temp_length,*a,b;
   a=p;
   a0=0;
   wr=0;
   temp_row=row;
   temp_page=page;
   temp_length=length;
   if(temp_row<=60)
   {
     e1=high;              /*设置列地址*/
     P0=temp_row;
     e1=low;
   }
   else
   {
     e2=high;
     P0=temp_row-61;
     e2=low;
   }
   e1=high;             /*设置页地址*/
   P0=0xb8+temp_page;
   e1=low;
   e2=high;
   P0=0xb8+temp_page;
   e2=low;
   a0=1;
   for(b=0;b<temp_length;b++)
   {
     if(temp_row+b>=61)
     {
       a0=0;
       wr=0;
       e2=high;
       P0=(temp_row+b)-61;
       e2=low;
       a0=1;
       e2=high;
       P0=*a;
       e2=low;
     }
     else
     {
       e1=high;
       P0=*a;
       e1=low;
     }
     a++;
  }
}
/*--------------lcd字符串写程序----------------*/


/*--------------lcd局部清零程序----------------*/
/*入口参数:page、row、length
            page:开始显示页地址   page的赋值范围为0~3,2代表最上面一页
            3代表第二页,0代表第三页,1代表最底下的一页。
            row: 开始显示列地址:0~121
            length:显示字符长度*/

void lcd_partclr(unsigned char page,unsigned char row,unsigned char length)
{
  data unsigned char temp_page,temp_row,temp_length,a,b;
  a=0x00;
  a0=0;
  wr=0;
  temp_row=row;
  temp_page=page;
  temp_length=length;
  if(temp_row<=60)
  {
     e1=high;              /*设置列地址*/
     P0=temp_row;
     e1=low;
  }
  else
  {
     e2=high;
     P0=temp_row-61;
     e2=low;
  }
  e1=high;             /*设置页地址*/
  P0=0xb8+temp_page;
  e1=low;
  e2=high;
  P0=0xb8+temp_page;
  e2=low;
  a0=1;
  for(b=0;b<temp_length;b++)
  {
    if(temp_row+b>=61)
    {
      a0=0;
      wr=0;
      e2=high;
      P0=(temp_row+b)-61;
      e2=low;
      a0=1;
      e2=high;
      P0=a;
      e2=low;
    }
    else
    {
      e1=high;
      P0=a;
      e1=low;
    }
  }
}
/*--------------lcd局部清零程序----------------*/


/*--------------lcd汉字写程序----------------*/
/*入口参数:page、row、length
            page:开始显示页地址   page的赋值范围为0~3,2代表最上面一页
            3代表第二页,0代表第三页,1代表最底下的一页。
            row: 开始显示列地址:0~121
            length:显示字符长度
            *p:  要显示的汉字    赋值方式为(&数组名)*/

void lcdwrite_chinese(unsigned char page,unsigned char row,unsigned char length,unsigned char*p)
{
   data unsigned char temp_page,temp_row,temp_length,*a,b,c;
   a=p;
   a0=0;
   wr=0;
   temp_row=row;
   temp_page=page;
   temp_length=length;
   if(temp_row<=60)
   {
     e1=high;              /*设置列地址*/
     P0=temp_row;
     e1=low;
   }
   else
   {
     e2=high;
     P0=temp_row-61;
     e2=low;
   }

   e1=high;             /*设置页地址*/
   P0=0xb8+temp_page;
   e1=low;
   e2=high;
   P0=0xb8+temp_page;
   e2=low;
   a0=1;
   for(c=0;c<2;c++)
   {
     a0=1;
     for(b=0;b<temp_length;b++)
     {
       if(temp_row+b>=61)
       {
     	 a0=0;
         wr=0;
         e2=high;
         P0=(temp_row+b)-61;
         e2=low;
         a0=1;
         e2=high;
  	 P0=*a;
         e2=low;
       }
       else
       {
         e1=high;
  	 P0=*a;
         e1=low;
       }
      a++;
   }
   wr=0;
   a0=0;
   e1=high;             /*设置页地址*/
   P0=(0xb8+temp_page)+1;
   e1=low;
   e2=high;
   P0=(0xb8+temp_page)+1;
   e2=low;
   if(temp_row<=60)
   {
       e1=high;              /*设置列地址*/
       P0=temp_row;
       e1=low;
   }
   else
   {
      e2=high;
      P0=temp_row-61;
      e2=low;
   }
  }
}
/*--------------lcd汉字写程序----------------*/

void lcdwrite_chineseN(unsigned char page,unsigned char row,unsigned char unit,unsigned char*p)
{
  data unsigned char a;
  for(a=1;a<=unit;a++)
  {
   length=13;
   lcdwrite_chinese(page,row,length,p);
   row+=13;
   p+=26;
   }
}

/*--------------lcd光标写程序----------------*/
/*入口参数:page、row、edit_state
            page:开始显示页地址   page的赋值范围为0~3,2代表最上面一页
                  3代表第二页,0代表第三页,1代表最底下的一页。
            row: 开始显示列地址:0~121
            edit_state:编辑状态选择位
                        1:表示编辑状态
                        0:表示查看状态
  注意:箭头为8*6的字符点阵,左边和右边都没有空格,在

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -