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

📄 lcd_dot.asm

📁 关于51单片机的点阵LCD汇编源代码。中间说明了I/O口的连接关系。
💻 ASM
字号:
#include <reg51.h>
#include <string.h>
#define CW_ADD  ((unsigned char volatile xdata *)(0x9000))// 指令口写地址
#define CR_ADD  ((unsigned char volatile xdata *)(0x9200))// 指令口读地址
#define DW_ADD  ((unsigned char volatile xdata *)(0x9100))// 数据口写地址
#define DR_ADD  ((unsigned char volatile xdata *)(0x9300))// 数据口读地址

sbit ACC_7=ACC^7;
char COM;//指令寄存器
char DAT;//数据寄存器


//void show_volt(unsigned char volt);
//void show_freq(unsigned long int freq);
void show_line1(char* ,int );
void show_line2(char* ,int );
void lcd_init(void);
void display_line1(char ch,char i);
void display_line2(char ch,char i);
void WRITE_COMMAND(void);
void WRITE_DATA(void);
//char READ_DATA(void);
//char READ_AC_BF(void);

void show_line1(char number[],int ADD)
{
int i,ADDr=0;
int num;
num=strlen(number);
for(i=0;i<num;i++)
  {
     ADDr=ADD+i;
     display_line1(number[i],ADDr);
  }
}

void show_line2(char number[],int ADD)
{
int i,ADDr=0;
int num;
num=strlen(number);
for(i=0;i<num;i++)
  {
     ADDr=ADD+i;
     display_line2(number[i],ADDr);
  }
}

/*void show_freq(unsigned long int dt)
{
char s[6];
char i;
unsigned long int buf=dt*100;
buf=buf/256;
buf*=100;
buf=buf/256;
buf*=100;
buf=buf/128;
buf*=10;
dt=buf;
s[0]=buf%10;
buf=buf/10;
s[1]=buf%10;
buf=buf/10;
s[2]=buf%10;
buf=buf/10;
s[3]=buf%10;
buf=buf/10;
s[4]=buf%10;
buf=buf/10;
s[5]=buf%10;
for(i=0;i<6;i++)
{
  s[i]=48+s[i];
}
if(dt<10000)
{
	s[5]=s[3];
	s[4]=s[2];
	s[3]=s[1];
	s[2]=s[0];
	s[1]=' ';
	s[0]=' ';
	for(i=0;i<6;i++)
	{
		display_line1(s[5-i],7+i);
	}
}
else if(dt<100000)
{
	s[0]='k';
	s[5]=s[4];
	s[4]=s[3];
	s[3]='.';
	for(i=0;i<6;i++)
	{
		display_line1(s[5-i],7+i);
	}
}
else 
{
	s[0]='k';
	s[1]=s[2];
	s[2]='.';
	for(i=0;i<6;i++)
	{
		display_line1(s[5-i],7+i);
	}
}
}
*/
/*
void show_volt(unsigned char volt)
{
char s[4];
char i;
unsigned short int buf=volt*51;
buf/=255;
s[0]='V';
s[1]=buf%10;
s[1]=48+s[1];
buf=buf/10;
s[2]=buf%10;
s[2]=48+s[2];
s[3]=s[2];
s[2]='.';

for(i=0;i<4;i++)
{
	display_line2(s[3-i],12+i);
}

}
*/
void lcd_init(void)
{      
//设置工作方式指令
COM=0x3C;
WRITE_COMMAND();

//清屏指令
COM=0x01;
WRITE_COMMAND();

//复位指令
COM=0x02;
WRITE_COMMAND();

//设置输入方式指令
COM=0x06;
WRITE_COMMAND();

//设置画面移动方式指令
COM=0x14;
WRITE_COMMAND();

//设置显示方式指令
COM=0x0C;
WRITE_COMMAND();

//设置第一行地址
COM=0x80;
WRITE_COMMAND();
}

///////////////////LCD显示第一行///////////////////  
void display_line1(char ch,char i) 
{ 
	COM=0x80;          //设置第一行地址
	COM+=i;
   	WRITE_COMMAND();

   	DAT=ch;             //传送数值
   	WRITE_DATA();
}

   
///////////////////LCD显示第二行///////////////////   
void display_line2(char ch,char i)
{
	COM=i+0xC0;          //设置第二行地址
   	WRITE_COMMAND();

   	DAT=ch;             //传送数值
   	WRITE_DATA();
}


//写指令代码子程序
void WRITE_COMMAND(void)
{
unsigned char i=0;
do
	i=*CR_ADD;			//判BF=0? 是继续
while(ACC_7); 
*CW_ADD=COM;			//写指令代码
}

//写显示数据子程序
void WRITE_DATA(void)
{
unsigned char i=0;
do
	i=*CR_ADD;			//判BF=0? 是继续
while(ACC_7) ;
*DW_ADD=DAT;			//写数据
}



/*
//读BF和AC值
char READ_AC_BF()
{
char ch=*CR_ADD;		//存入ch 单元
return ch;
}

//读显示数据子程序
char READ_DATA(void)
{
char ch;
unsigned char i=0;
do
	i=*CR_ADD;			//判BF=0? 是继续
while(ACC_7) ;
ch=*DR_ADD;				//写指令代码
return ch;
}*/

⌨️ 快捷键说明

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