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

📄 lcd.c

📁 拼音输入法,通过单片机实现
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg51.h>
#include<ziku.h>
#define uint  unsigned int
#define DISP_ON    0x3f
#define DISP_OFF   0x3e
#define COL        0x40    //列地址
#define PAGE 0xb8          //行地址
#define START_LINE 0xc0
#define LCD_BUS     P1  
sbit CS2=P3^3;             //  CS2
sbit CS1=P3^4;             //  CS1
sbit E=P3^0;               //Enable
sbit DI=P3^5;              //Data or Instrument Select
sbit RW=P3^6;              //Write or Read
sbit s0=P2^0;
sbit s1=P2^1;
uchar state=0;
uchar cnt0,move=0,m=0,n=32,d=0,ii=0;
//******************************子函数*****************************************

//void cpl_disp_str(uchar page,uchar col,uchar code *str,uchar n);      //反显
//void cpl_disp_ascII(uchar page,uchar col,uchar code *english,uchar n);//反显
void disp_str(uchar page,uchar col,uchar code *str,uchar n);
//void disp_ascII(uchar page,uchar col,uchar code *english,uchar n);
void display(uchar page,uchar col,uchar code *str,uchar n);
void displaye(uchar page,uchar col,uchar code *english,uchar n);
void delay(uint);         //延时程序
void write_cmd(uchar);    //写命令操作字
void write_data(uchar);   //写数据
void cls();               //清屏程序
void init();              //初始化程序
uchar read_data();        //读数据
uchar key();
void point(uchar x,uchar y);
void screen0();
void screen1();
void screen2();
void screen3();
void screen4();
void screen5();
void screen6();
void screen7();
void screen71();
void screen72();
void screen73();
void screen74();
void  rectangle(x,y);
void  rectangleb(x,y);
void pointb(uchar x,uchar y);
/*
void sceen8();
void sceen9();

*/

//********************************主程序*******************************************

main()  
{
        uchar i=0;
        init();
        cls();
        for(i=0;i<6;i++)
        {     
	            
                display(0,16*(i+1),str1,i);
         }

		 for(i=0;i<3;i++)
        {     
	            
                display(6,16*i,str2,i);
				display(6,(80+16*i),str2,i+3);	            
         }


         while(1)
		 {
				 switch(state)
				 {
				        case 0: screen0();break;	//中国移动通信
						case 1: screen1();break;	//通话记录 
						case 2: screen2();break;    //文本信息
				        case 3: screen3();break;    //语音功能
						case 4: screen4();break;    //铃声设定
					 	case 5: screen5();break;    //设置
					    case 6: screen6();break;	//管理目录
						//////////////////////////////////////////////////
			            case 7: screen7();break;	//游戏
						case 71:screen71();break;
						case 72:screen72();break;
						case 73:screen73();break;
						case 74:screen74();break;
						//////////////////////////////////////////////////
												        
						default:screen0();break;
				}
		  }
				        
}



//********************************** 延时子程序***************************

void delay(uint t)             
{
        uint i,j;
        for(i=0;i<t;i++)
                for(j=0;j<10;j++);
}

//*******************************写命令到LCD***************************

void write_cmd(uchar cmd)  
{

        DI=0; RW=0;
        LCD_BUS=cmd;
        E=1;
        E=0;
}


//************************写数据到LCD******************************


void point(uchar x,uchar y)
{
  uchar y1,y2,pp;
  uchar datain;
  
  pp=1;
  y1=y>>3;
  y2=y%8;
  pp=pp<<y2;
  
  if (x<64)
  {
    CS2=1;
	CS1=0;
	write_cmd(PAGE+y1);
    write_cmd(COL+x);  
    datain=read_data();
    write_cmd(PAGE+y1);
    write_cmd(COL+x);
    delay(10);
    datain=read_data();

    write_cmd(PAGE+y1);
    write_cmd(COL+x);
    datain=datain|pp;
    write_data(datain);
  }
  else
  {

    CS2=0;
	CS1=1;
	write_cmd(PAGE+y1);
	write_cmd(COL+x-64);
    datain=read_data();
    write_cmd(PAGE+y1);
    write_cmd(COL+x-64);
    delay(10);
    datain=read_data();

    write_cmd(PAGE+y1);
    write_cmd(COL+x-64);
    datain=datain|pp;
    write_data(datain);
  }
  

  
}



void pointb(uchar x,uchar y)
{
  uchar y1,y2,pp;
  uchar datain;
  
  pp=1;
  y1=y>>3;
  y2=y%8;

  pp=~(pp<<y2);
  
  if (x<64)
  {
    CS2=1;
	CS1=0;
	write_cmd(PAGE+y1);
    write_cmd(COL+x);  
    datain=read_data();
    write_cmd(PAGE+y1);
    write_cmd(COL+x);
    delay(10);
    datain=read_data();

    write_cmd(PAGE+y1);
    write_cmd(COL+x);
    datain=datain&pp;
    write_data(datain);
  }
  else
  {

    CS2=0;
	CS1=1;
	write_cmd(PAGE+y1);
	write_cmd(COL+x-64);
    datain=read_data();
    write_cmd(PAGE+y1);
    write_cmd(COL+x-64);
    delay(10);
    datain=read_data();

    write_cmd(PAGE+y1);
    write_cmd(COL+x-64);
    datain=datain&pp;
    write_data(datain);
  }
  

  
}
void write_data(uchar dout)  
{

        DI=1; RW=0;
        LCD_BUS=dout;
        E=1;
        E=0;
}






//***************************读LCD数据********************************** 
 
uchar read_data()  
{
		uchar din;
		LCD_BUS=0xff;
		DI=1; RW=1;
		E=0;
		E=0;
		E=1;
		E=1;
		E=1;
		din=LCD_BUS;
		return din;        
}




//****************************清除内存******************************************

void cls()  
{
        uchar j,k;
        CS2=1;CS1=0;
        for(k=0;k<8;k++)
        {
                write_cmd(PAGE+k);
        	    write_cmd(COL);       //列地址0
	            for(j=0;j<64;j++)     //列地址自动加一
	                    write_data(0x00);
         }
	     CS2=0;CS1=1;
	     for(k=0;k<8;k++)
	     {
	            write_cmd(PAGE+k);
	            write_cmd(COL);           //列地址0
	            for(j=0;j<64;j++)         //列地址自动加一
		                write_data(0x00);
  }
}




    




void display(uchar page,uchar col,uchar code *str,uchar n)  
{
			
		uchar j=0,i=0;
		if(col<64)
		{
		        CS2=1;CS1=0;
		 }
		else
		{
		        CS2=0;CS1=1;
				col=col-64;
		}
		for(j=0;j<2;j++)
		{
			    write_cmd(PAGE+page+j); write_cmd(COL+col);
			    for (i=0;i<16;i++)
		        write_data(str[n*32+16*j+i]);
		}
}


/*

//*******************************指定位置显示汉字16*16****************************

void disp_str(uchar page,uchar col,uchar code *str,uchar n)  
{
			
		uchar j=0,i=0;
		for(j=0;j<2;j++)
		{
			    write_cmd(PAGE+page+j); write_cmd(COL+col);
			    for (i=0;i<16;i++)
		        write_data(str[n*32+16*j+i]);
		}
}
//**********************************反显程序**************************************

void cpl_disp_str(uchar page,uchar col,uchar code *str,uchar n) 
{
  
		uchar j=0,i=0;
		for(j=0;j<2;j++)
		{
			    write_cmd(PAGE+page+j); write_cmd(COL+col);
			    for (i=0;i<16;i++)
		                write_data(~str[n*32+16*j+i]);
		}
}




//*******************************显示ASCII码程序**********************************
void disp_ascII(uchar page,uchar col,uchar code *english,uchar n)
{
		uchar j,i;
		for(j=0;j<2;j++)
		{
			    write_cmd(PAGE+page+j);write_cmd(COL+col);
			    for(i=0;i<8;i++)
			            write_data(english[n*16+8*j+i]);
		}
}
*/

												
//**************************************************************************
void displaye(uchar page,uchar col,uchar code *english,uchar n)
{
		uchar j,i;
		if(col<64)
		{
		        CS2=1;CS1=0;
		 }
		else
		{
		        CS2=0;CS1=1;
				col=col-64;
		}
		for(j=0;j<2;j++)
		{
			    write_cmd(PAGE+page+j);write_cmd(COL+col);
			    for(i=0;i<8;i++)
			            write_data(english[n*16+8*j+i]);
		}
}
/*
void cpl_disp_ascII(uchar page,uchar col,uchar code *english,uchar n)
{
		uchar j,i;
		for(j=0;j<2;j++)
		{
			    write_cmd(PAGE+page+j);write_cmd(COL+col);
			    for(i=0;i<8;i++)
			            write_data(~english[n*16+8*j+i]);
		}
}

 */  
//***************************初始化LCD屏*************************************

void init()  
{
		delay(100);
		CS2=1; CS1=0;
		delay(100);
		write_cmd(DISP_OFF);
		write_cmd(PAGE);
		write_cmd(START_LINE);
		write_cmd(COL);
		write_cmd(DISP_ON);
		CS2=0; CS1=1;
		delay(100);
		write_cmd(DISP_OFF);
		write_cmd(PAGE);
		write_cmd(START_LINE);
		write_cmd(COL);
		write_cmd(DISP_ON);
}


uchar key()
{
        uchar temp,key_value;
        P2=0xff;
		temp=0x0f&P2;
		if(temp!=0x0f)
		{
		        delay(100);
				temp=0x0f&P2;
		        if(temp!=0x0f)
				{
	 	                if(temp==0x0e)		   
		                        key_value=0;   //LEFT
		                else if(temp==0x0d)
		                        key_value=1;   //DOWN
		                else if(temp==0x0b)
		                    	key_value=2;   //UP
		                else if(temp==0x07)
		                        key_value=3;   //RIGHT
				 }
		}
		while((P2&0x0f)!=0x0f);
		return key_value;

}



        
void screen0()	//state=0
{
        uchar i,temp;
        //cls();
		for(i=0;i<6;i++)
		        display(0,16+16*i,str1,i);

⌨️ 快捷键说明

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