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

📄 ms12864.h

📁 MS12864-R的串行驱动
💻 H
字号:
//#include <at89x52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define nop()  _nop_()
#define DATA_PORT P1
#define DATA_INPUT P0

void WriteCom(uchar CMD);
void WriteDat(uchar DAT);
void Delay(uint ms);
uchar CheckBusy(void);
void Draw_Pic(uchar y);
void Pic_Off(uchar y);
void Clear_Pic();
void Picture_Set_XY(uchar x, uchar y);
void Int_Set_XY(uchar x, uchar y, uint dat);
void Char_Set_XY(uchar x, uchar y, uchar *p);
void Lcd_Init(void);
void Set_White(uchar x,uchar y,uchar end_x,uchar clear); 
uint Set_Parameter();

sbit RS = P3^2;
sbit RW = P3^3;		  
sbit EN = P3^4; 
sbit Up = P3^5;
sbit Enter = P3^6;
sbit Down = P3^7;

/*************************************************/
void Lcd_Init(void)
{
	uchar cmd;
 	cmd=0x30;			//功能设置 8位数据,基本指令
	WriteCom(cmd);		//写指令
	cmd=0x0C;			//显示状态 ON,游标OFF,反白OFF
	WriteCom(cmd);		//写指令
	cmd=0x01;			//清除显示
	WriteCom(cmd);		//写指令
	cmd=0x02;			//地址归位
	WriteCom(cmd);		//写指令
	cmd=0x80;			//设置DDRAM地址
	WriteCom(cmd);		//写指令
	Delay(100);			//延时
}
/*************************************************/
void Delay(uint ms)
{
   	uchar j;
   	for(; ms>0; ms--)
   		for(j=100; j>0; j--)
		{
		 	nop();
			nop();
		}
}
/*************************************************/
void WriteCom(uchar CMD)
{
	while(CheckBusy());
	RS = 0;
	RW = 0;
	DATA_PORT = CMD;
	EN = 1;
	nop();
	nop();
	EN = 0;
}
/*************************************************/
void WriteDat(uchar DAT)
{
	while(CheckBusy());
	RS = 1;
	RW = 0;
	DATA_PORT = DAT;
	EN = 1;
	nop();
	nop();
	EN = 0;
}
/*************************************************/
uchar CheckBusy(void)
{
	uchar temp;
	DATA_PORT = 0XFF;
	RS = 0;
	RW = 1;
	EN = 1;
	nop();
	nop();
	temp = DATA_PORT;
	nop();
	nop();
	EN = 0;
	temp &= 0x80;
	return(temp);
}
/*************************************************/
void Char_Set_XY(uchar x, uchar y, uchar *p)
{
  	if(y == 0)
	{
	 	WriteCom((0x80+x));	
	}
	if(y == 1)
	{
		WriteCom((0x90+x));
	}
	if(y == 2)
	{
		WriteCom((0x88+x));
	}
	if(y == 3)
	{
		WriteCom((0x98+x));
	}
	while(*p != 0)
	{
		WriteDat(*p++);
	}
}
/************************************************/
void Draw_Pic(uchar y)
{
	uchar i, j, x;
    
    if(y >=2)
    {
        x = 8;
        y = (y-2)*16;
     }
     else
     {
        x = 0;
        y = y*16;
      }

	for(i=0; i<16; i++)
	{    
        lcd_cmd_w(0x34);
		lcd_cmd_w(0x36);
        lcd_cmd_w(0x80+y);
        lcd_cmd_w(0x80+x);
        y++;

		for(j=0; j<16; j++)
		{
			lcd_dat_w(0xff);    
         }
	}
       lcd_cmd_w(0x30);
    delay(10);
}
/***********************************************/
void Pic_Off(uchar y)
{
	uchar i, j, x;
    
    if(y >=2)
    {
        x = 8;
        y = (y-2)*16;
     }
     else
     {
        x = 0;
        y = y*16;
      }

	for(i=0; i<16; i++)
	{    
        lcd_cmd_w(0x36);
        lcd_cmd_w(0x80+y);
        lcd_cmd_w(0x80+x);
        y++;

		for(j=0; j<16; j++)
		{
			lcd_cmd_w(0x00);    
         }
	}
       lcd_cmd_w(0x30);
    Delay(10);
}
/***********************************************/
void Clear_Pic()
{
   uchar i, j;

	for(i=0; i<32; i++)
	{
 
        lcd_cmd_w(0x36);
        lcd_cmd_w(0x80+i);
        lcd_cmd_w(0x80);
		for(j=0; j<32; j++)
		{
			lcd_dat_w(0x00);    
         }
	}
       lcd_cmd_w(0x30);
    delay(10); 
}
/**************************************************/
void Int_Set_XY(uchar x, uchar y, uint dat)
{
	uchar seq[10];
	uchar i;
	uint flag = 0;

	if(y == 0)
	{
	 	WriteCom((0x80+x));	
	}
	if(y == 1)
	{
		WriteCom((0x90+x));
	}
	if(y == 2)
	{
		WriteCom((0x88+x));
	}
	if(y == 3)
	{
		WriteCom((0x98+x));
	}
        for(i=10; i>=1; i--)
        {
		      seq[i-1]=(uchar)(dat-10*(dat/10));
		      dat=dat/10;
         }
         for(i=0; i<10; i++)
		 {
		 	if((seq[i] != 0)||(flag != 0))
				flag++;
			if(flag)
		  		WriteDat(seq[i]+0x30);
		}
		 
	
}
/*******************************************************/
void LCDshow(uchar x, uchar y, float f, int num)
{
	uchar seq[10], i, j;
	uint flag = 0;
	ulong dat;

	if(y == 0)
	{
	 	WriteCom((0x80+x));	
	}
	if(y == 1)
	{
		WriteCom((0x90+x));
	}
	if(y == 2)
	{
		WriteCom((0x88+x));
	}
	if(y == 3)
	{
		WriteCom((0x98+x));
	}

		for(i = num; i>0; i--)
		f = f * 10;

		
		dat = (ulong)f;
	
		WriteCom(0x91);
		for(i=10; i>=1; i--)
        {
		      seq[i-1]=(uchar)(dat-10*(dat/10));
		      dat=dat/10;
         }
		 
		 j = 10 - num;

         for(i=0; i<10; i++)
		 {
		 	if(i == j)
			WriteDat(0x2e);

		 	if((seq[i] != 0)||(flag != 0))
				flag++;
			if(flag)
		  		WriteDat(seq[i]+0x30);
		}
		 
	
}	 	
/*********************************************************/

⌨️ 快捷键说明

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