逻辑图

左边三段数字是温度显示 右边两位是湿度

下面是完整的程序 (io口模拟spi发送数据写给ram)个人理解 水平有限

头文件 lcd.h

#ifndef __LCD__H__
#define __LCD__H__
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define NOP   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_()sbit DATA=P1^0;
sbit W_R=P1^1;
sbit CS=P1^3;
/*************************/
uchar num_data[];
//char flag;
char cache[];
void initial();
void Write_Bits(uchar buffer,uchar i);
void tran_data(uchar *p);
void wave();
void delay(uchar);
void witre_clear();
void write_data_by_8bit(uchar num,uchar ad);
void Write_Temperature(uint t,uchar p1,uchar t46);//温度显示
void Write_Humidity(uint h ,uchar t3);//湿度显示
void Write_Mode(uchar a,uchar m);//AUTO//Manual 模式
void Write_Wifi(uchar h);//wifi显示
void Write_Water(uchar w);//缺水显示
void Write_Level(uchar s7,uchar s14,uchar s21); //风力档位
void Show_cache();//将显存写入HT1621的ram#endif

源文件

#include<reg51.h>
#include<intrins.h>
#include"lcd.h"uchar num_data[]={0xf5,0x05,0xb6,0x97,0x47,0xd3,0xf3,0x85,0xf7,0xd7};//0到9的字库
char cache[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};///显存数组
char flag=1    ;
void initial()
{CS=0;DATA=1;   wave();     //command mode命令模式 配置HT1621DATA=0;   wave();  DATA=0;   wave();Write_Bits(0x18, 8);//RC 256KWrite_Bits(0x00, 8);Write_Bits(0x01, 8);//turn on system oscilator Write_Bits(0x03, 8);//turn on bias generatorWrite_Bits(0x29, 8);//1/3  bias 4 commons//    1/2 bias 3 commons//0x04
//  tran_inst(0xe0);    //turn on lcd outputCS=1;}void write_data_by_8bit(uchar p,uchar ad)
{   unsigned char  i,address=((ad*2)<<2);///对应ram地址 两个4位一写CS=0;DATA=1;wave();//数据模式DATA=0;wave();DATA=1;wave();for(i=0;i<6;i++)6位地址    {  DATA=((address&0x80)==0x80);wave();address<<=1;    }Write_Bits(p,8);
//delay(4);CS= 1;
}void Write_Bits(uchar buffer,uchar j)  //按j位写数据
{           uchar i;for(i=0;i<j;i++){DATA=((buffer&0x80)==0x80);wave();buffer<<=1;}
//  DATA=0;
// wave();                  W_R=1;      }void delay(uchar time)       //延时 50*time ms
{uchar i;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256; TR0=1;  for(i=0;i<time;i++){while(~TF0) ;  TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;            }
}void wave()          // generate a waveform 模拟clk
{W_R=0;  NOP;W_R=1;  NOP;W_R=0;  NOP;
}
void witre_clear() //清cache
{uchar j;for(j=0;j<10;j++) {cache[j]=0x00;}}
void Write_Temperature(uint t,uchar p1,uchar t46)//3位温度数据写到cache  p1 为小数点 0 1亮灭 /t46 1 ℃摄氏度   2℉华氏度 0灭
{unsigned char a0,a1,a2;a2=(t/100)%10;//百位a1=(t/10)%10;///十位a0=t%10;个位cache[2]=num_data[a0];cache[1]=num_data[a1];cache[0]=num_data[a2];if(p1==1)cache[1]=cache[1]|(1<<3);elsecache[1]=cache[1]&~(1<<3);if(t46==1){flag=1;//解决T6被湿度覆盖cache[2]=cache[2]|(1<<3);  //T4cache[3]=cache[3]|(1<<3); //T6cache[0]=cache[0]&~(1<<3);//T5}else if(t46==2){flag=0;//
                cache[2]=cache[2]|(1<<3);
     cache[3]=cache[3]&~(1<<3);cache[0]=cache[0]|(1<<3);}else{flag=0;cache[2]=cache[2]&~(1<<3);cache[3]=cache[3]&~(1<<3);cache[0]=cache[0]&~(1<<3);}}void Write_Humidity(uint h,uchar t3)//写两位湿度  T3 %
{unsigned char a0,a1;a1=(h/10)%10;///a0=h%10;if(flag)cache[3]=num_data[a1]|(1<<3);elsecache[3]=num_data[a1]&~(1<<3);    cache[4]=num_data[a0];if(t3==1)cache[4]=cache[4]|(1<<3);elsecache[4]=cache[4]&~(1<<3);}void Write_Mode(uchar a,uchar m)//if(a==1)cache[5]=cache[5]|(1<<6);elsecache[5]=cache[5]&~(1<<6);if(m==1)cache[5]=cache[5]|(1<<7);elsecache[5]=cache[5]&~(1<<7);}void Write_Wifi(uchar h);//void Write_Water(uchar w)//
{if(w==1)cache[7]=cache[7]|(1<<3);elsecache[7]=cache[7]&~(1<<3);
}void Write_Level(uchar s7,uchar s14,uchar s21)//S7/S14/S21 第几个叶子代表档位  1单叶  2双叶 0:灭 单页和双叶循环转动
{if(s7==1){cache[7]=cache[7]|(1<<1);cache[7]=cache[7]|(1<<2);cache[7]=cache[7]|(1<<4);cache[7]=cache[7]|(1<<6);cache[7]=cache[7]&~(1<<0);cache[7]=cache[7]&~(1<<5);cache[7]=cache[7]&~(1<<7);}else if(s7==2){cache[7]=cache[7]|(1<<1);cache[7]=cache[7]|(1<<0);cache[7]=cache[7]|(1<<5);cache[7]=cache[7]|(1<<7);cache[7]=cache[7]&~(1<<2);cache[7]=cache[7]&~(1<<4);cache[7]=cache[7]&~(1<<6);}else{cache[7]=cache[7]&~(1<<1);cache[7]=cache[7]&~(1<<2);cache[7]=cache[7]&~(1<<0);cache[7]=cache[7]&~(1<<4);cache[7]=cache[7]&~(1<<5);cache[7]=cache[7]&~(1<<6);cache[7]=cache[7]&~(1<<7);}
//  if(s14==1){cache[6]=cache[6]|(1<<1);cache[6]=cache[6]|(1<<2);cache[6]=cache[6]|(1<<4);cache[6]=cache[6]|(1<<6);cache[6]=cache[6]&~(1<<0);cache[6]=cache[6]&~(1<<5);cache[6]=cache[6]&~(1<<3);}else if(s14==2){cache[6]=cache[6]|(1<<1);cache[6]=cache[6]|(1<<0);cache[6]=cache[6]|(1<<5);cache[6]=cache[6]|(1<<3);cache[6]=cache[6]&~(1<<2);cache[6]=cache[6]&~(1<<4);cache[6]=cache[6]&~(1<<6);}else{cache[6]=cache[6]&~(1<<1);cache[6]=cache[6]&~(1<<2);cache[6]=cache[6]&~(1<<0);cache[6]=cache[6]&~(1<<4);cache[6]=cache[6]&~(1<<5);cache[6]=cache[6]&~(1<<6);cache[6]=cache[6]&~(1<<3);}
/if(s21==1){cache[5]=cache[5]|(1<<2);cache[5]=cache[5]|(1<<4);cache[5]=cache[5]|(1<<1);cache[6]=cache[6]|(1<<7);//cache[5]=cache[5]&~(1<<0);cache[5]=cache[5]&~(1<<5);cache[5]=cache[5]&~(1<<3);}else if(s21==2){cache[5]=cache[5]|(1<<2);cache[5]=cache[5]&~(1<<4);cache[5]=cache[5]&~(1<<1);cache[6]=cache[6]&~(1<<7);//cache[5]=cache[5]|(1<<0);cache[5]=cache[5]|(1<<5);cache[5]=cache[5]|(1<<3);}else{cache[5]=cache[5]&~(1<<2);cache[5]=cache[5]&~(1<<4);cache[5]=cache[5]&~(1<<1);cache[6]=cache[6]&~(1<<7);//cache[5]=cache[5]&~(1<<0);cache[5]=cache[5]&~(1<<5);cache[5]=cache[5]&~(1<<3);}}void Show_cache()
{   unsigned int j;for(j=0;j<8;j++) {write_data_by_8bit(cache[j], j);}
}

main.c

#include<reg51.h>
#include<intrins.h>
#include"lcd.h"void main()
{unsigned long  h=0,i=0;CS=1;W_R=0;initial();//³õʼ»¯ ÉèÖÃlcdwitre_clear();   while(1){                      i++;h++;     Write_Temperature(i,1,1);//Write_Humidity(h,1);//***********//Write_Mode(0,0);Write_Water(1);Write_Level(1,1,1);if(i>=1000) i=0;if(h>=100) h=0;Show_cache();delay(10);//500msWrite_Temperature(i,1,2);Write_Humidity(h,0);Write_Mode(1,1);Write_Water(0);Write_Level(2,2,2);Show_cache();delay(10);}
}

HT1621B段码 LCD屏驱动 51单片机驱动程序相关推荐

  1. 【解决方案】STM32L152单片机驱动段码LCD屏,执行HAL_LCD_Init函数失败返回HAL_TIMEOUT,长时间卡在LCD_FLAG_RDY的while循环里面的解决办法

    STM32L152单片机驱动段码LCD屏,HAL_LCD_Init函数执行失败,卡在LCD_FLAG_RDY里面,函数返回HAL_TIMEOUT /*!< Wait Until the LCD ...

  2. 段码液晶屏驱动IC你知道怎么选吗?

    段码液晶屏因其简易便捷的动态显示,灵便的反应速率,不用人为因素的长期的实际操作而遭受众多客户的应用.那麼,段码液晶屏的驱动IC该如何选择就由液晶屏生产厂家来给你详细介绍. ​​​​​ 段码液晶屏的驱动 ...

  3. DSP28035驱动HT1621B显示段码LCD屏

    最近做的项目里面使用的控制芯片为TI公司的28035,在控制程序以外,需要用该芯片控制显示LCD屏幕,其中驱动LCD屏幕的是HT1621B芯片,由于这也是我第一次写驱动LCD的程序以及第一次接触162 ...

  4. 段码LCD研究 | 用HT1621B驱动段码LCD屏

    [本文发布地址https://blog.csdn.net/Stack_/article/details/117532877,未经许可不得转载,转载须注明出处] 一.探索 这是一个从乐心血压计上拆下来的 ...

  5. LCD段码液晶屏驱动方法介绍

    LCD段码屏的驱动基本原理是:具备偶极矩的lcd段码屏针状分子结构在另加电场的施加下其排序情况产生变化,促使根据液晶显示器件的光被调配,进而展现明与暗或透光与不透的表明实际效果.液晶显示器件中的每一个 ...

  6. 超低功耗 段码LCD液晶显示驱动IC-VKL060 SSOP24 15SEG*4COM,超低工作电流约7.5微安,多用于传感器/水电表/工控仪表等

    产品品牌:永嘉微电/VINKA 产品型号:VKL060 封装形式:SSOP24 概述: VKL060 SSOP24是一个点阵式存储映射的LCD驱动器,可支持最大60点(15SEGx4COM)的 LCD ...

  7. 裸片IC液晶驱动多种封装选择VK1621SS香熏机/计算器/额温枪段码LCD液晶显示驱动IC,DICE(邦定COB)/COG(绑定玻璃用)

    型号:VK1621SS 品牌:永嘉微电/VINKA 封装形式:SSOP48/ LQFP48/LQFP44/SDIP28/DICE 裸,片:DICE(邦定COB)/COG(绑定玻璃用) 年份:新年份 K ...

  8. VK1621是段码LCD液晶显示屏驱动IC,具省电模式,替代市面上1621 LQFP44/48、SSOP48、DICE,最大支持32*4点阵 FAE技术支持

    产品品牌:永嘉微电/VINKA 产品型号:VK1621 封装形式:LQFP44/48.SSOP48.SDIP28.DICE裸片 概述: VK1621是一个点阵式存储映射的LCD驱动器,可支持最大128 ...

  9. 64*8点阵 段码LCD液晶显示驱动IC-VK1625 LQFP/QFP100,兼容替代市面上1625,适用机车仪表/跑步机面板等

    产品品牌:永嘉微电/VINKA 产品型号:VK1625 封装形式:LQFP100/QFP100.DICE/COG(定制) 概述: VK1625是一个点阵式存储映射的LCD驱动器,可支持最大512点(6 ...

最新文章

  1. 不是广告--如何学Java,我说点不太一样的学习方式
  2. 为什么 Pi 会出现在正态分布的方程中?
  3. 独家 | 攀登数据科学家和数据工程师之间的隔墙
  4. 每日一皮:据说PM就是这样忍受你的!
  5. windows环境下设置Redis自启动
  6. sklearn综合示例9:分类问题的onehot与预测阈值调整
  7. 什么叫临界资源和临界区?
  8. 使用Docker运行SQL Server
  9. MySQL中保存emoji表情
  10. EasyUI 中combobox利用拼音进行检索
  11. 使用Unified Communications Managed API获取Lync在线会议的链接地址
  12. 周云蓬献唱《杜甫三章》实证“把古人唱成亲人”
  13. Excel输入公式计算只显示公式不出结果
  14. SEO优化之浅谈蜘蛛日志
  15. java背包问题程序_背包问题-java实现
  16. 单目相机标定实现--张正友标定法
  17. 手机QQ2008聊天记录导入手机QQ2009 塞班第三版Python全代码
  18. 一行css代码让整个网站变灰, 通过js控制定点触发和关闭
  19. oracle的catalog,Oracle 配置 catalog
  20. python控制电脑定时开机关机_如何实现电脑在指定的时间自动开机?

热门文章

  1. python的取整和取余_Python中取余、除法、取整的操作逻辑
  2. 解决宝塔 Nginx 跨域问题Access-Control-Allow-Origin
  3. AD原理图端口添加页码编号
  4. opencv中puttext()函数用法总结(03)
  5. 苹果应用备份到电脑 苹果应用备份到新苹果手机
  6. 实现会员管理的会员政策优惠设置功能的代码(二十二)
  7. ES6(迭代器、Set、Map、数组去重)
  8. Java实现简易21点比大小游戏。(玩家VS电脑)
  9. 抖音很火的设备性能在线测试HTML源码
  10. Django前后端分离实现登录验证码功能