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

📄 lcd_12864.c

📁 基于32位ColdFire构建嵌入式系统书本原程序.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
//--------------------------------------------------------------------------*
//文件描述:本文件包含了液晶显示相关子程序,分别为:                           *  
//(1)Lcdinit:液晶初始化子程序                                               *
//(2)LcdShCh:在液晶显示屏上显示字符数据                                     *
//(3)LcdShGrRe:在Lcd的指定行上显示或取消矩型边框                            *
//(4)LcdDrawCircle:在Lcd上显示或取消空心圆型                                   *
//--------------------------------------------------------------------------*

//包含头文件 
#include "QSPI.h"
#include "LCD_12864.h"

//这是驻留在SRAM中的显示缓冲区,其大小为ROW*COL个字节,用户可以根据LCD的类型来
//决定LcdBuffer大小
static uint8 LcdBuffer[ROW][COL];

//这个数组用于标志相应的行是否刷新。如果某行的WriteEnable=1则LCD服务程序加载
//LcdBuffer的相应行到LCD模块中。
static uint8 LcdRowWriteEnable[ROW];
//内部调用函数声明
//在Lcd指定位置上设置线型16个点的显示
void LcdDrawDot16(uint8,uint8,int16);
//在Lcd指定位置上画1个点
void LcdDrawDot(uint8,uint8);
void DelayusTimes(uint16);                //延时指定时间
void LcdSendCommand(uint8);               //将控制命令写入Lcd
void LcdSendData(uint8);                  //将数据写入Lcd
void LcdDrawClear(void);                    //在Lcd上清图形显示屏

//-------------------------------------------------------------------------*
//函数名: strlen()                                                         *
//功  能: 计算字符串长度                                                   *
//参  数: str:字符串                                                      *     
//返  回: 输入的字符串长度                                                 * 
//说  明: 无                                                               *
//-------------------------------------------------------------------------*
uint8  strlen(uint8  *str) 
{ 
	uint8  i=0; 
	while(*(str+i)!='\0') 
	{ 
		i++; 
	} 
	return i; 
} 

//-------------------------------------------------------------------------*
//函数名: LCD_init                                                         *
//功  能: LCD初始化                                                        *
//参  数: 无                                                               *     
//返  回: 无                                                               * 
//说  明:                                                                  *
//-------------------------------------------------------------------------*
void LCD_init()
{

    QSPI_init(para);      //初始化SPI接口,使用8位数据格式,不使用中断
   	LcdSendCommand(0x30);//功能设定:基本指令集动作
    LcdSendCommand(0x02);//位址归位:设置 AC 为 0, 且移动光标到0
	LcdSendCommand(0x04);//设置光标移动方向
	LcdSendCommand(0x0c);//设置不显示光标
	LcdSendCommand(0x01);//清除显示
	LcdSendCommand(0x80);//设置DDRAM地址到AC
	DelayusTimes(1600);  //延时>1.6ms
    LcdSendCommand(0x06);//进入模式设定
    LcdDrawClear();        //清Lcd图形显示屏,要花点时间的
}

//-------------------------------------------------------------------------*
//函数名: LCD_DisplayBuf()                                                 *
//功  能:显示缓存                                                          *
//参  数:无                                                                *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void LCD_DisplayBuf()
{
	uint8 i, j;
	for (i = 0; i < ROW; i ++)
	{
		if (LcdRowWriteEnable[i]) //允许该行刷新
		{
				LcdSendCommand(0x80+ ((i&0x1)<<4) + ((i>>1)<<3));//移动光标
			for (j = 0; j < COL; j ++)
			{	
				//每行16 个字符
				LcdSendData(LcdBuffer[i][j]);//刷新新的数据到控制器
			}
				LcdRowWriteEnable[i] = 0;    //显示完之后禁止这一行
		}
	}
}

//-------------------------------------------------------------------------*
//函数名: LcdShowStringData                                                *
//功  能: 在液晶显示屏上显示字符串(靠左端)和数据(靠右端),总字符数不大于16 *
//参  数: row: 行号,取值0-3                                               *
//        LcdSBuff: 待显示的字符串首地址                                   *
//        data:待显示的数据,取值0-255                                     *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void LcdShowStringData(uint8 row, uint8  *LcdSBuff,uint8  data)
{
    uint8  i,len,ch1,ch2,ch3,tmp;
    switch (row){
        case 0:  
             LcdSendCommand(0x80);
             break;
    	case 1:
             LcdSendCommand(0x90);
             break;
       	case 2:
             LcdSendCommand(0x88);
             break;
       	case 3:
             LcdSendCommand(0x98);
             break;
        default:
             break;
   }   
    tmp = data;
    len = strlen(LcdSBuff);
    ch1 = ' ';
    ch2 = ' ' ;
    ch3 = ' ' ;
    if(tmp >= 100)
    {
       i = tmp/100;
       ch1 = '0' + i;
       tmp = tmp - i*100;
    }
    if(tmp >= 10)
    {
        i = tmp/10;
        ch2 = '0' + i;
        tmp = tmp - i*10;
     }
     ch3 = '0'+tmp;
     for(i=0;i<len;i++)
    	    LcdSendData(LcdSBuff[i]);
     for(;i<13;i++)
    	    LcdSendData(' ');
    LcdSendData(ch1);
    LcdSendData(ch2);
    LcdSendData(ch3);
       
}
//-------------------------------------------------------------------------*
//函数名: LcdShowString                                                    *
//功  能:在液晶显示屏上显示以LcdSBuff为首地址的16个字符,左对齐             *
//       注意:1个汉字相当于2个英文字符                                    *
//参  数:      row: 行号,取值0-3。若>4则认为4。                           *
//             pos: 显示的起始位置                                         *
//        LcdSBuff: 待显示的字符串首地址                                   *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void LcdShowString(uint8 row, uint8 pos, uint8  *LcdSBuff)
{
   uint8  i,len;
    switch (row){
        case 0:  
             LcdSendCommand(0x80+pos);
             break;
    	case 1:
             LcdSendCommand(0x90+pos);
             break;
       	case 2:
             LcdSendCommand(0x88+pos);
             break;
       	case 3:
             LcdSendCommand(0x98+pos);
             break;
        default:
             break;
   }   
   len = strlen(LcdSBuff);
   for(i=0;i<len;i++)
   {
      LcdSendData(LcdSBuff[i]);
   }
   //余下的位置填补空格,否则显示上一行后面的字符
   for(;i<16-pos*2;i++)
   {
      LcdSendData(' ');
   }

}

/*========[Lcd画图操作:包括画圆,画矩形框,图形清屏,画点等]==============*/
//-------------------------------------------------------------------------*
//函数名: LcdDrawCircle()                                                  *
//功  能:在Lcd上的指定位置显示或取消空心圆型                               *
//参  数:Cx为圆心横坐标,Cy为圆心纵坐标                                     *
//       CR为圆的半径,GrE确定图形是否有效                                  *
//       GrCilMV为显示圆型时的正误差值                                     *
//       例如:半径为10,误差为4;半径为30,误差为30                        *
//返  回:无                                                                *
//-------------------------------------------------------------------------*

⌨️ 快捷键说明

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