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

📄 lcd.c

📁 12864接口程序 修改一下接口就可以在自己的设计中使用了
💻 C
字号:
 #include <reg51.h> 
#include <intrins.h> 
/*定义管脚*/ 
sbit RS = P2^7; 
sbit RW = P2^6; 
sbit E = P2^5; 
sbit RES = P2^2; 
sbit PSB = P2^4;

 sbit	EOC=P
 sbit   start=P3^1;
 sbit   clk=P3^5;

#define Lcd_Bus          P0                        //MCU P2<------> LCM 	;
#define FIRST_ADDR       0                         //定义字符/汉字显示起始位置 	 ;
#define uint             unsigned int
unsigned int disbuff1[]={0,0,0,0,0} ;            // 显示缓存 1
unsigned char disbuff2[];		                   //显示缓存 2  
int a=254;										 
int x=0,h=0;							     //行车距离   高度  
int ad=0;
 
void delay(uint t)  	          //延时程序   ;
{
	int i,j;
	for(i=0;i<t;i++)
		for(j=0;j<10;j++);
}

 void adc()
{	//P0=0xff;
	start=1;
	delay(1000);
	start=0;
	ad=P1;
}
//=========T0初始化函数=============			
void init(void)
{
	EA=1;
	ET1=1;
	TMOD=0X10;
	TH1=(65536-200)/256;
	TL1=(65536-200)%256;
	TR1=1;
}
void timer1(void) interrupt 2
{  
	TH0=(65536-200)/256;
	TL0=(65536-200)%256;
	clk=~clk;
}
void check_busy()                  //查忙子程序 不忙跳出	  ;
{
	RS=0;
	RW=1;
	E=1;
	Lcd_Bus=0xff;
	while((Lcd_Bus&0x80)==0x80)	;
	E=0;
}

void write_comd	(uint cmdcode )		 //写指令到LCD ,E下降沿送数据	   ;
 {
 	check_busy();
	RS=0;
	RW=0;
	E=1;
	Lcd_Bus=cmdcode;
	delay(5);
	E=0;
	delay(5) ;                     //延时使LCD有时间处理数据 ;
}
 
void write_data(uint cmddata)		 //写数据到LCD,
{
	check_busy();
	RS=1;
	RW=0;
	E=1;
	Lcd_Bus=cmddata;
	delay(5);
	E=0;
	delay(5);
} 
void lcdinit()
{
	
	write_comd(0x30);	           //8位数据 基本指令集 ;
	delay(5);
	write_comd(0x0c);			   //开显示 无游标 不反白 ;
	delay(5);
    write_comd(0x01);              //清屏   AC置零 ;  
	delay(5);
	write_comd(0x06);              //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位     
}

void hzkdis(unsigned char code *s)   //汉字库显示  
{  while(*s>0) 
   {  write_data(*s); 
      s++; 
      delay(10); 
   } 
} 

void ceshi()
{
write_comd(0x01);//清除显示,并且设定地址指针为00H 
delay(5); 
a=11;
write_comd(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示) 
hzkdis("行车距离:"); 
 delay(1000);
write_comd(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示) 
hzkdis("              CM"); 
  delay(1000);
write_comd(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示) 
hzkdis("高    度:"); 
   delay(8000);
write_comd(0x98);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示) 
hzkdis("               M"); 
delay(8000);	 


}

 void display(uint a,unsigned char b,unsigned long c) 	   //显示函数  	 显示位置为第a行第b位 显示c所代表的数   		 
 {
	int cc,i;
 	int m,n,o,p,q;
    uint disaddr=0x80 ;
	if(a==2) disaddr=0x90+b;
	else if(a==3) disaddr=0x88+b ;
	else if(a==4) disaddr=0x98+b ;
	else disaddr=0x80+b	;
	cc=(int)(c*100) ;
	m=cc/10000;
	n=(cc%10000 )/1000;
	o=(cc%1000)/100;
	p=(cc%100)/10;
	q=(cc%10);
    disbuff1[0]=(m+48);         //存储时 变为ASCII码 
	disbuff1[1]=(n+48);
	disbuff1[2]=(o+48);
	disbuff1[3]=(p+48);
	disbuff1[4]=(q+48);	                                                                                                                                                                                                                                                      
   write_comd(disaddr);
   for(i=0;i<5;i++)
   {
    write_data(disbuff1[i]);
		
	}		
 }
 void main()
 {	//unsigned char i; 
 
   while(1) 
   { 
    PSB=0;
    delay(300);
    PSB=1;        
     RW=0; 
      lcdinit();                    //初始化LCD屏 
     // CGRAM();                         
     ceshi();   				 //显示测试字样 
  
  
   display(2,4,x);
	 delay(10000); 
   display(4,4,h);                
     delay(10000);
	  
   while(1) 
     {	
      adc();
 	  display(2,4,ad);
     }
   }

 }

⌨️ 快捷键说明

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