欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LCD 1622

程序员文章站 2022-03-05 11:35:59
...

应用三 便携式甲醛检测仪(下)— HT1622
ht1622应用笔记
tm1622
LCD_HT1622_16SegLcd_demo_driver.ino
HT1622.cpp
段码液晶屏的偏压有几种,有什么区别?
段式液晶程序设计技巧

注意使用芯片的控制信号的高低电平限制:
HT1622 (如果要使用3.3V信号控制,需要电平转换,控制口使用OD输出,外接5V上拉电阻) ⬇⬇⬇⬇⬇⬇
LCD 1622
TM1622 (可以使用3.3V控制信号控制) ⬇⬇⬇⬇⬇⬇
LCD 1622

SEG口波形⬇⬇⬇⬇⬇⬇
LCD 1622
COM1口波形⬇⬇⬇⬇⬇⬇
LCD 1622
COM8口波形⬇⬇⬇⬇⬇⬇
LCD 1622
头文件

#ifndef _LCD1622_H_
#define _LCD1622_H_
#include "main.h"

#define  SYSDIS   0X00		//0000_0000_X	关闭系统振荡器和LCD偏压发生器
#define  SYSEN    0X01		//0000_0001_X	打开系统振荡器
#define  LCDOFF   0X02		//0000_0010_X  	关闭LCD
#define  LCDON    0X03		//0000_0011_X 打开LCD
#define  INRC     0X18		//0001_10XX_X 内部时钟
#define  NORMAL   0XE3		//1110-0011-X 正常模式
  
//函数声明
void LCD1622Wr(uchar data,uchar cnt);
void LCD1622Wr_byte(uchar addr,uchar data);
void LCD1622Wr_AllData(uchar addr,uchar *p,uchar cnt);
void LCD1622Wr_cmd(uchar cmd);
void LCD1622_init();

void lcd_clr0(uint8_t Data);
void LCD1622_all_off(void);

extern uchar lcdnum[32];

#endif

特别说明:
LCD_RD_H;//如果使用了RD接口,在写入数据时,RD必须为高电平,否则无法写入数据(写入指令正常,写入显示数据不正常)



#include "lcd1622.h"
#include "gpio.h"
#include "tim.h"



/**
* @brief  数据写入时序
* @param  Data为数据,cnt为传送数据位数,数据传送低位在前
* @retval none
* @notice 1622的写入地址是从高位开始写,数据是从低位开始写
在写入数据的时候要注意数组对应的寄存器位;
*/
void LCD1622Wr(uchar data,uchar cnt)
{
  uchar i;
  for(i=0;i<cnt;i++)
  {
    HAL_Delay_US(10);
    LCD_WR_L;
    HAL_Delay_US(10);
    if(data&0x80)
      LCD_DATA_H;
    else 
      LCD_DATA_L;
    HAL_Delay_US(10);
    LCD_WR_H;
    HAL_Delay_US(10);
    data <<= 1;
  }
}

/**
* @brief  LCD1622在指定地址写入数据函数
* @param  addr为写入初始地址,dat为写入数据
* @retval none
* @notice LCD1622的数据为4位,并且是低位开始写,注意写入方向是高位开始写
*/
void LCD1622Wr_OneData(uchar addr,uchar data)
{
  addr <<= 2;
  data <<= 4;
  LCD_CS_L;
  LCD1622Wr(0xa0,3);			//写入命令101
  LCD1622Wr(addr,6);			//写入地址
  LCD1622Wr(data,4);			//写入数据
  LCD_CS_H;
  HAL_Delay_US(5);
  HAL_Delay_US(5);
}


/**
* @brief  LCD1622连续写入方式函数
* @param  addr为写入初始地址,dat为写入数据,cnt为写入数据总数(byte)
* @retval none
* @notice LCD1622的数据为4位,并且是低位开始写,注意写入方向是高位开始写
*/
void LCD1622Wr_AllData(uchar addr,uchar *p,uchar cnt)
{
  uchar i,j;
  addr <<= 2;
  LCD_CS_L;
  LCD1622Wr(0xa0,3);			//写入命令
  LCD1622Wr(addr,6);			//写入地址
  for(i=0;i<cnt;i++)
  {
    LCD1622Wr(*p,8);		//写入数据
    p++;
  }
  LCD_CS_H;
  HAL_Delay_US(5);

}

  
void LCD1622_all_off(void)
{ 
  uchar i;
  uchar addr=0;
  for(i=0;i<32;i++)
  {
    LCD1622Wr_OneData(addr,0);
    addr+=1;
  }
}

    
    
/********************************************************
函数名称:void Ht1622WrCmd(u8 Cmd)
功能描述: LCD1622命令写入函数
全局变量:无
参数说明:Cmd为写入命令数据
返回说明:无
说 		明:写入命令标识位100
********************************************************/

/**
* @brief  LCD1622命令写入函数
* @param  cmd(命令后8位)
* @retval 
* @notice 
*/
void LCD1622Wr_cmd(uchar cmd)
{
  LCD_CS_L;
  HAL_Delay_US(5);
  LCD1622Wr(0x80,3);			//写入命令
  LCD1622Wr(cmd,8);			//写入控制命令
  LCD1622Wr(0,1);//写入CMD最后1bit
  LCD_CS_H;
  HAL_Delay_US(5);
}

//LCD1622初始化
void LCD1622_init()
{
  LCD_BK_H;
  LCD_CS_H;
  LCD_WR_H;
  LCD_DATA_H;
  LCD_RD_H;//如果使用了RD接口,在写入数据时,RD必须为高电平,否则无法写入数据(写入指令正常,写入显示数据不正常)
  HAL_Delay_US(5);
  HAL_Delay_US(5);
  LCD1622Wr_cmd(SYSDIS); 			// 关振系统荡器和LCD偏压发生器
  HAL_Delay_US(5);
  LCD1622Wr_cmd(SYSEN); 			// 打开系统荡器和LCD偏压发生器 
  HAL_Delay_US(5);
  LCD1622Wr_cmd(LCDOFF); 			// 关闭LCD显示
  HAL_Delay_US(5);
  LCD1622Wr_cmd(LCDON); 			// 打开LCD显示
  HAL_Delay_US(5);
  LCD1622Wr_cmd(INRC); 			//使用内部振荡器
  HAL_Delay_US(5);
  LCD1622Wr_cmd(NORMAL); 			//正常模式
}

//LCD数据刷新
uchar lcdnum[32];

//清0
void lcd_clr0(uint8_t Data)
{
  uchar i;
  for(i=0;i<32;i++)
  {
    lcdnum[i] = Data;
  }
}

//LCD显示数据
const uchar NumTable1[] = {
  0xee,  //0                 _a_
  0x24,  //1               f|   |b
  0xba,  //2                 _g_
  0xb6,  //3               e|   |c   afbg ecdx
  0x74,  //4                 _d_
  0xd6,  //5
  0xde,  //6
  0xa4,  //7
  0xfe,  //8
  0xf6,  //9	
  0x00,  // 	
};

const uchar NumTable2[] = {
  0x77,  //0                 _a_
  0x24,  //1               f|   |b
  0x5d,  //2                 _g_
  0x6d,  //3               e|   |c   xdce gbfa
  0x2e,  //4                 _d_
  0x6b,  //5
  0x7b,  //6
  0x25,  //7
  0x7f,  //8
  0x6f,  //9	
  0x00,  //	
};

const uchar NumTable3[] = {
  0x77,  //0                 _a_
  0x12,  //1               f|   |b
  0x5d,  //2                 _g_
  0x5b,  //3               e|   |c   xafb gecd
  0x3a,  //4                 _d_
  0x6b,  //5
  0x6f,  //6
  0x52,  //7
  0x7f,  //8
  0x7b,  //9	
  0x00,  //	
};


相关标签: LCD 驱动程序