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

📄 lcd2.c

📁 12864液晶显示屏结合周立功7290按键显示的具体例子
💻 C
字号:
/*
引脚连接
DATA=P0,RS=P2.0,RW=P2.1,E=P2.2,PSB=P2.3,RES=P2.4
*/

#include <reg51.h>
#include <intrins.h>
#include<lcdb.h>
#include<shuzi.h>

sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;
sbit PSB = P2^3;          //串并口选择
sbit RES = P2^4;


#define FIRST_ADDR 0      //定义字符/汉字显示起始位置


//延时子程序
void delay(unsigned int t)
{  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++)
         ;
}

//测忙
void chk_busy()
{  RS=0;
   RW=1;
   E=1;
   while((P0&0x80)==0x80);
   E=0;
}

//读数据
unsigned char lcdrd()
{  unsigned char i;
   P3=0xFB;
   _nop_();
   E=1;
   delay(5);
   i=P0;
   _nop_();
   E=0;
   return i;
}

//写数据
void lcdwd(unsigned char dispdata)
{  chk_busy();
   _nop_();
   RS=1;
   RW=0;
   E=1;
   P0=dispdata;
   delay(5);
   _nop_();
   E=0;
   _nop_();
   P0=0xff;
}

//写指令代码
void lcdwc(unsigned char cmdcode)
{  chk_busy();
   _nop_();
   RS=0;
   RW=0;
   E=1;
   P0=cmdcode;
   delay(5);
   _nop_();
   E=0;
   _nop_();
   P0=0xff;
}

//初始化
void lcdreset()
{  delay(2000);
   lcdwc(0x30);       //选择基本指令集
   lcdwc(0x30);       //选择8bit数据流
   delay(5);
   lcdwc(0x0c);       //开显示(无游标、不反白)
   delay(5);
   lcdwc(0x01);       //清除显示,并且设定地址指针为00H
   delay(5);
   lcdwc(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}

void hzkdis(unsigned char code *s)
{  while(*s>0)
   {  lcdwd(*s);
      s++;
      delay(500);
   }
}



//整屏显示
//当ii=0时显示上面128×32
//当ii=8时显示下面128×32
void lcdfill(unsigned char disdata)
{  unsigned char x,y,ii;
   for(ii=0;ii<9;ii+=8)
      for(y=0;y<0x20;y++)
         for(x=0;x<8;x++)
         {  lcdwc(0x36);
            lcdwc(y+0x80);        //行地址
            lcdwc(x+0x80+ii);     //列地址
            lcdwc(0x30);
            lcdwd(disdata);
            lcdwd(disdata);
         }
}

//在任意位置显示任意图画 y1,x1,y2,x2为图画坐标,行数0-63,列数0-7, disdata为显示数据 
void xiansi(unsigned char y1,unsigned char x1,unsigned char y2,unsigned char x2,unsigned char *disdata)  
{  unsigned char x,y;
      for(y=y1;y<=y2;y++)
         for(x=x1;x<=x2;x++)
         {  lcdwc(0x36);
			   if(y<32)
            {  lcdwc(y+0x80);        //行地址
               lcdwc(x+0x80);        //列地址
				}
				else                     //显示下半部分
				{
				   lcdwc(y-32+0x80);      //行地址
					lcdwc(x+0x80+8);       //列地址
				}
            lcdwc(0x30);
  				lcdwd(disdata[2*(x2-x1+1)*(y-y1)+2*(x-x1)]);  //
            lcdwd(disdata[2*(x2-x1+1)*(y-y1)+2*(x-x1)+1]); //

			 }
}

//y为显示的行,x为显示的列,x1,x2为显示的数字
void shuzi(unsigned char y,unsigned char x,unsigned char x1,unsigned char x2)   
{
   lcdwc(0x30);
   lcdwc(dizhi[y]+x);
	if(x1<=9)
   lcdwd(number[x1]); 
   else lcdwd(32);
   if(x2<=9)
   lcdwd(number[x2]);//执行这2个语句DDRAM地址计数器自动加1;
	else lcdwd(32);
}

//显示任意字符   y为显示的行,x为显示的列,s为显示的字符
void zifu(unsigned char y,unsigned char x,unsigned char code *s)   
{
   unsigned char i=0;
   lcdwc(0x30);
   lcdwc(dizhi[y]+x);
   x=x*2;
	while(*s>0)
   {  lcdwd(*s);
      s++;
      x++;
		if(x==16)
      lcdwc(dizhi[y]);
   }
}



⌨️ 快捷键说明

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