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

📄 lcd.c

📁 lcd display test program in ti dsp mcu
💻 C
字号:
/***************************
16:11 2004-7-28  键盘输入调试程序--将输入的键盘数值赋给变量k
***************************/   
  /***address defined***/
#include	"F2407_c.h"
#include	"stdlib.h"

unsigned char lcd_data[64];/*数组定义*/
char lcd_data1[1];
int pData[4];
int a=100;


/*系统 初始化子程序*/
initial()
{
	asm(" setc INTM ");
	asm (" setc SXM");/*抑制符号位扩展*/
	asm (" clrc OVM");/*累加器中结果正常溢出*/
	asm (" clrc CNF");/*B0被配置为数据存储空间*/
    WDCR=0x6F;
    WSGR=0x04;
    SCSR1=0x86FF;   /*CLKIN=15M*/
	IMR=0X0000;
	IFR=0x0FFFF;
	MCRA=0x0000;             /*IOPA5~7 配置为一般I/O功能*/  
	PADATDIR=0x0F700;/*IOPA1~6配置为输出方式.IOPA0配置为输入方式*/
	PBDATDIR=0x0FFFF;/*IOPB配置为输出方式*/
	MCRC=0x0FB71;  /*IOPE1~3,IOPF2配置为一般I/O口*/
	PEDATDIR=0x8000;
	PFDATDIR=0x0000;
}


/*中断屏蔽子程序*/
void inline disable()          
{	
	asm (" setc INTM ");

}
/*中断使能子程序*/
void inline enable()       
{
	asm (" clrc INTM ");

}

/*延时子程序*/ 
void Delay(int count)
{   
	int ii;
	int jj;
  for (ii=0;ii<=50;ii++) 
  {    
  jj=count;
  while(jj > 0) 
  jj--; 
  }
}

/*发送数据子程序*/
void SendData()
{

	Delay(30);/*等待数据稳定*//*本句必须有*/ 
	PADATDIR=(PADATDIR | 0x0010);/*发送请求*/
	loop:
		/*检测BUSY位是否为1,即数据是否处理完*/
  	if(!(PADATDIR & 0x0008))
	goto loop;
        PADATDIR=(PADATDIR & 0x0FFEF);/*撤消请求*/
	Delay(30);/*等待模块内部处理完成*/
/*本句也必须有,否则虽然能够正常显示汉字,但会不时的有闪烁*/

	
}

/*液晶复位清屏子程序*/	
void ResetLCD(void) 
{   
	PBDATDIR=0x0FFF4;

	SendData(); /*以上两句为清屏,向数据口送清屏指令#F4H*/

}  

/*显示汉字*/
void hanzi()
{
	int comd;int adres_x;int adres_y;unsigned char_qu;unsigned char_wei;
	unsigned i;
	unsigned j;
	unsigned m;

	strcpy(lcd_data,"    当前按键                                    欢迎使用闻亭科技");
	comd=0x0fff0;
	for(i=0;i<4;i++)
	{	for(j=2;j<10;j++)
		{	adres_x=j;
			adres_y=i;
			char_qu=lcd_data[i*16+(j-2)*2]-0x0a0;
			char_wei=lcd_data[i*16+(j-2)*2+1]-0x0a0;
	
			pData[0]=comd;
			pData[1]=adres_x|0x0ff00;
			pData[2]=adres_y|0x0ff00;
			pData[3]=char_qu|0x0ff00;
			pData[4]=char_wei|0x0ff00;
			for(m=0;m<5;m++)
		    {PBDATDIR=pData[m];SendData();}
		 }
		 
	}
		    
}

/*欢迎界面*/
void hanzi1()
{
	int comd;int adres_x;int adres_y;unsigned char_qu;unsigned char_wei;
	unsigned i;
	unsigned j;
	unsigned m;

	strcpy(lcd_data,"    闻亭科技    发展责任有限公司  追求卓越品质      欢迎使用    ");
	comd=0x0fff0;
	for(i=0;i<4;i++)
	{	for(j=2;j<10;j++)
		{	adres_x=j;
			adres_y=i;
			char_qu=lcd_data[i*16+(j-2)*2]-0x0a0;
			char_wei=lcd_data[i*16+(j-2)*2+1]-0x0a0;
	
			pData[0]=comd;
			pData[1]=adres_x|0x0ff00;
			pData[2]=adres_y|0x0ff00;
			pData[3]=char_qu|0x0ff00;
			pData[4]=char_wei|0x0ff00;
			for(m=0;m<5;m++)
		    {PBDATDIR=pData[m];SendData();}
		 }
		 
	}
		    
}


/*ASCII码显示程序*/
void ASCII1()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"1");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII2()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"2");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII3()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"3");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII4()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"4");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII5()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"5");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII6()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"6");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII7()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"7");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII8()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"8");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII9()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"9");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII0()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"0");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII10()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"A");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII11()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"B");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII12()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"C");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII13()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"D");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII14()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"E");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*ASCII码显示程序*/
void ASCII15()
{
int comd;int adres_x;int adres_y;unsigned ASCII_code;
	int m;
	strcpy(lcd_data1,"F");
		comd=0x0fff9;
		adres_x=0x0ff0C;
		adres_y=0x0ff20;
		ASCII_code=lcd_data1[0];
		pData[0]=comd;
		pData[1]=adres_x;
		pData[2]=adres_y;
		pData[3]=ASCII_code|0x0ff00;
		for(m=0;m<4;m++)
		{PBDATDIR=pData[m];SendData();}  
}

/*键盘扫描子程序*/	
int keyscan()
{   
	int k,j;
	if ((PEDATDIR&0x000E)|PFDATDIR&0x0004==0) /*读入键盘输入键值*/
	k=0;
	else k=1; /*有键按下则k=1*/

	if (k==1)	
	{	
		for (j=3;j>0;j--) j=j; /*延时消抖,判断是否还有键按下*/
	 	if ((PEDATDIR&0x000E)|PFDATDIR&0x0004==0) /*读入键盘输入键值*/
		k=0;
		else k=1;  /*若还有键按下则k=1*/ 
	}  
	
	return (k);/*返回k值*/

}

/*键盘服务子程序*/
int keyserve()
{

		PADATDIR=PADATDIR&0x0FF7F; /*IOPA7=0*/
		Delay(200);
			if (!(PFDATDIR & 0x0004))
			{a=1;}/*检测IOPF2是否为0*/
         Delay(2);
	 		if (!(PEDATDIR & 0x0008))
	 		{a=2;}/*检测IOE3是否为0*/
        Delay(2);
	 		if (!(PEDATDIR & 0x0004))
	 		{a=3;}/*检测IOPE2是否为0*/
	         Delay(2);
	 		if (!(PEDATDIR & 0x0002))
	 		{a=4;}/*检测IOPE1是否为0*/
	         Delay(2);
	 		
	 	PADATDIR=PADATDIR|0x0080;
	 	
	 	PADATDIR=PADATDIR&0x0FFBF; /*IOPA6=0*/
	 	Delay(200);
			if (!(PFDATDIR & 0x0004))
			{a=5;}/*检测IOPF2是否为0*/
        Delay(2);
	 		if (!(PEDATDIR & 0x0008))
	 		{a=6;}/*检测IOE3是否为0*/
        Delay(2);
	 		if (!(PEDATDIR & 0x0004))
	 		{a=7;}/*检测IOPE2是否为0*/
        Delay(2);
	 		if (!(PEDATDIR & 0x0002))
	 		{a=8;}/*检测IOPE1是否为0*/
         Delay(2);
         
	 	PADATDIR=PADATDIR|0x0040;
	 	
	 	PADATDIR=PADATDIR&0x0FFDF; /*IOPA5=0*/
	 	Delay(200);
			if (!(PFDATDIR & 0x0004))
			{a=9;}/*检测IOPF2是否为0*/
             Delay(2);
	 		if (!(PEDATDIR & 0x0008))
	 		{a=0;}/*检测IOPE3是否为0*/
         Delay(2);
	 		if (!(PEDATDIR & 0x0004))
	 		{a=10;}/*检测IOPE2是否为0*/
         Delay(2);
	 		if (!(PEDATDIR & 0x0002))
	 		{a=11;}/*检测IOPE1是否为0*/
         Delay(2);
         
	 	PADATDIR=PADATDIR|0x0020;
	 	
		PEDATDIR=PEDATDIR&0x0FF7F; /*IOPE7=0*/
		Delay(200);
			if (!(PFDATDIR & 0x0004))
			{a=12;}/*检测IOPF2是否为0*/
        Delay(2);
	 		if (!(PEDATDIR & 0x0008))
	 		{a=13;}/*检测IOPE3是否为0*/
        Delay(2);
	 		if (!(PEDATDIR & 0x0004))
	 		{a=14;}/*检测IOPE2是否为0*/
        Delay(2);
	 		if (!(PEDATDIR & 0x0002))
	 		{a=15;}/*检测IOPE1是否为0*/
        Delay(2);
         
	 	PEDATDIR=PEDATDIR|0x0080;
	
	    
	   	return (a);
}




void interrupt nothing()/*假中断程序*/
{
  return;
} 



/*********************************************************************************
                                        主程序
**********************************************************************************/
main()
{
	disable();//禁止所有中断
	initial();//系统初始化
	ResetLCD();//液晶清屏
	Delay(10000);
    Delay(10000);
    hanzi1();//欢迎界面
    Delay(10000);
    Delay(10000);
    Delay(10000);
    Delay(10000);
    Delay(10000); 
    
    
    
    ResetLCD();
    Delay(10000);
    hanzi();
    Delay(10000);
	while(1)
	{
		int i;
		i=0;
		i=keyscan();
		if (i==1) 
		keyserve();
			a=keyserve();
		if (a==1)	{ASCII15();}
		if (a==2)	{ASCII14();}
		if (a==3)	{ASCII13();}
		if (a==4)	{ASCII12();}
		if (a==5)	{ASCII11();}
		if (a==6)	{ASCII10();}
		if (a==7)	{ASCII0();}
		if (a==8)	{ASCII9();}
		if (a==9)	{ASCII8();}
		if (a==0)	{ASCII7();}
		if (a==10)	{ASCII6();}
		if (a==11)	{ASCII5();}
		if (a==12)	{ASCII4();}
		if (a==13)	{ASCII3();}
		if (a==14)	{ASCII2();}
		if (a==15)	{ASCII1();}
	}
}
			
	

⌨️ 快捷键说明

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