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

📄 kszong.c

📁 c8051最小系统板的个部分调试
💻 C
字号:
/**函数名称有修改**/

#include<stdio.h>

#include"KSzong.h"
#include"absacc.h"

#define RSL   XBYTE[0XF6FF]
#define RSR   XBYTE[0XFaFF]


#define WI1  XBYTE[0XF4FF]
#define WD1  XBYTE[0XF5FF] 
#define RW1  XBYTE[0XF7FF] 

#define WI2  XBYTE[0XF8FF] 
#define WD2  XBYTE[0XF9FF]
#define RW2  XBYTE[0XFBFF]

void Delay_us(unsigned int DelayTime)
 {	// DelayTime=DelayTime*10; 
   while(DelayTime) (DelayTime)--;
  }

void Delay_x10ms(unsigned char DelayTime)   //***************10ms延时**********//
   {
       unsigned char i,j,k;
       for(i=0;i<DelayTime;i++)
          for(j=0;j<10;j++)
             for(k=0;k<120;k++) {;}
    }

/*---------------------------------------------------------------------------- 
下面这个函数用于液晶模块的忙信号检测。 
----------------------------------------------------------------------------*/ 
/*void LCD_Check_Busy(void)
  {
    uchar a=0;
	uchar b=0;
   while(1)
	{ a=RS;
	  b=a&0x80;
	  if(b==0x80) break;
     }
							  //
  }

/*---------------------------------------------------------------------------- 
下面这个函数用于向液晶模块写入控制指令代码。 
函数入口参数:Command ------ 向液晶模块写入的控制指令代码 。 
              CS_Num  ------ 左右半屏的选数值 
----------------------------------------------------------------------------*/ 
void LCD_WriteCommand(uchar Command, uchar CS_Num) 
{ 
  if(CS_Num==1)			/*选择左半屏*/
   {while(0x80&RSL); WI1=Command; 
	}
  else if(CS_Num==2)	/*选择右半屏*/
   { while(0x80&RSR); WI2=Command;
	}				  
} 


/*---------------------------------------------------------------------------- 
下面这个函数用于向液晶模块写入显示数据。 
函数入口参数:Data------ 向液晶模块写入的显示数据 。 
            CS_Num-------左右半屏的选数值 
----------------------------------------------------------------------------*/ 
void LCD_WriteData(uchar Data,uchar CS_Num) 
{  
 // LCD_Check_Busy();
 
  if(CS_Num==1)		 /*选择左半屏*/
   {while(0x80&RSL); WD1=Data; 
	}
  else if(CS_Num==2)  /*选择右半屏*/
   { while(0x80&RSR); WD2=Data;  
	}		
}


/*---------------------------------------------------------------------------
下面这个函数用于向液晶模块初始化。
如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
---------------------------------------------------------------------------*/
void LCD_Initial(void) 
{   
  //LCD_RST = 0;    /* 置复位信号为低电平 */ 
  //Delay_us(2);  
  //LCD_RST = 1;    /* 置复位信号为高电平 */  
  LCD_WriteCommand(0x3F,Left);	  /*显示开*/
  LCD_WriteCommand(0x3F,Right);
  LCD_WriteCommand(0xC0,Left);    /*起始行*/
  LCD_WriteCommand(0xC0,Right);			    
  LCD_WriteCommand(0xB8,Left); 	  /*起始页*/
  LCD_WriteCommand(0xB8,Right);  
  LCD_WriteCommand(0x40,Left);	  /*起始列*/
  LCD_WriteCommand(0x40,Right); 
} 



/**************************输出宋体的数字8*16***********************/


void LCD_Num(uchar Page_Num,uchar Clm_Num,uchar count,uchar *DisBuf,uchar Side_Num)
 {
  uchar k,COM;
   			  
  COM=0xB8+Page_Num;
  LCD_WriteCommand(COM,Side_Num);    
  COM=0x40+Clm_Num;
  LCD_WriteCommand(COM,Side_Num);	 	 
  for(k=0;k<8;k++)
 {
	  LCD_WriteData(DisBuf[k+16*count],Side_Num);
  }


  Page_Num++;
  COM=0xB8+Page_Num;
  LCD_WriteCommand(COM,Side_Num);    
  COM=0x40+Clm_Num;
  LCD_WriteCommand(COM,Side_Num);
  for(k=8;k<16;k++)
 {
	  LCD_WriteData(DisBuf[k+16*count],Side_Num); 
  }
	
  Delay_us(2);
 }





/*---------------------------------------------------------------------------
下面这个函数用于液晶模块的清屏。
---------------------------------------------------------------------------*/
void LCD_CLR(uchar Side_Num)
 {
   uchar i,k,COM;
   
   for(i=0;i<8;i++)				  
   {
	 COM=0xB8+i;
     LCD_WriteCommand(COM,Side_Num);    
	 COM=0x40;
	 LCD_WriteCommand(COM,Side_Num);  
	 	 
     for(k=0;k<64;k++)
      {
	    LCD_WriteData(0x00,Side_Num); 
	   }
	}
	 Delay_us(20);
  }


/*---------------------------------------------------------------------------
下面这个函数为主函数,根据程序要实现的功能写相应的应用程序
---------------------------------------------------------------------------*/



 

⌨️ 快捷键说明

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