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

📄 lcd12864.c

📁 LPC2148点亮LCD864液晶程序头文件
💻 C
字号:
#include  "config.h"
#include  "lcd12864.h"

void     initinal(void)           //LCD字库初始化程序
          {
           delay(40);             //大于40MS的延时程序
           IO0SET=PSB;   //PSB=1;                 //设置为8BIT并口工作模式
           delay(1);              //延时
           IO0CLR=RES;   //RES=0;                 //复位
           delay(1);              //延时
           IO0SET=RES;   //RES=1;                 //复位置高
           delay(10);
           TransferData(0x30,0);  //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
           delay(100);            //大于100uS的延时程序
           TransferData(0x30,0);  //Function Set
           delay(37);             ////大于37uS的延时程序
           TransferData(0x08,0);  //Display on Control
           delay(100);            //大于100uS的延时程序
           TransferData(0x10,0);  //Cursor Display Control光标设置
           delay(100);            //大于100uS的延时程序
           TransferData(0x0C,0);  //Display Control,D=1,显示开
           delay(100);            //大于100uS的延时程序
           TransferData(0x01,0);  //Display Clear
           delay(10);             //大于10mS的延时程序
           TransferData(0x06,0);  //Enry Mode Set,光标从右向左加1位移动
           delay(100);            //大于100uS的延时程序
          }


void     initina2(void)           //LCD显示图片(扩展)初始化程序
          {
           delay(40);             //大于40MS的延时程序
           IO0SET=PSB;//PSB=1;                 //设置为8BIT并口工作模式
           delay(1);              //延时
           IO0CLR=RES;//RES=0;                 //复位
           delay(1);              //延时
           IO0SET=RES;//RES=1;                 //复位置高
           delay(10);

           TransferData(0x36,0);  //Extended Function Set RE=1: extended instruction
           delay(100);            //大于100uS的延时程序
           TransferData(0x36,0);  //Extended Function Set:RE=1: extended instruction set
           delay(37);             ////大于37uS的延时程序
           TransferData(0x3E,0);  //EXFUNCTION(DL=8BITS,RE=1,G=1)
           delay(100);            //大于100uS的延时程序
           TransferData(0x01,0);  //CLEAR SCREEN
           delay(100);            //大于100uS的延时程序
          }





void   lcd_mesg(uint8 *adder1)
{
	unsigned char i;
        TransferData(0x80,0);  //Set Graphic Display RAM Address
        delay(100);
	for(i=0;i<32;i++)
		{
	  		TransferData(*adder1,1);
	   		adder1++;
		}

        TransferData(0x90,0);  //Set Graphic Display RAM Address
        delay(100);
	for(i=16;i<64;i++)
		{
	  		TransferData(*adder1,1);
	   		adder1++;
		}
}




void    TransferData(char data1,char DI)  //传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.
          {
          
            
            IO0CLR=WRD;  //WRD=0;
            if(DI==1) IO0SET=RS;        //RS=DI;
            else IO0CLR=RS;
            delay(1);
            
            IO1CLR=0xff<<16;   //先清零,再送数
            IO1SET=data1<<16;  //P1=data1;
            IO0SET=E;      //E=1;
            delay(1);
            IO0CLR=E;//E=0;
           }

void    delayms(unsigned int n)            //延时10×n毫秒程序
                   {
                      unsigned int i,j;
                      for(i=0;i<n;i++)
                         for(j=0;j<100000;j++);
                   }

void    delay(unsigned int m)            //延时程序
                   {
                      unsigned int i,j;
                      for(i=0;i<m;i++)
                         for(j=0;j<500;j++);
                   }

void DisplayGraphic(unsigned char  *adder)
{

   int i,j;
//*******显示上半屏内容设置
   for(i=0;i<32;i++)              //
    { 
      TransferData((0x80 + i),0); //SET  垂直地址 VERTICAL ADD
      TransferData(0x80,0);       //SET  水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         TransferData(*adder,1);
         adder++;
       }
    }
//*******显示下半屏内容设置
   for(i=0;i<32;i++)              //
    {
      TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
      TransferData(0x88,0);       //SET 水平地址 HORIZONTAL ADD
      for(j=0;j<16;j++)
       {
         TransferData(*adder,1);
         adder++;
       }
    }
}

void LCD_night(void)
{  uint32 i;
   i = IO0SET;						// 读取当前B1控制值
   if( (i&LEDK)==0 )				// 控制B1输出取反
   {  IO0SET |= LEDK;
   }
   else
   {  IO0CLR |= LEDK;
   }
}
extern  uint8 IC_DAT[]={
0x20,0x20,  0x20,0x20,  0x20,0x20,  0x20,0x20,  0x20,0x20,  0x20,0x20,   0x20,0x20,  0x20,0x20,

0xBF,0xE9,  0xB2,0xE2,  0xB5,0xC3,  0xBE,0xE0,  0xC0,0xEB,  0xCE,0xAA,   0xA3,0xBA, 0x20,0x20,//块测得距离为:
0x41,0x52,  0x4D,0x37,  0xB3,0xAC,  0xC9,0xF9,  0xB2,0xA8,  0xB2,0xE2,   0xBE,0xE0, 0xC4,0xA3,//ARM7超声波测距模

0x20,0x20,  0x20,0x20,  0x20,0x20,  0x20,0x20,  0x20,0x20,  0x20,0x20,   0xc0,0xe5,  0xC3,0xD7,
//48位起
};/*
uint8 IC_DAT[64]={'悬挂控制系统,由LPC2148 控制两个步进电机'};
*/
/*LCD12864初始化函数*/
void    LCD12864_init(void)
{
     
    IO0DIR |= LCDIO;		//设置为输出
	IO0CLR |= LCDIO;        //为安全起见,这两句都用或等号 |=
	
	IO1DIR=0xff<<16;    //液晶数据口设置为输出
	IO1CLR=0xff<<16;    //数据端初始化
	
	IO0SET |= LEDK;      //点亮背光灯,否则屏幕是黑的

    //initinal();   		 //调用LCD字库初始化程序
    delay(100);            //大于100uS的延时程序
    //lcd_mesg(IC_DAT);      //显示中文汉字1
    //delayms(100);
}

/**/
void LCDDisplay(uint32 t1,uint32 t2,uint32 t3,uint32 t4)
{  
   uint8 i;
  
   i=15;//第一行
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   
   IC_DAT[i--]=t1%10+48;
   IC_DAT[i--]=t1/10%10+48;
   IC_DAT[i--]=t1/100%10+48;
   IC_DAT[i--]=t1/1000%10+48;
   IC_DAT[i--]=t1/10000%10+48;
   IC_DAT[i--]=t1/100000%10+48;
   IC_DAT[i--]=t1/1000000%10+48;
   IC_DAT[i--]=t1/10000000%10+48;
   
   IC_DAT[i--]='=';
   IC_DAT[i--]='1';
   IC_DAT[i--]='t';
   IC_DAT[i--]='S';
   
   
   
   i=47;//第二行
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   
   IC_DAT[i--]=t2%10+48;
   IC_DAT[i--]=t2/10%10+48;
   IC_DAT[i--]=t2/100%10+48;
   IC_DAT[i--]=t2/1000%10+48;
   IC_DAT[i--]=t2/10000%10+48;
   IC_DAT[i--]=t2/100000%10+48;
   IC_DAT[i--]=t2/1000000%10+48;
   IC_DAT[i--]=t2/10000000%10+48;
   
   IC_DAT[i--]='=';
   IC_DAT[i--]='2';
   IC_DAT[i--]='t';
   IC_DAT[i--]='S';
   
   
   
   i=31;//第三行
   IC_DAT[i--]=t3%10+48;
   IC_DAT[i--]=t3/10%10+48;
   IC_DAT[i--]=t3/100%10+48;
   IC_DAT[i--]=t3/1000%10+48;
   IC_DAT[i--]=t3/10000%10+48;
   IC_DAT[i--]=t3/100000%10+48;
   IC_DAT[i--]=t3/1000000%10+48;
   IC_DAT[i--]=t3/10000000%10+48;
   
   IC_DAT[i--]='=';
   IC_DAT[i--]='1';
   IC_DAT[i--]='S';
   IC_DAT[i--]=' ';
   
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   
   i=63;//第四行
   IC_DAT[i--]=t4%10+48;
   IC_DAT[i--]=t4/10%10+48;
   IC_DAT[i--]=t4/100%10+48;
   IC_DAT[i--]=t4/1000%10+48;
   IC_DAT[i--]=t4/10000%10+48;
   IC_DAT[i--]=t4/100000%10+48;
   IC_DAT[i--]=t4/1000000%10+48;
   IC_DAT[i--]=t4/10000000%10+48;
   
   IC_DAT[i--]='=';
   IC_DAT[i--]='2';
   IC_DAT[i--]='S';
   IC_DAT[i--]=' ';
   
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   IC_DAT[i--]=' ';
   
   initinal();   		 //调用LCD字库初始化程序
   delay(100);            //大于100uS的延时程序
   lcd_mesg(IC_DAT);      //显示中文汉字1
}

⌨️ 快捷键说明

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