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

📄 5.2.3-2.c

📁 《单片机C语言编程与实例的代码.rar
💻 C
字号:
#include<reg51.h>
#include<stdlib.h>
#define uchar unsigned char
uchar data Column;				/*定义"列"变量*/
uchar data Page;
sbit D_I=P3^2;
sbit R_W=P3^3;
sbit E=P3^4;
sbit CSA=P3^1;
sbit CSB=P3^0;
sbit BUSY=P1^7;
sbit Page_4=P1^4;
char code Hanzi[4][32]=
{
  0x40,0xB0,0x92,0x96,0x9A,0x92,0xF2,0x9E,0x92,0x91,0x99,0x95,0x91,0x50,0x30,0x00,	/*爱*/
  0x00,0x00,0x40,0x30,0x8C,0x83,0x46,0x2A,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,0x00,
  0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0xFF,0x20,0x22,0xAC,0x20,0x30,0x20,0x00,	/*我*/
  0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,
  0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,	/*中*/
  0x00,0x03,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,
  0x00,0x40,0x20,0x10,0xFC,0x03,0x40,0x20,0x10,0xFF,0x08,0x04,0x06,0xC0,0x00,0x00,	/*华*/
  0x04,0x04,0x04,0x04,0x05,0x04,0x04,0xFF,0x04,0x04,0x05,0x05,0x05,0x05,0x04,0x00
};
void Inquire_Busy_L();			/*左半屏查询是否"忙"*/
void Send_Dat_L(uchar d);			/*送左半屏指令*/
void Inquire_Busy_R();			/*右半屏查询是否"忙"*/
void Send_Dat_R(uchar d);			/*送右半屏指令*/
void Clear();					/*清屏*/
void Ini();						/*初始化*/
void Send_Dat_Disp_L(uchar d);		/*送左半屏显示*/
void Send_Dat_Disp_R(uchar d);		/*送右半屏显示*/
void Lcd_Disp(char *p);			/*显示*/
void Hanzi_Disp();
void Delay();

/***************************************主程序******************************************/
void main()
{
 Delay();Delay();Delay();			/*延时*/
 IE=0x81;TCON=0x00;
 Ini();						/*初始化*/
 Clear();						/*清屏*/
 Hanzi_Disp();					/*显示汉字*/
}

/*********************************查询左半屏是否"忙"子程序******************************/
void Inquire_Busy_L()
{
   R_W=1; R_W=1;D_I=0;D_I=0;	/*读取状态字*/
   CSA=0;CSA=0; CSB=1;CSB=1;	/*选左半屏*/
 Loop:
   P1=0xFF;
   E=1;E=1;					/*使能*/
   E=0;E=0;
   if(BUSY){goto Loop;}
   CSA=1; CSA=1;				/*是CSA为高电平,为选择左半区作准备*/
   D_I=1;D_I=1; R_W=1;R_W=1;	/*读数据*/
  }

/**********************************送左半屏指令子程序***********************************/
void Send_Dat_L(uchar d)
{
 R_W=0; R_W=0;D_I=0;D_I=0;		/*设置显示开头*/
 CSA=0;CSA=0;					/*左半屏*/
 E=1;E=1;
 P1=d;P1=d;
 E=0;E=0;
 CSA=1;CSA=1;
 D_I=1;D_I=1; R_W=1;R_W=1;		/*读数据*/
}

/*********************************查询右半屏是否"忙"子程序******************************/
void Inquire_Busy_R()
{
   R_W=1;R_W=1; D_I=0;D_I=0;	/*读状态字*/
   CSB=0;CSB=0;				/*右半屏*/
Loop2:
   P1=0xFF;
   E=1;E=1;
   E=0;E=0;
   if(BUSY){goto Loop2;}
   CSB=1; CSB=1;				/*为访问左区作准备*/
   D_I=1;D_I=1;R_W=1;R_W=1;	/*读数据*/
 }

/**********************************送右半屏指令子程序***********************************/
void Send_Dat_R(uchar d)
{
 R_W=0; R_W=0; D_I=0;D_I=0;		/*设置显示开头*/
 CSB=1;CSB=1;					/*右半屏*/
 E=1;E=1;
 P1=d;P1=d;
 E=0;E=0;
 CSB=0;CSB=0;
 D_I=1;D_I=1; R_W=1;R_W=1;		/*读数据*/
}

/*********************************送左半屏显示字符子程序********************************/
void Send_Dat_Disp_L(uchar d)
{
 R_W=0; R_W=0; D_I=1;D_I=1;		/*写数据*/
 CSA=1;CSA=1;
 E=1;E=1;
 P1=d;P1=d;
 E=0;E=0;
 CSA=0;CSA=0;
 D_I=1;D_I=1; R_W=1;R_W=1;		/*读数据*/
}

/*********************************送右半屏显示字符子程序********************************/
void Send_Dat_Disp_R(uchar d)/**/
{
 R_W=0; R_W=0; D_I=1;D_I=1;		/*写数据*/
 CSB=1;CSB=1;
 E=1;E=1;
 P1=d;P1=d;
 E=0;E=0;
 CSB=0;CSB=0;
 D_I=1;D_I=1; R_W=1;R_W=1;		/*读数据*/
}

/*************************************延时子程序****************************************/
void Delay()
{
 uchar data i,j;
 for(i=0;i<255;i++)
 {for(j=0;j<255;j++);}
}

/************************************初始化子程序***************************************/
void Ini()
{
 E=0;R_W=1;D_I=1;CSA=CSB=0;Delay();
 Inquire_Busy_L();
 Send_Dat_L(0x3e);				/*关显示指令*/
 Inquire_Busy_R();
 Send_Dat_R(0x3e);				/*开显示指令*/
 Inquire_Busy_L();
 Send_Dat_L(0x3f);				/*设置起始行*/
 Inquire_Busy_R();
 Send_Dat_R(0x3f);
 Inquire_Busy_L();
 Send_Dat_L(0xc0);
 Inquire_Busy_R();
 Send_Dat_R(0xc0);
}

/****************************************清屏子程序*************************************/
void Clear()
{
 uchar data i,j,Disp_Page;
 for(i=0;i<8;i++)
 {
  Disp_Page=i;
  Disp_Page=Disp_Page|0xb8;		/*设置页地址*/
  Inquire_Busy_L();
  Send_Dat_L(Disp_Page);
  Inquire_Busy_L();
  Send_Dat_L(0x40);				/*设置列地址*/
  for(j=0;j<64;j++)
  {Send_Dat_Disp_L(0x00);}
 }
for(i=0;i<8;i++)
 {
  Disp_Page=i;
  Disp_Page=Disp_Page|0xb8;		/*设置页地址*/
  Inquire_Busy_R();
  Send_Dat_R(Disp_Page);
  Inquire_Busy_R();
  Send_Dat_R(0x40);				/*设置列地址*/
  for(j=0;j<64;j++)
  {Send_Dat_Disp_R(0x00);}
 }
}

/***********************************液晶显示子程序**************************************/
void Lcd_Disp(char *p)
{
 uchar idata i;
 char idata ch;
 for(i=0;i<8;i++)
 {
  ch=*p;
  p++;
  Send_Dat_Disp_L(ch);
Send_Dat_Disp_R(ch);
 }
}

/*************************************汉字显示子程序************************************/
void Hanzi_Disp()
{
 uchar data i;
 Clear();
 P1=0xbc;					/*页地址*/
 Column=0x40;					/*列地址*/
 Inquire_Busy_L();
 Send_Dat_L(Page);
 Inquire_Busy_L();
 Send_Dat_L(Page);
 Inquire_Busy_L();
 Send_Dat_L(Column);
 for(i=0;i<4;i++)					/*显示汉字上半部分*/
 {
  Lcd_Disp(&Hanzi[i][0]);
  Lcd_Disp(&Hanzi[i][8]);
 }
 Page=0xbd;					/*页地址加1*/
 Column=0x40;					/*列地址*/
 Inquire_Busy_L();
 Send_Dat_L(Page);
 Inquire_Busy_L();
 Send_Dat_L(Page);
 Inquire_Busy_L();
 Send_Dat_L(Column);
 for(i=0;i<4;i++)					/*显示汉字下半部分*/
 {
  Lcd_Disp(&Hanzi[i][0]);
  Lcd_Disp(&Hanzi[i][8]);
 }
}

⌨️ 快捷键说明

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