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

📄 lcd.c

📁 cc2430的好串口
💻 C
📖 第 1 页 / 共 2 页
字号:

/**************************************LCD.C*******************************************
文件名  :      LCD.C
目标    :      cc2430
创建日期:      2008/04/24
修改日期:      2008/04/25
版本    :      version 1.0
作者    :      王坤朋
功能描述:      提供LCD与用户应用程序的接口,此文件提供了操作LCD的接口函数.
***************************************************************************************/
//***********************************头文件*******************************************//
#include "LCD.H"
//************************************变量********************************************//
INT8U  X_WChar;			                      //字符写入时的宽度
INT8U  Y_WChar;			                      //字符写入时的高度
INT8U  Font_Wrod;                                     //字体的每个字模占用多少个存储单元数
INT8U  *Char_TAB;		                      //字库指针
INT8U  BMP_Color;                                     //前景色
INT8U  LcdLum;                                        //量度调整
INT8U  LcdMode;                                       //省电模式,0=正常显示;1=睡眠模式;2=备用模式
INT8U  LcdStaticMode;                                 //静态指示器状态,0=关;1=0.5s闪烁;2=1s闪烁;3=all on
//***********************************函数声明*****************************************//
//全局函数,可以供应用程序调用
void LcdInit(void);                                   //LCD初始化
void FontSet(INT8U mode);                             //设定字体
void PutEnChar(INT8U x,INT8U y,INT8U word,INT8U rev); //向LCD输出单个英文字符
void PutCChar(INT8U x,INT8U y,INT8U ch[],INT8U rev);  //向LCD输出单个汉字字符
void PutString(INT8U x,INT8U y,INT8U *p,INT8U rev);   //向LCD输出字符串
void LcdBMP(INT8U x1,INT8U y1,INT8U xw,INT8U yw,INT8U *bmp);//向LCD输出一张图片
void ClrScreen(INT8U Mode);                           //清屏
void RefreshScreen(void);                             //刷新屏幕,用于设置的更新
void LCD_Fill(INT8U x1,INT8U y1,INT8U x2,INT8U y2,INT8U color);//LCD填充颜色
void LcdStatic(void);                                 //静态指示器状态,0=关;1=0.5s闪烁;2=1s闪烁;3=all on
//内部函数,只供内部调用
//void LcdReset(void);                                //复位
void PutChar(INT8U x,INT8U y,INT8U word,INT8U rev);   //向LCD输出单个字符
void SetRamAddr (INT8U Page, INT8U Col);              //设定显示页:列
void LcdDataWrite(INT8U Data);                        //向LCD写一个字节
void LcdRegWrite(INT8U Command);                      //控制寄存器字节写入
void LcdDataSend(INT8U Data);                         //向LCD写一位
//void LcdDelay(INT8U n);                             //延时函数
//************************************LCD初始化***************************************//
// 函数: void  LcdInit(void)
// 描述: LCD的初始化设置
// 入口参数: 无
// 出口参数: 无
// 例如: LcdInit();
//************************************************************************************//
void LcdInit(void)
{
     Lcd_DIR;                                            //端口初始化
     Lcd_PORT;

     FontSet(1);                                         //字符设置
     BMP_Color=0x55;                                     //显示屏初始化

     LcdLum=0x0A;                                        //显示亮度数据0x00~0x3f
     LcdMode=0;                                          //正常显示模式
     //LcdReset();                                       //复位操作

     LcdRegWrite(Lcd_ON);                                //LCD On
     LcdRegWrite(Lcd_POWER_ALL);	                 //设置上电控制模式
     LcdRegWrite(Lcd_ELE_VOL);		                 //电量设置模式(显示亮度)
     LcdRegWrite(LcdLum);		                 //显示亮度数据0x00~0x3f
     LcdRegWrite(Lcd_SETR_7);		                 //内部电压调节电阻设置
     LcdRegWrite(Lcd_BIAS_7);		                 //LCD偏压设置,V3时选
     LcdRegWrite(Lcd_COM_REV);		                 //Com 扫描方式设置
     LcdRegWrite(Lcd_SEG_NOR);		                 //Segment方向选择
     LcdRegWrite(Lcd_ALL_LOW);		                 //全屏点亮/变暗指令
     LcdRegWrite(Lcd_ALL_NOR);		                 //正向反向显示控制指令
     LcdRegWrite(Lcd_STATIC_OFF);	                 //关闭静态指示器
     LcdRegWrite(0x00);			                 //指令数据
     LcdRegWrite(Lcd_BEGIN_LINE);	                 //设置显示起始行对应RAM
     LcdRegWrite(0xe0);                                  //设置读写改模式,结束为0xee
}
//**********************************设置显示字体******************************************//
// 函数: void FontSet(INT8U mode)
// 描述: 设置显示字体
// 入口参数:  模式(0:汉字;1:英文):使用的字库指针
// 出口参数: 无
// 说明: 在显示字符之前调用此函数.
// 例如:选用16*16点阵的汉字字库FontNew16X16--->FontSet(0);
//***************************************************************************************//
void FontSet(INT8U mode)
{
    if(mode)
    {
      Font_Wrod = 6;	                                //每个字模占的存储单元数
      Y_WChar=6;                                        //字符写入时的宽度
      X_WChar=1;                                        //字符写入时的高度
      Char_TAB = (INT8U *)(Ascii0608-(INT8U *)(32*6)); //字库指针
    }
    else
    {
      Font_Wrod = 32;	                                //汉字每个字模占的存储单元数
      Y_WChar=16;                                       //字符写入时的宽度
      X_WChar=2;                                        //字符写入时的高度
      Char_TAB = (INT8U *)FontCC1616;                  //字库指针
    }
}

//**********************************输出单个汉字字符**************************************//
// 函数: void PutEnChar(INT8U x,INT8U y,INT16U ch[],INT8U rev)
// 描述: 在X,Y坐标处输出一个字符,x:行,y:列,word:字符,rev:是否反黑显示(0=NO,1=YES)
// 入口参数:  x:行,y:列,ch:汉字字符,rev:是否反黑显示
// 出口参数: 无
//***********************************************************************************//
void PutEnChar(INT8U x,INT8U y,INT8U word,INT8U rev)
{
     FontSet(1);
     PutChar(x,y,word,rev);
}
//**********************************输出单个字符**************************************//
// 函数: void PutChar(INT8U x,INT8U y,INT8U word,INT8U rev)
// 描述: 在X,Y坐标处输出一个字符,x:行,y:列,word:字符,rev:是否反黑显示(0=NO,1=YES)
// 入口参数:  x:行,y:列,word:字符,rev:是否反黑显示
// 出口参数: 无
//***********************************************************************************//
void PutChar(INT8U x,INT8U y,INT8U word,INT8U rev)
{
     INT8U i,j;
     INT8U *p_data;
     p_data = Char_TAB + word*Font_Wrod;                //要写字符的首地址
     for(j=0;j<X_WChar;j++)                             //是否大于最大行
     {
       if((x+j) <=(Lcd_X_MAX>>3))                       //是否超过最大行
       {
         SetRamAddr(x+j,y);
         for(i=0;i<Y_WChar;i++)                         //是否超过最大列
         {
	   if((y+i) <=Lcd_Y_MAX)
             if(rev)
	       LcdDataWrite(~*p_data++);               //在此处显示反黑字符
             else
               LcdDataWrite(*p_data++);                //在此处显示字符
         }
       }
    }
}
//**********************************输出单个汉字字符**************************************//
// 函数: void PutCChar(INT8U x,INT8U y,INT16U ch[],INT8U rev)
// 描述: 在X,Y坐标处输出一个字符,x:行,y:列,word:字符,rev:是否反黑显示(0=NO,1=YES)
// 入口参数:  x:行,y:列,ch:汉字字符,rev:是否反黑显示
// 出口参数: 无
//***********************************************************************************//
void PutCChar(INT8U x,INT8U y,INT8U ch[],INT8U rev)
{
     INT8U CCpoint;
     INT8U ii;
     INT8U adder;
     CCpoint = 0;
     ii=0;
     adder = 1;                                         //如果能找到,首地址必是偶数.为1未找到.
     while(FontCC16_Index[CCpoint] > 160)               //是汉字内码
     {
	if(FontCC16_Index[CCpoint] == ch[ii]&&
           FontCC16_Index[CCpoint + 1] == ch[ii + 1])   //相等
        {
	  adder=CCpoint;
          break;                                        //找到,结束循环
        }
          CCpoint += 2;                                 //未找到,指向下一位
     }
     if(adder!=1)                                       //找到汉字位置
     {
       FontSet(0);                                      //调用中文库
       PutChar(x,y,adder>>1,rev);
     }
     else
     {
       PutString(x,y,"  ",rev);
       PutString(x+1,y,"  ",rev);
     }
}
//*********************************输出字符串****************************************//
// 函数: void PutString(INT8U x,INT8U y,INT8U *p,,INT8U rev)
// 描述: 在X,Y坐标处输出一个字符串,x:行,y:列,*p:字符指针,rev:是否反黑显示(0=NO,1=YES)
// 说明: 在X,Y坐标处输出一个字符串.
// 入口参数: X:Y:Pointer:rev
// 出口参数: 无
//***********************************************************************************//
void PutString(INT8U x,INT8U y,INT8U ch[],INT8U rev)
{
     INT8U temp[3];
     INT8U ii;
     ii=0;
     while(ch[ii]!='\0')
     {
       if(ch[ii]>160)                                    //是汉字
       {
         temp[0]=ch[ii];
         temp[1]=ch[ii+1];
         temp[2]='\0';                                  //汉字为两个字节
         PutCChar(x,y,temp,rev);
         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+=2;
       }
       else

⌨️ 快捷键说明

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