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

📄 mbm12864lcd 090430.c

📁 PIC18F44K20开发的液晶屏程序:宏泰128*64液晶;10个按键;每个按键配个微型LED指示灯;仿照西门子做的
💻 C
📖 第 1 页 / 共 4 页
字号:
          else {lcd_pro_BACKLIGHT=1;LCD_BACKLIGHT=1;}
          if((indata_buf[4]==0)&&(lcd_pro_REVERSE!=0))
          {lcd_pro_REVERSE=0;write_lcd_ordor(LCD_DISPLAY_REV_NOR);}
          if((indata_buf[4]!=0)&&(lcd_pro_REVERSE==0))
          {lcd_pro_REVERSE=1;write_lcd_ordor(LCD_DISPLAY_REV_REV);}       
         }
      }
    else
    if((indata_buf[0]=='W')&&(indata_buf[1]<=WIN_NO_MAX))
      {
       windows_show_no=indata_buf[1];


       display_renew_Flag=1;
      }
    display_data_renew_flag=0;
   }
}
//******************************************************
//显示程序
//根据显示数据刷新显示屏
//******************************************************
void display_prom()
{
 if(display_renew_Flag==1)
   {
    display_renew_Flag==0;
    time_redisplay=TIME_5sVAL;
   }
}
//******************************************************
//LCD指令写入
//******************************************************
void write_lcd_ordor(unsigned char data)
{
 LCD_DATA_PORT=data;
 LCD_RW=0;
 LCD_RS=0;
 LCD_E=1;
 asm("NOP");
 LCD_E=0;
}
//******************************************************
//LCD显示数据写入
//******************************************************
void write_lcd_data(unsigned char data)
{
 LCD_DATA_PORT=data;
 LCD_RW=0;
 LCD_RS=1;
 LCD_E=1;
 asm("NOP");asm("NOP");asm("NOP");
 LCD_E=0;
}
//******************************************************
//LCD显示数据读出:读出两次如果不相等重读,以保证读出数据可靠性
//******************************************************
unsigned char read_lcd_data(void)
{
 char i1,i2;
 TRISD=0b11111111;             //设置D口为输入
 LCD_DATA_PORT==0x00;          //将输出口写入0xff
 asm("NOP");asm("NOP");asm("NOP");
 do{
    LCD_RW=1;
    LCD_RS=1;
    LCD_E=1;
    asm("NOP");asm("NOP");asm("NOP");
    i1=LCD_DATA_PORT;
    asm("NOP");
    LCD_E=0;
    asm("NOP");asm("NOP");asm("NOP");
    LCD_RW=1;
    LCD_RS=1;
    LCD_E=1;
    asm("NOP");asm("NOP");asm("NOP");
    i2=LCD_DATA_PORT;
    asm("NOP");
    LCD_E=0;
   }
 while(i1!=i2);
 TRISD=0b00000000;             //设置D口为输出
 asm("NOP");asm("NOP");asm("NOP");
 return(i1);
}
//******************************************************
//设置LCD当前列地址
//******************************************************
void set_lcd_column(unsigned char column_address)
{
 //宏泰液晶屏 起始显示地址为1 有别其他显示屏,为保持与其他液晶屏兼容,列地址+1
 //程序编制时列仍然0--127
 column_address++;
 LCD_DATA_PORT=(((column_address>>4)&0x0f)|0x10);
 LCD_RW=0;
 LCD_RS=0;
 LCD_E=1;
 asm("NOP");
 LCD_E=0;
 asm("NOP");
 LCD_DATA_PORT=(column_address&0x0f);
 LCD_RW=0;
 LCD_RS=0;
 LCD_E=1;
 asm("NOP");
 LCD_E=0;
}
//******************************************************
//设置LCD当前页地址
//******************************************************
void set_lcd_page(unsigned char page_address)
{
 LCD_DATA_PORT=((page_address&0x0f)|0xb0);
 asm("NOP");
 LCD_RW=0;
 LCD_RS=0;
 LCD_E=1;
 asm("NOP");
 LCD_E=0;
}
//******************************************************
//在当前位置写入单个字符(数字或符号)
//char s为符号或数字的ASCI2码 
//例如:putchar('c');putchar('1');putchar(NOP);输出空 
//    putchar(12);输出第X符号
//注意写1 应该putchar('1');而不是putchar(1);
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void putchar(unsigned char s)
{ 
 char i;
 const char *p;  
 p=fuhao_ku;
 p=p+2*HZFH_MOD*(s); 
 set_lcd_page(lcd_page-1);
 for(i=0;i<HZFH_MOD;i++)
   {
    if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
    else write_lcd_data((*p++)^0xff);
   }
 set_lcd_page(lcd_page);
 set_lcd_column(lcd_column);
 for(i=0;i<HZFH_MOD;i++)
   {
    if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
    else write_lcd_data((*p++)^0x1f);
   }
 lcd_column=(lcd_column+HZFH_MOD);
}
//******************************************************
//在当前位置写入半个符号
//char s为符号的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void putHALFchar(unsigned char s)
{ 
 char i;
 const char *p; 
 p=half_fuhao_ku;
 p=p+HZFH_MOD*(s); 
 set_lcd_page(lcd_page);
 set_lcd_column(lcd_column);
 for(i=0;i<HZFH_MOD;i++)
   {
    if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
    else write_lcd_data((*p++)^0x1f);
   }
 lcd_column=(lcd_column+HZFH_MOD);
}
//******************************************************
//在X Y位置写入一个字符串(数字符号)字符串以\0空符号结束
//符号库中ASCI2码偏移位置与标准  0-0x20为自定义符号
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void outtextxy(unsigned char column_address,unsigned char page_address,unsigned char *s)
{ 
 char i;
 const char *p;
 do
   {   
    p=fuhao_ku;
    p=p+2*HZFH_MOD*(*s++); 
    set_lcd_page(page_address-1);
    set_lcd_column(column_address);
    for(i=0;i<HZFH_MOD;i++)
      {
       if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
       else write_lcd_data((*p++)^0xff);
      }
    set_lcd_page(page_address);
    set_lcd_column(column_address);
    for(i=0;i<HZFH_MOD;i++)
      {
       if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
       else write_lcd_data((*p++)^0x1f);
      }
    column_address=(column_address+HZFH_MOD);
   }
 while(*s!='\0');
 lcd_page=page_address;lcd_column=column_address+HZFH_MOD;
}
//******************************************************
//在当前位置写入一个汉字
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void putHZtext(unsigned char s)
{ 
 char i;
 const char *p;
 p=hzk_ku;
 p=p+4*HZFH_MOD*s;
 set_lcd_page(lcd_page-1);
 set_lcd_column(lcd_column);
 for(i=0;i<(2*HZFH_MOD);i++)
   {
  if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
    else write_lcd_data((*p++)^0xff);
   }
 set_lcd_page(lcd_page);
 set_lcd_column(lcd_column);
 for(i=0;i<=(2*HZFH_MOD);i++)
   {
    if(lcd_write_MOD==LCD_WR_MODE_NOR) write_lcd_data(*p++);
    else write_lcd_data((*p++)^0x1f);
   }
 lcd_column=(lcd_column+2*HZFH_MOD);
}
//******************************************************
//在x y位置写入一个2字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out2HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2);
}
//******************************************************
//在x y位置写入一个3字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out3HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3);
}
//******************************************************
//在x y位置写入一个4字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out4HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
}
//******************************************************
//在x y位置写入一个5字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out5HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
     unsigned char s5)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
 putHZtext(s5);
}
//******************************************************
//在x y位置写入一个6字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out6HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
     unsigned char s5,unsigned char s6)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
 putHZtext(s5); putHZtext(s6);
}
//******************************************************
//在x y位置写入一个7字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out7HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
     unsigned char s5,unsigned char s6,unsigned char s7)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
 putHZtext(s5); putHZtext(s6);putHZtext(s7);
}
//******************************************************
//在x y位置写入一个8字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out8HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
     unsigned char s5,unsigned char s6,unsigned char s7,unsigned char s8)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
 putHZtext(s5); putHZtext(s6);putHZtext(s7); putHZtext(s8);
}
//******************************************************
//在x y位置写入一个9字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out9HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
     unsigned char s5,unsigned char s6,unsigned char s7,unsigned char s8,
     unsigned char s9)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
 putHZtext(s5); putHZtext(s6);putHZtext(s7); putHZtext(s8); putHZtext(s9);
}
//******************************************************
//在x y位置写入一个10字汉字串
//char s 汉字的代码
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void out10HZtextxy(unsigned char column_address,unsigned char page_address,
     unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,
     unsigned char s5,unsigned char s6,unsigned char s7,unsigned char s8,
     unsigned char s9,unsigned char s10)
{ 
 lcd_page=page_address;lcd_column=column_address;
 putHZtext(s1); putHZtext(s2); putHZtext(s3); putHZtext(s4);
 putHZtext(s5); putHZtext(s6);putHZtext(s7); putHZtext(s8);
 putHZtext(s9); putHZtext(s10);
}
//******************************************************
//在x y位置写入百分数指示条
//char bar_length指示条长度, char percent 百分数
//||||||||||||||
//-------------86%-------------
//||||||||||||||
//全局变量lcd_page lcd_column行列自动变化
//******************************************************
void draw_bar_xy(unsigned char column_address,unsigned char page_address,
     unsigned char bar_length,unsigned char percent)
{ 
 char i,j,zimo_temp;
 char s[4];  //100%
 const char *p;
 sprintf(s,"%3d%%",percent);
 //sprintf(s,"%3d.%2d%%",(percent/100),(percent-100*(percent/100)));
 //if((percent-100*(percent/100))<10) str[4]='0';
 lcd_page=page_address;
 lcd_column=column_address;
 set_lcd_page(lcd_page);
 set_lcd_column(lcd_column);
 percent=(char)((int)bar_length*percent/100);//折算
 if(percent>bar_length) percent=bar_length;
 for(i=0;i<bar_length;i++)
   {
    if(i<percent) write_lcd_data(0x1f);
    else  write_lcd_data(0x00);
   }
 set_lcd_page(lcd_page-1);
 set_lcd_column(lcd_column);
 for(i=0;i<bar_length;i++)
   {
    if(i<percent)
      {
       if((i>(column_address+bar_length/2-7*HZFH_MOD))&&(i<(column_address+bar_length/2-3*HZFH_MOD))) write_lcd_data(0xff);
       else write_lcd_data(0xbf);
      }
    else
      {
       if((i>(column_address+bar_length/2-7*HZFH_MOD))&&(i<(column_address+bar_length/2-3*HZFH_MOD))) write_lcd_data(0x00);
       else write_lcd_data(0x40);
      }
   }
 write_lcd_ordor(LCD_MODIFL_READ_ON);
 lcd_page=(page_address);
 lcd_column=(column_address+bar_length/2-3*HZFH_MOD);
 for(j=0;j<4;j++)
   {

⌨️ 快捷键说明

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