lcd.c

来自「cc2430的好串口」· C语言 代码 · 共 412 行 · 第 1/2 页

C
412
字号
       {
         FontSet(1);                                    //调用英文库
         temp[0]=ch[ii];
        //temp[1]='\0';                                 //英文为一个字节
         PutChar(x,y,temp[0],rev);                      //在x,y处显示temp指向的字符
         y+= Y_WChar;                                   //列加
         if((y + Y_WChar) > Lcd_Y_MAX+1)                //是否超过最大列
         {
	   y = 0;                                       //超过,置零
	   if((Lcd_X_MAX - x) <= X_WChar)               //是否超过最大行
	     break;
	  else
	   x+= X_WChar;                                 //若没有超过,行加
         }
           ii++;                                        //指向下一个字符
       }
     }
}
//*******************************清屏函数******************************************//
// 函数    : void ClrScreen(INT8U Mode)
// 描述    : 清屏函数,执行全屏幕清除或填充前景色
// 入口参数: Mode   0:全屏除屏
//		    1:全屏填充前景色(每行一条线)
// 出口参数: 无
//*********************************************************************************//
void ClrScreen(INT8U Mode)
{
     if(Mode==0)
       LCD_Fill(0,0,Lcd_X_MAX>>3,Lcd_Y_MAX,Lcd_Init_Color);
     else
       LCD_Fill(0,0,Lcd_X_MAX>>3,Lcd_Y_MAX,BMP_Color);
}
//*******************************刷新屏幕*****************************************//
// 函数    : void RefreshScreen(void)
// 描述    : 刷新屏幕,用于设置的更新
// 入口参数: 无
// 出口参数: 无
//********************************************************************************//
void RefreshScreen(void)                                //刷新屏幕,用于设置的更新
{
     if(LcdMode)                                        //进入节电模式
     {
       LcdRegWrite(Lcd_OFF);                            //LCD关闭,进入节电模式
       LcdRegWrite(Lcd_ALL_LIGNT);		        //全屏点亮/变暗指令
     }
     else
     {
       LcdRegWrite(Lcd_ON);
       LcdRegWrite(Lcd_ALL_LOW);
     }
     LcdRegWrite(Lcd_ELE_VOL);		                 //电量设置模式(显示亮度)
     LcdRegWrite(LcdLum);		                 //显示亮度数据0x00~0x3f
     LcdStatic();
}
//*******************************静态指示器状态**********************************//
// 函数    : void LcdStatic(void)
// 描述    : 静态指示器状态,0=关;1=0.5s闪烁;2=1s闪烁;3=all on
// 入口参数: 无
// 出口参数: 无
//********************************************************************************//
void LcdStatic(void)
{
     if(LcdStaticMode)
     {
       LcdRegWrite(Lcd_STATIC_ON);                      //静态指示器开
       switch(LcdStaticMode)
       {
         case 1:
           LcdRegWrite(0x01);                           //0.5s闪烁
           break;
         case 2:
           LcdRegWrite(0x02);                           //1s闪烁
           break;
         case 3:
           LcdRegWrite(0x03);                           //0.5s闪烁
           break;
         default:
           break;
        }
      LcdRegWrite(Lcd_STATIC_OFF);                     //静态指示器关
     }
}
//***********************************填充函数************************************//
// 函数: void LCD_Fill(INT8U x1,INT8U y1,INT8U x2,INT8U y2,INT8U color)
// 描述: 会屏填充以Data的数据至各点中
// 参数: Data   要填充的颜色数据
// 返回: 无
// 备注: 仅在LCD初始化程序当中调用,可以用于清除某一行,或列
//*******************************************************************************//
void LCD_Fill(INT8U x1,INT8U y1,INT8U x2,INT8U y2,INT8U color)
{
     INT8U i,j;
     for(i=x1; i<=x2; i++)                             //显示x1-x2的每一行
       for(j=y1; j<=y2; j++)                           //显示j1-j2的每一列
       {		
	 SetRamAddr(i,j);
	 LcdDataWrite(color);
	}
}
//*********************************显示图片函数***********************************//
// 函数: void LcdBMP(INT8U x1,INT8U y1,INT8U x2,INT8U y2,INT8U *bmp)
// 描述: 在(x1,y1;x2,y2)处显示一张图片.
// 参数: (x1,y1)=起点;(xw,yw)=宽度:高度如128*64,bmp[]=图片指针
// 返回: 无
// 备注: 无
//*******************************************************************************//
void LcdBMP(INT8U x1,INT8U y1,INT8U yw,INT8U xw,INT8U *bmp)
{
     INT8U i,j;
     xw=xw>>3;
     for(i=x1; i<=x1+xw-1; i++)                             //显示x1-x2的每一行
       for(j=y1; j<=y1+yw-1; j++)                           //显示j1-j2的每一列
       {		
	 SetRamAddr(i,j);
	 LcdDataWrite(*bmp);
         bmp++;
	}
}


//*******************************lcd位置选择*************************************//
//函数名:void SetRamAddr (INT8U Page, INT8U Col)
//功能  :lcd位置选择
//输入  :Page-页,Col-列
//输出  :无
//*******************************************************************************//
void SetRamAddr (INT8U Page, INT8U Col)
{
     LcdRegWrite(0xB0 + Page);
     LcdRegWrite(Col & 0x0f);                          //先写低位
     LcdRegWrite(0x10 | ((Col & 0xf0) >> 4));          //再写高位
}
//*********************************显示数据字节RAM写入****************************//
// 函数    : void LcdDataWrite(INT8U Data)
// 描述    : 显示数据字节RAM写入
// 入口参数: 数据(字节)
// 出口参数: 无
//********************************************************************************//
void LcdDataWrite(INT8U Data)
{
     Lcd_CS_CLR;                                        //片选选通
     Lcd_A0_SET;                                        //数据命令选通
     LcdDataSend(Data);
}
//*********************************控制寄存器写入***********************************//
// 函数    : void LcdRegWrite(INT8U Command)
// 描述    : 控制寄存器字节写入
// 入口参数: 命令(字节)
// 出口参数: 无
//**********************************************************************************//
void LcdRegWrite(INT8U Command)
{
     Lcd_CS_CLR;                                        //片选选通
     Lcd_A0_CLR;                                        //控制命令输出选通
     LcdDataSend(Command);
}
//********************************单个字节写入**************************************//
// 函数    : void LcdDataSend(INT8U Data)
// 描述    : 单个字节写入
// 入口参数: 一个字节
// 出口参数: 无
//**********************************************************************************//
void LcdDataSend(INT8U Data)
{
     unsigned char Num;
     for(Num=0;Num<8;Num++)                            //向SDI串行线发送一个字节
     {
        if((Data&0x80)==0)
	        Lcd_SDI_CLR;                           //串行数据输出"0"
        else
	        Lcd_SDI_SET;                           //串行数据输出"1"
        Data = Data << 1;
	Lcd_CLK_CLR;                                   //上升沿发送数据
        //asm("nop");                                  //若CPU频率高于LCD读写频率时在这里加入延时
	Lcd_CLK_SET;
     }
	Lcd_CS_SET;                                    //片选不选通
}
//************************************复位******************************************//
// 函数    : void LcdReset(void)
// 描述    : 复位LCD
// 入口参数: 无
// 出口参数: 无
//**********************************************************************************//
//void LcdReset(void)
//{
//    Lcd_RES_CLR;
//    LcdDelay(200);
//    Lcd_RES_SET;
//}
//*****************************LCD用延时函数****************************************//
// 函数    : void LcdDelay(INT8U n)
// 描述    : 延时函数
// 入口参数: 常数n
// 出口参数: 无
//**********************************************************************************//
//void LcdDelay(INT8U n)
//{
//       unsigned char i;
//       for(i=0;i<n;i++)
//         asm("nop");
//}	
//**********************************************************************************//

   		    				

⌨️ 快捷键说明

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