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

📄 lcd_inf.c

📁 CGG12864串行控制液晶 该液晶能修改参数显示为黑字与白字.能改变倒反显示方试
💻 C
字号:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "lcd_inf.h"
#include "img.h"
#define uch unsigned char
#define uint unsigned int
extern uch shu[];
extern uch or_by;
void shu_s(unsigned int x,unsigned char *y);//把一个字拿来分为5个数
void dlay(void){		//短延时
NOP();NOP();NOP();
return;
  }
void w_com(uch a){		//写左右屏指令
  DDRD=0xff;
  while(busy());
  s_b(cont,CS1);
  s_b(cont,CS2);
  c_b(cont,RW);
  c_b(cont,RS);
  DATA=a;
  s_b(cont,E);
  dlay();
  c_b(cont,E);
  dlay();
  }
void w_by(uch x,uch y){//写左右屏显示数据,0为左屏1为右屏
    DDRD=0xff;
 if(y==1){s_b(cont,CS2);c_b(cont,CS1);}
 else{s_b(cont,CS1);c_b(cont,CS2);}
  s_b(cont,RS);
  c_b(cont,RW);
  DATA=x;
  s_b(cont,E);
  //dlay();
  c_b(cont,E);
  //dlay();
  }
uch r_by(uch x){		//读屏数据,X=0读左屏x=1读右屏
  while(busy());
  DDRD=0;
 if(x==1){
    s_b(cont,CS2);
	c_b(cont,CS1);
	}
 else{
    s_b(cont,CS1);
	c_b(cont,CS2);
	}
 s_b(cont,RS);
 s_b(cont,RW);NOP();NOP();
 s_b(cont,E);NOP();NOP();
 c_b(cont,E);NOP();NOP();
 s_b(cont,E);NOP();NOP();
 
 return PIND;
 }
uch r_s(void){			//读LCD状态
 DDRD=0;
 s_b(cont,CS1);
 s_b(cont,CS2);
 s_b(cont,RW);
 c_b(cont,RS);
 s_b(cont,E);
 dlay();
 c_b(cont,E);
 dlay();
 return PIND;}
uch busy(void){		//判断忙标志 忙返回1 空闲返回0;
 uch x;
 x=r_s();
 if(x&0x80)return 1;
 else return 0;
 }
void xyini(uch x,uch y){//设置坐标
  while(busy());
  x&=0x3f;
  x|=0x40;
  w_com(x);
  while(busy());
    y&=0x07;
    y|=0xb8;
  w_com(y);
}
void openlcd(void){	//开LCD
 while(busy());
 w_com(0x3f);
 }
void offlcd(void){ 	//关LCD
  while(busy());
  w_com(0x3e);
  }

void satline(uch x){	//设置起始行
  x&=0x3f;
  x|= 0xc0;
  while(busy());
  w_com(x);
  }
void dis(const uch *bmp){//显示一个128*64的图片
uch x,z,y,i;
uint zz=0;
xyini(0,0);
for(y=0;y<8;y++)
  { 
    for(z=0;z<128;z++)
	{
	 if(z>63){i=1;xyini(z-64,y);}
	  else {xyini(z,y);i=0;}
	  x=pgm_read_byte(bmp+zz);zz++;
	  w_by(x,i);
	  }
   }
}
void dis_tu(uch x,uch y,uch w,uch h,const uch *bmp){//x,坐标X,Y,坐标Y,W图片宽度,H图片高度BMP 指向的图片a=1时反色显示b=1时清除屏幕
  uch i=0;
  uch yy;
  uch bmp_x;
  uint bmp_w=0;
     for(;h!=0;h--)
      { 
        for(yy=0;yy<w;yy++)
		  { 
		    bmp_x=yy+x;
		    if(bmp_x==128)break;//如果写到了边,就退出本次循环
			if(bmp_x>63)
			  {bmp_x-=64;i=1;}
			else {i=0;}
			xyini(bmp_x,y);
			bmp_x=*(bmp+yy+bmp_w);//pgm_read_byte(bmp+yy+bmp_w);
			w_by(bmp_x,i);
			}
        y++;
		if(y==8)return;
		bmp_w+=w;
     }
  }
void wef(uch z,uch i){//显示一个8*6的字符
//输出一个8*6的字母 z为字符号,a为正反显标志i=0,第一屏i=1为第二屏h为参与显示的*/
   uch xx;
   uch bmp_x;
   		for(xx=0;xx<5;xx++)
		  { 
	       bmp_x=char85[z][xx];
	       w_by(bmp_x,i);
		  }
   }
static uint jindu[8]={
0x0000,0x0080,0x00a0,0x00a8,
0x00aa,0x80aa,0xa0aa,0xa8aa,};
void jindu_dis(uch a){
  uch x;
  uint y;
  y=jindu[a];
  for(x=0;x<19;x++){
    xyini(x+41,4);
	w_by((y&0xff00)>>8,1);
    xyini(x+41,5);
	w_by(y&0xff,1);
	}
}

⌨️ 快捷键说明

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