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 + -
显示快捷键?