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

📄 lcd.c

📁 12864显示程序(AVR串行接口)
💻 C
字号:
#include "config.h" 

  

/*********************************
**定义坐标
**********************************/
#define LCD_X1    0x80 //X坐标第一行
#define LCD_X2    0x88 //X坐标第二行
#define LCD_Y     0x80 //Y坐标
/*********************************
**定义传送格式
**********************************/
#define LCD_READ  1    //读
#define LCD_WRITE 0    //写
#define LCD_DATA  1    //传数据
#define LCD_COMM  0    //传命令
/*********************************
**定义接线口
**********************************/
#define LCD_CS   PORTE.0   //使能
#define LCD_STD  PORTE.1   //串行数据
#define LCD_SCLK PORTE.2   //串行时钟
#define LCD_PSB  PORTE.5   //高为并行模式,低为串行模式
#define LCD_RST  PORTE.7   //复位           

#define Float_Dpl_Total   6
//#define Clear_Screen(); Post_Com(0x01);

                            
    
    
/***********************
* 函数名称: LcdWrite
** 功能描述: 对LCD写命令或者数据
** 输 入: uint8 read_write:选择read或者write
           uint8 data_comm:选择data或者comm
**         uint8 content:内容
** 输出   : 无
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************/
void LcdWrite(char data_comm,char content)
{       
        char a,i,j,k;
        delay_us(10);
        a=content;
        LCD_SCLK=0;
        LCD_CS=1;
        LCD_STD=1;
        for(i=0;i<5;i++)//5个连续的“1”
        {
                LCD_SCLK=1;
                LCD_SCLK=0;
        }
        //传输方向,读或写        
        /*if(0)
                LCD_STD=LCD_READ;
        else
                LCD_STD=LCD_WRITE;*/
        LCD_STD=LCD_WRITE;              
        LCD_SCLK=1;
        LCD_SCLK=0;        
        if(data_comm)//命令或数据
                LCD_STD=LCD_DATA;
        else
                LCD_STD=LCD_COMM;
        LCD_SCLK=1;
        LCD_SCLK=0;
        LCD_STD=0;//第八位为“0”
        LCD_SCLK=1;
        LCD_SCLK=0;        
        for(j=0;j<2;j++)
        {       
                for(k=0;k<4;k++)
                {
                        a=a<<1;
                        LCD_STD=SREG.0;//依位写入content
                        LCD_SCLK=1;
                        LCD_SCLK=0;
                }
                LCD_STD=0;
                for(k=0;k<4;k++)
                {
                        LCD_SCLK=1;
                        LCD_SCLK=0;
                }
        }
        
        
}

 
/***********************
* 函数名称: LcdInit
** 功能描述: 初始化LCD
** 输 入: 无
** 输出   : 无
** 全局变量: 无
** 调用模块: 
** 说明:
**04:光标左移,DDRAM为读 
**05:光标左移,DDRAM为写 
**06:光标右移,DDRAM为读 
**07:光标右移,DDRAM为写
**08:整体显示OFF,光标显示OFF,光标位置不反白闪烁
**0C:整体显示ON ,光标显示OFF,光标位置不反白闪烁
**0D:整体显示ON ,光标显示OFF,光标位置反白闪烁
**0E:整体显示ON ,光标显示ON,光标位置不反白闪烁
**0F:整体显示ON ,光标显示ON,光标位置反白闪烁
** 注意:
********************/
void LcdInit (void)
{
  LCD_RST=1;
  LCD_PSB=0;
  LcdWrite (LCD_COMM,0x30);  //30---基本指令动作
  LcdWrite (LCD_COMM,0x01);  //清屏,地址指针指向00H
  delay_us(100);
  LcdWrite (LCD_COMM,0x06);  //光标的移动方向
  LcdWrite (LCD_COMM,0x0f);  //开显示,关游标

}

/***********************
* 函数名称: LcdClear
** 功能描述: 清屏
** 输 入: 无
** 输出   : 无
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************/
void LcdClear(void)
{
        LcdWrite(LCD_COMM,0x30);//八位控制接口 基本指令
        LcdWrite(LCD_COMM,0x01);//清除显示 将DDRAM填满“20H”(空格),把DDRAM地址计数器调整为“00H”
        delay_us(250);          //重新进入点设定将I/D设为“1”,光标右移AC加1
}


/***********************
* 函数名称: LcdSetCursor
** 功能描述: 设置光标
** 输 入: 无
** 输出   : 无
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************/
/*void LcdSetCursor(char x,char y)
{
        LcdWrite(LCD_COMM,)
}             */
      
/***********************
* 函数名称: LcdDisplayChn
** 功能描述: 显示汉字或者字符
** 输 入: 无
** 输出   : 无
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************/ 
void LcdDisplayChn(flash unsigned int *chn)//程序区存放指针变量
{
        char i,j;
        LcdWrite(LCD_COMM,0x30);//基本指令
        LcdWrite(LCD_COMM,0x80);//设定DDRAM地址80H——9FH 
        /********************
        LcdWrite(LCD_DATA,0x55); //调试用
        ********************/
        for(i=0;i<4;i++)//4行
        {
             for(j=0;j<16;j++)//16列
             LcdWrite(LCD_DATA,chn[j*16+i]);//逐字写入
        }
}

/***********************
* 函数名称: LcdDisplayString
** 功能描述: 显示字符串
** 输 入: 无
** 输出   : 无
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************/
void LcdDisplayString(flash unsigned char *da)
{
        LcdWrite(LCD_COMM,0x30);
        LcdWrite(LCD_COMM,0x0f);
        for(;*da!='\0';da++)
        {
                LcdWrite(LCD_DATA,*da);
                delay_ms(250);   
                delay_ms(250);
        }
} 

void LcdDisplayFloat(float da)
{
        LcdWrite(LCD_COMM,0x30);
        LcdWrite(LCD_COMM,0x0f);
        LcdWrite(LCD_DATA,da);
        delay_ms(250);   
        delay_ms(250);
} 

/***********************
* 函数名称: LcdDisplayNumber
** 功能描述: 显示数字
** 输 入: float fNum数字
           char i整数位数
           char j小数位数
** 输出   : 无
** 全局变量: 无
** 调用模块: 
** 说明:
** 注意:
********************/
void LcdDisplayNumber(float fNum,char i,char,j)
{
        char n=0;
        float b=1;
        if(i!=1)
        {
                n=i;
                n--;
                while(n)
                {
                        b=10*b;
                        n--;
                }
        }                   
        for(n=0;n<(j+i);n++)
        {
                float a=0;
                a=(fNum/b);
                if(a!=0)
                        fNum=fNum-a*b;
                LcdWrite(LCD_COMM,0x30);
                LcdWrite(LCD_COMM,0x0c);
                LcdWrite(LCD_DATA,a+0x30);
	if(1==b&j!=0)
	{
	wr_lcd(comm,0x30);
	wr_lcd(comm,0x0c);
	wr_lcd(dat,0x23);
	}
	b=b/10;
        }
}   

⌨️ 快捷键说明

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