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

📄 51

📁 51单片机大量源码
💻
字号:
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA P0 //LCD12864数据线
sbit RS=P2^7; // 数据\指令 选择
sbit RW=P2^6; // 读\写 选择
sbit EN=P2^5; // 读\写使能
sbit cs1=P2^2; // 片选1
sbit cs2=P2^1; // 片选2	
/*
sbit CS1=P2^2;
sbit CS2=P2^1;
sbit RST=P2^0;
sbit DI=P2^7;
sbit RW=P2^6;
sbit ALE=P2^5;
*/
/********************************/
/*  定义中文字库		*/
/********************************/
uchar code Hzk[]={
/*--  文字:  相  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x08,0x04,0x03,0x00,0xFF,0x00,0x03,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00,

/*--  文字:  信  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x00,0x04,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x04,0x00,
0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xF9,0x49,0x49,0x49,0x49,0x49,0xF9,0x00,0x00,

/*--  文字:  自  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,

/*--  文字:  己  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,

/*--  文字:  超  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x48,0x48,0x48,0xFF,0x48,0x48,0x42,0xA2,0x9E,0x82,0xA2,0xC2,0xBE,0x00,0x00,
0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x40,0x4F,0x48,0x48,0x48,0x48,0x4F,0x40,0x00,

/*--  文字:  越  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x48,0x48,0xFF,0x48,0x48,0x00,0xF8,0x08,0x08,0xFF,0x08,0x89,0x6A,0x00,0x00,
0x80,0x7E,0x10,0x3F,0x44,0x44,0x40,0x4F,0x44,0x50,0x49,0x46,0x49,0x5C,0x40,0x00,

/*--  文字:  自  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,

/*--  文字:  己  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
/*-- 文字:  ☆  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0xC0,0x40,0x40,0x40,0x60,0x1C,0x03,0x1C,0x60,0x40,0x40,0x40,0xC0,0x40,0x00,
0x00,0x00,0x41,0x39,0x26,0x10,0x10,0x08,0x08,0x10,0x26,0x39,0x41,0x00,0x00,0x00,
/*--  文字:  *  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x40,0x40,0x80,0x80,0x00,0xFC,0x00,0x80,0x80,0x40,0x40,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x08,0x04,0x03,0x01,0x03,0x04,0x08,0x10,0x00,0x00,0x00,0x00,
};
 /*状态检查,LCD是否忙*/
void CheckState()		
{uchar dat;//状态信息(判断是否忙)
 RS=0; // 数据\指令选择,D/I(RS)=“L” ,表示 DB7∽DB0 为显示指令数据 
 RW=1; //R/W=“H” ,E=“H”数据被读到DB7∽DB0 
 do{DATA=0x00;
    EN=1;	//EN下降沿
	dat=DATA;
    EN=0;
    dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
    }while(!(dat==0x00));
}
 /*写命令到LCD中*/
SendCommandToLCD(uchar com)
{CheckState();//状态检查,LCD是否忙
 RS=0;	 //向LCD发送命令。RS=0写指令,RS=1写数据
 RW=0;//R/W=“L” ,E=“H→L”数据被写到 IR 或 DR 
 DATA=com;	 //com :命令
 EN=1;//EN下降沿
 EN=0;
}
/*设置页 0xb8是页的首地址*/
void SetLine(uchar page)	
{page=0xb8|page; //1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
 SendCommandToLCD(page);
}
 /*设定显示开始行,0xc0是行的首地址*/
void SetStartLine(uchar startline) 	   
{startline=0xc0|startline; //1100 0000
 SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
}
/*设定列地址--Y 0-63 ,0x40是列的首地址*/
void SetColumn(uchar column)	
{column=column &0x3f; //column最大值为64,越出 0=<column<=63
 column= 0x40|column; //01xx xxxx
 SendCommandToLCD(column);
}
 /*开关显示,0x3f是开显示,0x3e是关显示*/
void SetOnOff(uchar onoff)	   
{onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
 SendCommandToLCD(onoff);
}
/*写显示数据 */
void WriteByte(uchar dat)	
{CheckState();//状态检查,LCD是否忙
 RS=1; //RS=0写指令,RS=1写数据
 RW=0;////R/W=“L” ,E=“H→L”数据被写到 IR 或 DR 
 DATA=dat;//dat:显示数据
 EN=1; //EN下降源
 EN=0;
}
/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/
void SelectScreen(uchar screen)	  
{switch(screen)
 {case 0: cs1=1;//全屏
  cs2=1; 
  break; 
  case 1: cs1=1;//左屏 
  cs2=0;
  break;
  case 2: cs1=0;//右屏
  cs2=1; 
  break;
 }
}
 /*清屏screen: 0-全屏,1-左屏,2-右屏*/
void ClearScreen(uchar screen)	  
{uchar i,j;
 SelectScreen(screen);
 for(i=0;i<8;i++)	 //控制页数0-7,共8页
 {SetLine(i);
  SetColumn(0);
  for(j=0;j<64;j++)	   //控制列数0-63,共64列
  {WriteByte(0x00);} //写点内容,列地址自动加1
 }
}
/*延时程序*/
void delay(uint z)		
{uint i,j;
 for(i=0; i<z; i++)
 for(j = 0; j < 110; j++);
}
/*初始化LCD*/
void InitLCD() 	  
{CheckState();
 SelectScreen(0);
 SetOnOff(0); //关显示
 SelectScreen(0);
 SetOnOff(1); //开显示
 SelectScreen(0);
 ClearScreen(0);//清屏
 SetStartLine(0); //开始行:0
}
/*显示全角汉字*/
void Display(uchar ss,uchar page,uchar column,uchar number)
{int i;	//选屏参数,page选页参数,column选列参数,number选第几汉字输出
 SelectScreen(ss);
 column=column&0x3f;
 SetLine(page);	//写上半页
 SetColumn(column); //控制列
 for(i=0;i<16;i++)  //控制16列的数据输出
 {WriteByte(Hzk[i+32*number]);} //i+32*number汉字的前16个数据输出
 SetLine(page+1);		 //写下半页
 SetColumn(column);	   //控制列
 for(i=0;i<16;i++)	  //控制16列的数据输出
 {WriteByte(Hzk[i+32*number+16]);}//i+32*number+16汉字的后16个数据输出
} 
/*显示半角汉字和数字和字母
void Displayen(uchar ss,uchar page,uchar column,uchar number)
{uint i;//选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
 SelectScreen(ss);
 column=column&0x3f;
 SetLine(page);	//写上半页
 SetColumn(column);
 for(i=0;i<8;i++)
 {WriteByte(Ezk[i+16*number]);}
 SetLine(page+1);	//写下半页
 SetColumn(column);
 for(i=0;i<8;i++)
 {WriteByte(Ezk[i+16*number+8]);}
}*/  
/*主函数*/
void main()
{uint i,j,n=0;
 InitLCD();//初始12864
 while(1)
 {for(i=0;i<2;i++)//显示边上的☆和*
  {for(j=1;j<3;j++)
   {Display(j,0,i*32+n*16,8);
	Display(j,6,i*32+(!n)*16,8);
	Display(j,0,i*32+(!n)*16,9);
	Display(j,6,i*32+n*16,9);
   }
  }
  Display(1,4-2*n,0,8);
  Display(2,2+2*n,48,8);
  Display(1,2+2*n,0,9);
  Display(2,2+2*(!n),48,9);
  //显示汉字
  for(i=0;i<2;i++)  
  {Display(1,2,32+i*16,i);/*Display(选屏参数(cs1,cs2),pagr选页参数,column选列参数,number选第几汉字输出)*/
   Display(1,4,32+i*16,i+4);
   Display(2,2,0+i*16,i+2);
   Display(2,4,0+i*16,i+6);
  }
  n=!n;
  delay(255);
  delay(255);
 }
}

⌨️ 快捷键说明

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