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

📄 lcddisp.c

📁 基于ARM的44B0开发板的按键LCD程序的原代码
💻 C
字号:

/*
管脚对应表

液晶模块    44b0开发板

4	         4
5	         5
6            6 
其余都是电源,和信号无关,具体看说明

*/



/* File:LCDDISP.C
* 功能:使用硬件SPI接口输出LCD显示。
****************************************************************************/
#include "option.h"
#include "def.h"
#include "44b.h"
#include "44blib.h"

#include "picturemap.h"
#define displaycommand 0xfa
#define   LCD_CS       0x80           /* vd4 LCD的片选 */
#define controlcommand    0xf8
typedef unsigned long uint32;
typedef unsigned char uint8;
typedef unsigned short uint16;
 short displaybuffer[64][8];
void delay(unsigned long  dly);
void  Blink(int row);
void  TextDisplayInit(void);
void displaypicture(void);

#define LCDDATA  0x40    //p0.19  vd5
#define LCDCLK   0x20    //p0.17 vd6
/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<500000; i++);
}



/****************************************************************************
* 名称:LCDIni()

****************************************************************************/

void  LCDIni(void)
{ 

				// 管脚功能设置
     rPCONC&=0xffff00ff;	
    rPCONC|=0x5500;    // 
}



/****************************************************************************
* 名称:SendData()
* 功能:向LCD发送数据。
* 入口参数:data        待发送的数据

****************************************************************************/
void  SendData(uint8 data)
{ int i;
for(i=0;i<8;i++){
  if(((data<<i)&0x80)==0x80)
 rPDATC|=LCDDATA;//set dataline high
 else 
  rPDATC&=~LCDDATA; 
  delay(2); 
  rPDATC&=~LCDCLK;
  delay(2);
  rPDATC|=LCDCLK;
  
   ; //set dataline low 
  //  SSPDR = data;
  // while( 0==(SSPSR&0x80) );		// 等待SPIF置位,即等待数据发送完毕
   
  }
   
}


/****************************************************************************
*名称 SendLCD()
* 功能:向LCD发送数据或命令。
* 入口参数:data    待发送的数据,命令/数据选择 1 命令 0 数据
***************************************************************************/
void SendLcd(uint8 data,uint8 flag)
{
uint8 firstbyte,secondbyte;


   LCDIni() 	;		    // 初始化LCD接口
firstbyte=data&0xf0;
secondbyte=data<<4;
secondbyte=secondbyte&0xf0;


rPDATC|= LCD_CS; 		    // 片选
if(flag==1)
SendData(controlcommand);
if(flag==0)
SendData(displaycommand);

SendData(firstbyte);


SendData(secondbyte);

     rPDATC&=~LCD_CS;	
         
}




void DisplayChineseword(unsigned short int x,unsigned short int y,unsigned int chineseword) //在x,y位置的一个汉字显示
{


	unsigned int i;
	char i1,i2;  
   i=(unsigned int)chineseword;
   i2=i;
   i1=i>>8;
   switch(x){
   case 0:
     SendLcd(0x80+y,1);               //DD RAM 地址给定
     break;
    case 1:
     SendLcd(0x90+y,1);               //DD RAM 地址给定
     break;
       case 2:
     SendLcd(0x88+y,1);               //DD RAM 地址给定
     break;
      case 3:
     SendLcd(0x98+y,1);               //DD RAM 地址给定
     break;
   }
     SendLcd(i1,0);   
     SendLcd(i2,0);
      
         
}
void printsentence(unsigned short int x,char *p)//xdenotes the start line  the 12864module is 4 line and 8 column
{
unsigned int chineseword;
unsigned short int temp1,temp2,i;
 //LCD初始化开始
  
    DelayNS(2);
   SendLcd(0x06,1);                //;DDRAM的地址计数器(AC)加1
 //LCD初始化结束
for( i=0;i<8;i++)
{
temp1=(unsigned short int)*p++;
temp2=(unsigned short int)*p++;
chineseword=temp1;
chineseword=(chineseword<<8)|(unsigned int)temp2;
//chineseword=(unsigned int);
DisplayChineseword(x,i,chineseword);
   }
}
void printdot(int x,int y)//x and y is 128*64
{



   displaybuffer[x][y/16]|=0x8000>>(y%16);
 
}

void clearpicture()
{
int i,j;

   SendLcd(0x32,1);              // 功能设置---8BIT控制界面,绘图显示ON
  
  SendLcd(0x36,1);                 //功能设置---8BIT控制界面,扩充指令集
  
 SendLcd(0x34,1);                //关显示

   


 for(i=0;i<64;i++)
     for(j=0;j<8;j++)
          
      displaybuffer[i][j]=0;
      
  


   // SendLcd(0x36,1);          //开显示

}

void clearsentence(){
  SendLcd(0x30,1);                 //功能设置---8BIT控制界面,基本指令集
   SendLcd(0x0c,1);              //显示打开,光标关,反白显示关 
   SendLcd(0x01,1);                 //清除屏幕显示,将DDRAM的地址计数器归零
    DelayNS(2);
}

void printxy(int x,int y,int Bold)
{
if(x<0) x=0;
if(y<0) y=0;
if(x>127) x=127;
if(y>63) y=63;
if(Bold==0) 
printdot(64-y,x);
else {printdot(64-y,x);
printdot(64-y+1,x);

}
}




void line_y(int startX,int startY,int length)
{
int i;
for (i=startX;i<length;i++)
     printdot(i,startY);
}

void line_x(int startX,int startY,int length)
{
int i;

 
SendLcd(0x34,1);                //关显示
for (i=startY;i<length;i++)
     printdot(startX,i);
SendLcd(0x36,1);                //关显示     
}

void graphshow()        //在LCD输出显示buffer的内容
{ int i,j;

 SendLcd(0x30,1);//基本命令
 SendLcd(0x02,1)   ;//地址归位 
    SendLcd(0x36,1);    //    8BIT控制界面,扩充指令集
     SendLcd(0x32,1);     // 功能设置---8BIT控制界面,绘图显示ON
   SendLcd(0x34,1);                //关显示
   SendLcd(0x34,1);                //关显示
  
  for(i=0;i<64;i++)
     for(j=0;j<8;j++)
    {
   SendLcd(0x80+i%32,1);                //设置绘图区的Y地址坐标
   
 
   
   SendLcd(0x80+(j+((int)(i/32))*8)%128,1) ;              //设置绘图区的X地址坐标
  SendLcd(displaybuffer[i][j]>>8,0);
  SendLcd(displaybuffer[i][j],0);

    }

       
   
  SendLcd(0x36,1);          //开显示
   
  }
  
  
 void  TextDisplayInit()
  {
   
   SendLcd(0x30,1);                 //功能设置---8BIT控制界面,基本指令集
   SendLcd(0x0c,1);              //显示打开,光标关,反白显示关 
   SendLcd(0x01,1);                 //清除屏幕显示,将DDRAM的地址计数器归零
   SendLcd(0x02,1);
   
  }


 

  void displaypicture( )
  {
  int i,j,temp1,temp2;
//  linex(0,0,20);
  for(i=0;i<64;i++)
     for(j=0;j<8;j++)
      {     
      temp1 =0x00;
      temp2=temp1|picture[i][j*2];
      temp2=temp2<<8;
      temp1=temp2|picture[i][j*2+1];
      displaybuffer[i][j]=temp1;
      }
  }
  
  
  //发白显示
void  Blink(int row)
  {int i,j;
 
    SendLcd(0x34,1);                //关显示

  for(i=0;i<64;i++)
     for(j=0;j<8;j++)
    {
   SendLcd(0x80+i%32,1);                //设置绘图区的Y地址坐标
   
 
   
   SendLcd(0x80+j+((int)(i/32))*8,1) ;              //设置绘图区的X地址坐标

if((row*16<i)&&(i<(row+1)*16) ){  SendLcd(0xff,0);
       SendLcd(0xff,0);
    }
  else{
  SendLcd(0x0,0);
  SendLcd(0x0,0);
  };
     SendLcd(0x36,1);                 //功能设置---8BIT控制界面,扩充指令集

    }

   
  
  }
  
  
void flash(int location){
if(location!=0)
{
SendLcd(0x30,1);//基本指令
//SendLcd(0x,1);//
SendLcd(0xf,1);//游标开
SendLcd(0x7,1);
SendLcd(0x80+location,1);

}




;
}

void delay(unsigned long i)
{

for(i;i>0;i--);
}

⌨️ 快捷键说明

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