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

📄 lingyanglcddisplay.txt

📁 这个源码的功能是实现凌阳单片机对1602LCD的控制
💻 TXT
字号:
//IOA0_8                D0_8            数据IOA口低8位
//IOB0_2                RS RW E         控制口IOB低三位

#include<SPCE061A.h>
void delay(int count);
void sendCMD(int dat);  //发送命令字
void sendDAT(char dat);  //发送数据
void Initial_LCM(void);
void ClrScream(void);
void display_OneWord(int,int,char);
void Display(int ,int,char []);
unsigned int count;
void Disdata(int x,int y,unsigned long z)
//------------延迟子程序10ms----------------
void delay(int count)   
{
	int i,j;
	for(;count>0;count--)
		for(i=0;i<1;i++)
			for(j=0;j<1;j++)
				;
}
//-------发送命令字----//
void sendCMD(int dat)
{
	*P_IOB_Data=0x0004;
	*P_IOA_Data=dat;
	*P_IOB_Data=0x0000;
	delay(1);
}
//----------发送数据-------//
void sendDAT(char dat)
{
	*P_IOB_Data=0x0001;
	*P_IOB_Data=0x0005;
	*P_IOA_Data=dat;
	*P_IOB_Data=0x0000;
	delay(1);
}
//--------液晶初始化--------//
void Initial_LCM(void)
{
	delay(20);
	sendCMD(0x0038);  //
	sendCMD(0x0004);  //
	sendCMD(0x000c);  //
	sendCMD(0x0001);  //
	sendCMD(0x0002); 
	delay(20);
}
void ClrScream(void)
{
	sendCMD(0x0001); 
}
//---------显示一个字符-------//
void display_OneWord(int x,int y,char data)
{
	unsigned int add=0;
	if(x==1)
	{
		add+=0x80;
	}
	else if(x==2)
	{
		add+=0xc0;
	}
	else 
		add=0;
	if(y<=16&&y>=1)	
	{
		add+=(y-1);
	}	
	else
		add=0;
	if(add!=0)	
	{
		sendCMD(add);
 		sendDAT(data);
	}
}
//------显示一串数据----//
void Display(int x,int y,char z[])
{
	int count=0;
	while(z[count]!=0)
	{
		display_OneWord(x,y,z[count++]);
		if(y<=16)
		y++;
		else 
		{
			if(x=1)
			{
				y=1;
				x++;
			}
			else break;
		}
	}
	*P_Watchdog_Clear=1;
}

//------KEYSCAN-键盘扫描----//			4*4键盘 A口高位
int keyscan(void)
{
	*P_IOA_Data=0x0f00;
	if(*P_IOA_Data&0xf000)
	{
		delay(10);
		if(*P_IOA_Data&0xf000)
		{
			*P_IOA_Data=(*P_IOA_Data&0x00ff)|0x0100;
			if(*P_IOA_Data&0xf000)
			{
				switch(*P_IOA_Data&0xf000)
				{
					case 0x1000: return 1;
					case 0x2000: return 2;
					case 0x4000: return 3;
					case 0x8000: return 0xa;
				}
			}
			*P_IOA_Data=(*P_IOA_Data&0x00ff)|0x0200;
			if(*P_IOA_Data&0xf000)
			{
				switch(*P_IOA_Data&0xf000)
				{
					case 0x1000: return 4;
					case 0x2000: return 5;
					case 0x4000: return 6;
					case 0x8000: return 0xb;
				}
			}
			*P_IOA_Data=(*P_IOA_Data&0x00ff)|0x0400;
				if(*P_IOA_Data&0xf000)
			{
				switch(*P_IOA_Data&0xf000)
				{
					case 0x1000: return 7;
					case 0x2000: return 8;
					case 0x4000: return 9;
					case 0x8000: return 0xc;
				}
			}
		*P_IOA_Data=(*P_IOA_Data&0x00ff)|0x0800;
				if(*P_IOA_Data&0xf000)
			{
				switch(*P_IOA_Data&0xf000)
				{
					case 0x1000: return 0xf;
					case 0x2000: return 0x10;
					case 0x4000: return 0xe;
					case 0x8000: return 0xd;
				}
			}
			
		}
	}	
	
}

void Disdata(int x,int y,unsigned long z)
{
	unsigned long a=z;
	Display(x,y,"        ");
	display_OneWord(x,y+7,(z%10+0x30));
	a=a/10;
	if(a==0)
		return;
	else
		display_OneWord(x,y+6,a%10+0x30);
	a=a/10;
	if(a==0)
		return;
	else		
		display_OneWord(x,y+5,(a%10+0x30));
	a=a/10;
	if(a==0)
		return;
	else	
		display_OneWord(x,y+4,(a%10+0x30));
	a=a/10;
	if(a==0)
		return;
	else	
		display_OneWord(x,y+3,(a%10+0x30));
	a=a/10;
	if(a==0)
		return;
	else	
		display_OneWord(x,y+2,(a%10+0x30));
	a=a/10;
	if(a==0)
		return;
	else	
		display_OneWord(x,y+1,(a%10+0x30));
	a=a/10;
	if(a==0)
		return;
	else	
		display_OneWord(x,y,(a%10+0x30));
}

//-------主程序-----//
void main(void)
{
	*P_IOA_Attrib=0xff;
	*P_IOA_Dir=0xff;
	*P_IOB_Attrib=0x0007;
	*P_IOB_Dir=0x0007;
	Initial_LCM();
	Display(2,3,"CHANINGKAN");
	
	while(1)
	{
  
	*P_Watchdog_Clear=1;
	delay(20);
	
	}
}

⌨️ 快捷键说明

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