ST_LCD显示

1、HT1621电路分析
HT1621为32×4即128点内存映像LCD驱动器,包含内嵌的32×4位显示RAM内存和时基发生器以及WDT看门狗定时器.
HT1621驱动电路如下图所示:
在这里插入图片描述在这里插入图片描述在这里插入图片描述 与单片机相连接控制的有9脚CS,3脚WR,12脚DATA,其功能描述如下表。
2、程序
主要的程序编写流程如下
在这里插入图片描述 程序的参考步骤:
①Display_Wendu_1
②write_addr_dat_n_wendu
③write_mode
④write_address
⑤write_data_4bit,
其中Lcdram数组为建立的虚拟数组。
3、显示的保持
写数据过程需要保证写前无关位数据的保持,因此在单片机程序中开辟32×4数组作为虚拟ARM,存储写前LCD显示数据.通过与清零,或置位操作实现,例如6位地址Address当前显示的数据为Data_last .若Xi(i=0,1,2,3) 位需要保持,则Xi为1,否则Xi为0.写入的数据为Data_now,变换公式为:
在这里插入图片描述4、字符显示原理
液晶管点亮和熄灭原理分别为在对应的RAM地址中写1和写0.首先需要清楚所驱动控制的液晶的COM-SEG对应关系,然后需要了解HT1621的32×4RAM地址映射。
例如要控制的液晶的装脚成品图部分如下:
在这里插入图片描述图4
搞清楚我们要控制的对象之后那, HT1621的RAM 地址映射如下图所示:
在这里插入图片描述 可以清楚的看到要控制液晶段对应SEG号作为6位地址,COM号对应作为4位数据写入,此时注意4位数据的高低位。写数据到RAM命令格式为:101+6位RAM地址+4位数据,其中RAM地址为SEG序号.
例如我们在图3的第二个液晶数码管上显示数字,首先我们根据图3得到地址映射关系,先写入地址SEG4中的四位数据(COM3,COM2,COM1,COM0),再写如地址SEG5中的四位数据(COM3,COM2,COM1,COM0),对应关系如下:
在这里插入图片描述

unsigned char Lcdram[32]=
    {
   
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    };

const unsigned char Wendu[] = //温度0-9
    {
      
    0X5F, 0X50, 0X3D, 0X79, 0X72, 0X6B, 0X6F, 0X51, 0X7F, 0X7B 
    };
///驱动函数
/*
*    LCD 模式写入
*    入口:MODE :COM(命令模式) DAT(数据模式)
*    出口:void
*/
void write_mode(unsigned char MODE)    //写入模式,数据or命令
{
   
    GPIO_ResetBits(GPIOB, HT1621_WR);                                //    RW = 0;
    delay_us(10);
    GPIO_SetBits(GPIOB, HT1621_DATA);                                    //    DA = 1;
    GPIO_SetBits(GPIOB, HT1621_WR);                                    //    RW = 1;
    delay_us(10);

    GPIO_ResetBits(GPIOB, HT1621_WR);                                //    RW = 0;
    delay_us(10);
    GPIO_ResetBits(GPIOB, HT1621_DATA);                                //    DA = 0;
    GPIO_SetBits(GPIOB, HT1621_WR);                                    //    RW = 1;
    delay_us(10);

    GPIO_ResetBits(GPIOB, HT1621_WR);                                //    RW = 0;
    delay_us(10);

    if (0 == MODE)
    {
   
        GPIO_ResetBits(GPIOB, HT1621_DATA);                            //    DA = 0;
    }
    else
    {
   
        GPIO_SetBits(GPIOB, HT1621_DATA);                                //    DA = 1;
    }
    delay_us(10);
    GPIO_SetBits(GPIOB, HT1621_WR);                                    //    RW = 1;
    delay_us(10);
}

/*
*    LCD 命令写入函数
*    入口:cbyte ,控制命令字
*    出口:void
*/
void write_command(unsigned char Cbyte)
{
   
    unsigned char i = 0;

    for (i = 0; i < 8; i++)
    {
   
        GPIO_ResetBits
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值