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

📄 74164.c

📁 用51系列单片机实现的LCD12864液晶的驱动程序
💻 C
字号:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_bus P0

sbit sdata=lcd_bus^0;
sbit sclk=lcd_bus^1;
sbit e =lcd_bus^2;
sbit rw=lcd_bus^3; 
sbit rs=lcd_bus^4;
sbit kk=lcd_bus^5;


delay(uchar d)
{
    while(--d);
}

send_char(uchar da)
{
    uchar i;
	for(i=0;i<8;i++)
	{
        sclk=0;
		_nop_();
	    if(da&0x80) sdata=1;
	    else sdata=0;
		_nop_();
	    sclk=1;
		_nop_();
		da=da<<1;
	 }
	 sclk=0;

}



/*********写命令****************/

void lcd_wrcmd(uchar cmd)
{
        delay(250);
		delay(250);
		send_char(cmd);
        rs=0;
        rw=0;
        _nop_();
        e=1;
        _nop_();
        _nop_();
        e=0; 
		//rs=1;rw=1;
}




/************向液晶片写数据***************/

void lcd_wrdata( uchar lcddata)
{
	    delay(250);
		delay(250);
        send_char(lcddata);
        rs=1;
        rw=0;
        _nop_();
        e=1;
        _nop_();
        _nop_();
	    _nop_();
        e=0;
		//rs=1;rw=1;
}

void lcd_ini(void)
{
		send_char(0);
	    lcd_wrcmd(0x38);
		delay(100);
		lcd_wrcmd(0x38);
        delay(100);
        lcd_wrcmd(0x0c);
		delay(100);
        lcd_wrcmd(0x06);
		delay(100);
        lcd_wrcmd(0x01);
		delay(100);
		//lcd_wrcmd(0x38);
}



uchar key()
{
    uchar keycode=0;
	uchar i;
	uchar temp=0xfe,t=0;
	e=0;
	//rw=1;rs=1;
	send_char(0);
	kk=1;
	if(kk==0)
	{
	     delay(250);
		 send_char(0);
		 kk=1;
		 if(kk==0)
		 {
		     
		     for(i=1;i<=8;i++)
		     {
		         send_char(temp);
				 if (kk==0)
				 { 
				     keycode=i;
				     break;
				 }
				 temp=_crol_(temp,1);
		      }
	       }
		   while(kk==0)
		   {
		       send_char(0);
               kk=1;
	       }
     }
	 //Change it yourself!
	 if(keycode==1)
	 {
	     t=1; 
	 }
	 else if(keycode==2)
	 {
	     t=5;
	 }
	  else if(keycode==3)
	 {
	     t=2;
	 }
	  else if(keycode==4)
	 {
	     t=6;
	 }
	  else if(keycode==5)
	 {
	     t=8;
	 }
	  else if(keycode==6)
	 {
	     t=4;
	 }
	  else if(keycode==7)
	 {
	     t=7;
	 }
	  else if(keycode==8)
	 {
	     t=3;
	 }
	 return t;
}


void display(uchar cmd,uchar code *str)
{
        uchar i=0;
		lcd_wrcmd(cmd);
		while(str[i]!='\0')
		{
		    lcd_wrdata(str[i]);
			i++;		    		    
		}
}


main()
{
    uchar ii,i;
	uchar code str1[]="Lcd_Key  [H.C.H]";
	uchar code str2[]="Key=";

	SCON=0x50;
    TMOD=0x20;
    TH1=0xFD;
    TL1=0xFD;
    TR1=1;

    lcd_ini();
	lcd_ini();
    display(0x80,str1);
	display(0xc0,str2);		 
	while(1)
	{
	   ii=key();
	   if(ii!=0)
       {
	       lcd_wrcmd(0xc4);
	       lcd_wrdata(0x30+ii);
		   for(i=0;i<16;i++)
		   {
		       SBUF=0x30+ii;
		       while(TI==0);    //发送字节
		       TI=0;
		   }
	   }
	}	
    
}

⌨️ 快捷键说明

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