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

📄 character_demo.c

📁 字符型液晶显示驱动显示程序
💻 C
字号:
#pragma DEBUG CODE SMALL  ot(7)
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>

#define LCDCOM  XBYTE[ 0X8000 ]
#define LCDDATA XBYTE[ 0X8001 ]

bit NO_BUSY;
#define Data_4bit   0
#define IO_BUS	    1
#define DATA_BUS    P1
#define uchar unsigned char
uchar data	AUTO_RUN;
uchar bdata LCM_STATUS ;
sbit busy_flag=LCM_STATUS^7;
uchar	Auto_Run_Count;
#ifdef DEMO       44
sbit RS  = P3^7;
sbit RW  = P3^6;
sbit E  = P3^0;
sbit NEXT_KEY  = P3^2;
#else
sbit RS  = P3^2;
sbit RW  = P3^3;
sbit E  = P3^4;
sbit NEXT_KEY  = P3^5;
#endif
bit	Next_Key_Status =0;

uchar code font1[]={0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00};

uchar code font2[]={0x00,0x00,0x0e,0x0e,0x0e,0x00,0x00,0x00};

uchar code font3[]={0x00,0x1f,0x1f,0x1f,0x1f,0x1f,0x00,0x00};

uchar code font4[]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x00};

uchar code font11[]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f};

uchar code font12[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};


uchar code font13[]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};

uchar code font14[]={0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05};

uchar code font15[]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};

uchar code font16[]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};


uchar code font17[]={0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a};

uchar code font18[]={0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15};


void Waite(void);
void Busy(void);
void Next_SW(void);

void Timer0_Delay(uchar i);
void Write_Com(uchar send_data)
{
	Busy();
	if(IO_BUS)
	{
		E = 0;
		DATA_BUS = send_data;
		RS = 0;
		RW = 0;
		E=1;
		_nop_();
		E = 0;
		if(Data_4bit)
		{
			DATA_BUS = send_data<<4;
			E=1;
			_nop_();
			E = 0;
		}

	}
	else
	{
		LCDCOM = send_data;
		if(Data_4bit)
		{
			LCDCOM = send_data<<4;
		}
	}
}
void Write_Com_4bit(uchar send_data)
{
	if(IO_BUS)
	{
		E = 0;
		DATA_BUS = send_data;
		RS = 0;
		RW = 0;
		E=1;
		_nop_();
		E = 0;

	}
	else
	{
		LCDCOM = send_data;
	}
}

void Write_Data(uchar send_data)
{
	Busy();
	if(IO_BUS)
	{
		E = 0;
		DATA_BUS = send_data;
		RS = 1;
		RW = 0;
		E=1;
		_nop_();
		E = 0;
		if(Data_4bit)
		{
			DATA_BUS = send_data<<4;
			E=1;
			_nop_();
			E = 0;
		}
	}
	else
	{
		LCDDATA = send_data;
		if(Data_4bit)
		{
			LCDDATA = send_data<<4;
		}
	}
}

uchar  Read_Com(void)
{
	uchar  Read_Data,Temp;
	if(IO_BUS)
	{
                DATA_BUS = 0xFF;
		E = 0;
		RS = 0;
		RW = 1;
		E=1;
		_nop_();
		Read_Data = DATA_BUS;
		E = 0;
		if(Data_4bit)
		{
			E=1;
			_nop_();
			Temp = DATA_BUS;
			E = 0;
		}
	}
	else
	{
		Read_Data = LCDCOM;
		if(Data_4bit)
		{
			Temp = LCDCOM;
		}
	}
	return(Read_Data);
}

void Busy(void)
{
	if(NO_BUSY)
	{
		Waite();
		return;
	}
	else
	{
   		do
        	{
			LCM_STATUS = Read_Com();

		}while(busy_flag);
        }
 }

void Init_Lcd(void)
{
	NO_BUSY = 1;
 	if(Data_4bit)
 	{

 		 Write_Com_4bit(0x22);
 		 Waite();
 		 Write_Com(0x28);
                 Write_Com(0x2c);
                 Write_Com(0x08);
                 Write_Com(0x28);


 		 Write_Com_4bit(0x22);
 		 Waite();
 		 Write_Com(0x28);
                 Write_Com(0x2c);
                 Write_Com(0x08);
                 Write_Com(0x28);
 	}
 	else
 	{
		Write_Com(0x38);
		Write_Com(0x38);
	}
	Write_Com(0x0c);

	Write_Com(0x06);

	Write_Com(0x01);

	NO_BUSY = 1;


 }

void Display_String(uchar x, uchar *s)
{
	uchar i=0;
	Write_Com(x);
	while(s[i]!=0x00)
	{
		Write_Data(s[i]);
		i++;
	}
}
void Display_String_loop(uchar x, uchar s,uchar number)
{
	uchar i,j;
	Write_Com(x);
	for(j=0;j<40;)
	{
		for(i=0;i<number;i++)
		{
			Write_Data(s+i);
		}
		j = j + number;
	}
}
void Display_Same_Font(uchar x,uchar s,uchar number)
{
	uchar i;
	Write_Com(x);
        for(i=0;i<number;i++)
        {
                Write_Data(s);
        }

}

void Save_One_Font(uchar x, uchar  *s)
{
	uchar i ;
	Write_Com(x);
    	for(i=0;i<8;i++)
    	{
	    Write_Data(s[i]);

    	}
 }


void Clear(void)
{
	Write_Com(0x01);
}
void Display_Shift_Left(void)
{
	Write_Com(0x18);
}
void Display_Shift_Right(void)
{
	Write_Com(0x1c);
}

void Display_Table()
{
        uchar i,j;
        uchar	s;
        s = ' ';
        for(j=0;j<1;j++)
        {
		Write_Com(0x80);
        	for(i=0;i<40;i++)
		{
			Write_Data(s++);
                        Timer0_Delay(5);

		}
                Timer0_Delay(200);

		Write_Com(0xc0);
        	for(i=0;i<40;i++)
		{
			Write_Data(s++);
                        Timer0_Delay(5);

		}
                Timer0_Delay(200);

	}


}

 void Display_Table1()
{
        uchar i,j;
        uchar	s;
        s =0xa0;
        for(j=0;j<1;j++)
        {
		Write_Com(0x80);
        	for(i=0;i<40;i++)
		{
			Write_Data(s++);
                        Timer0_Delay(5);

		}
                Timer0_Delay(200);

		Write_Com(0xc0);
        	for(i=0;i<40;i++)
		{
			Write_Data(s++);

                        Timer0_Delay(5);
		}
                Timer0_Delay(200);

		Next_SW();
	}


}
void Timer0_Delay(uchar i)
{
        uchar j;
        TMOD = 0x01;
        for(j=0;j<i;j++)
        {
                TR0 = 0 ;
                TF0 = 0 ;
                TH0 = 0x0fc;
                TL0 = 0X1;
                TR0 = 1;
                while(TF0==0);
        }
        TR0 = 0;
}
void	Read_Key(void)
{
	if(!NEXT_KEY)
	{
		Next_Key_Status = !Next_Key_Status;
	}
	while(!NEXT_KEY);
}
void Next_SW(void)
{
	if(!AUTO_RUN)
	{

               do{
               		Read_Key();
               	}while(Next_Key_Status);

		Timer0_Delay(250);
                Timer0_Delay(250);
		return;
       }
       do{

    	if(!NEXT_KEY)
                {
			Timer0_Delay(1);
                        if(NEXT_KEY)     break;
                 }

	}while(1);

}
uchar Flash_SW()
{
	if(AUTO_RUN)
	{

              do{
               		Read_Key();
               	}while(Next_Key_Status);

		Timer0_Delay(150);
		return(Auto_Run_Count-- );
       }

	if(!NEXT_KEY)
	{
			Timer0_Delay(250);
			                     return(0);
	}
         else
        {
               Timer0_Delay(250);
               return(1);
        }

}
void Check_Auto_SW(void)
{

       	if(!NEXT_KEY)
        {
			Timer0_Delay(20);
                        if(NEXT_KEY)
                        {
                        	AUTO_RUN = 0;
                        }
                        else
                        {
                        	AUTO_RUN = 1;
                	}

	}
	else
	{
		AUTO_RUN = 0;
	}

}
void Waite(void)
{
        Timer0_Delay(1);
}

void main(void)
{

	uchar next=0;
	EA=0;
	Auto_Run_Count = 0;
	Timer0_Delay(250);
	Check_Auto_SW();
	Init_Lcd();
    	Timer0_Delay(250);
        AUTO_RUN = 1;

	do
	{


    		Save_One_Font(0x70,font11);
    		Display_Same_Font(0x80,0x06,40);
		Display_Same_Font(0xc0,0x06,40);
                Timer0_Delay(150);
		Next_SW();


		Save_One_Font(0x70,font12);
                 Timer0_Delay(150);
		Next_SW();


		Save_One_Font(0x70,font13);
                 Timer0_Delay(150);
		Next_SW();



		Save_One_Font(0x70,font14);
                 Timer0_Delay(150);
		Next_SW();


		Save_One_Font(0x70,font15);
                 Timer0_Delay(150);
		Next_SW();


		Save_One_Font(0x70,font16);
                //  Clear();
                Timer0_Delay(150);
		Next_SW();


		Save_One_Font(0x70,font17);
                Timer0_Delay(150);
		Next_SW();


		Save_One_Font(0x70,font18);
                Timer0_Delay(150);
		Next_SW();

                Auto_Run_Count = 12;
                do
		{
			Save_One_Font(0x70,font12);
			Save_One_Font(0x70,font1);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font2);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font3);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font4);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font11);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font4);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font3);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font2);
			if(!Flash_SW() ) break;
			Save_One_Font(0x70,font1);
			if(!Flash_SW() ) break;
		}while(Auto_Run_Count);

                 	Next_SW();
		Display_String(0x80,"1234567890123456789012345678901234567890");
		Display_String(0xC0,"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMN");
                 Timer0_Delay(250);
		Next_SW();

                Write_Com(0x0F);
		Display_String_loop(0x80, ' ',40);
		Display_String_loop(0xC0, 'H',40);
                 Timer0_Delay(250);
		Next_SW();


		Display_String_loop(0x80, 0xa0,40);
		Display_String_loop(0xC0, 0xc8,40);
                 Timer0_Delay(250);
		Next_SW();

                //Write_Com(0x0C);
                //	Display_String_loop(0x80, ' ',40);
	//	Display_String_loop(0xC0, 'H',40);

		//Next_SW();

                Write_Com(0x0C);

                 	      Clear();
	Display_Table();
          Clear();
       Display_Table1();
  // Clear();

             //   Next_SW();

		Display_String(0x80," S-TEK  CO.,LTD       S-TEK  CO.,LTD    ");

		Display_String(0xC0,"Your Best Choice    Character LCM serial");

        	Next_SW();

        	Auto_Run_Count = 8;
        	do
        	{
        		Display_Shift_Left();
        		next = Flash_SW();
		}while(next);
		Auto_Run_Count = 8;

                	Next_SW();

		do
        	{
        		Display_Shift_Right();
        		next = Flash_SW();
		}while(next);
                 Timer0_Delay(250);
		Next_SW();
              Clear();

    	}while(1);

}

⌨️ 快捷键说明

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