OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9127|回复: 6

基于液晶驱动HT1621的温控器产品的设计实例(原理图+源码)

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-6-30
在线时间
3 小时
发表于 2018-6-30 16:36:36 | 显示全部楼层 |阅读模式
本帖最后由 1045878760 于 2018-7-1 11:19 编辑

   全部手写输入,求加精,求回帖,这样我才会有更多的动力继续分享更好的设计经验。      
这是一个温控器产品的设计实例,设计已经产品化,进入了量产阶段。
这个设计已经做成成品了
pcb.jpg

     本文旨在学习与交流,如果大家对本文有兴趣,可以去淘宝购买配套的电路板成品,用于当实验板学习开发测试,在淘宝上搜索关键字“HTC-10 电路板,即可找到。

不磨叽,上图

sch.jpg

Mcu的选择
原来的设计的mcu采用了stm8s003f3,后来这ic价格大涨,从1.3元狂飙到4元,后来我将它换成新唐n76e003,结果发现新唐这芯片实在是超强的啊,比起原来的stm8s003f3,它的AD精度竟然是12位的,这使得在设计温度计时有更好的温度检测精度,大爱啊!
1.png
N76E003 STM8S003F3 的管脚图对比

根据管脚对比,可以看出硬件是兼容的,但是软件需要更改

2.png
N76E003 STM8S003F3 的特性对比

液晶驱动的选择
段式液晶由于其功耗低、价格便宜在很多家电中得到广泛的应用,其驱动其实并不复杂,大多是情况下都是用HT1621B进行驱动。

HT1621是128 点内存映象和多功能的LCD驱动器HT1621 的软件配置特性使它适用于多种LCD应用场合包括LCD模块和显示子系统用于连接主控制器和HT1621的管脚只有4 或5 条HT1621 还有一个节电命令用于降低系统功耗。
在使用HT1621进行驱动时,首先得根据订做的液晶进行原理设置。驱动液晶实际上就是往HT1621的内部寄存器中写数据,至于数据如何去驱动液晶我们可以不去理会它。下面也一款订做的液晶为例进行说明:


液晶的逻辑图
液晶图样.jpg
液晶的显示实例图

HT1621的驱动程序参考
//1 led1 p05
//2 data p06
//3 wr p07
//10 cs p15
void ini_io_lcd(void)
{
   P05_PushPull_Mode;
   P06_PushPull_Mode;
   P07_PushPull_Mode;
   P15_PushPull_Mode;
   clr_P05;
   clr_P06;
   clr_P07;
   clr_P15;
}

//锁定显示数据 3v=300khz=0.3M=3.3us 5v=500khz=0.5M=2us 16M=1/16us delay(40/16)=2.5us 参考ht1621b串行数据时钟
void lock_data(void)
{
   delay(40);
   LCD_WR_0 ;
   delay(40);
   LCD_WR_1 ;
   delay(40);
}
//移位送8位数据
void shift(uchar i)
{
   uchar j ;
   for(j = 0; j < 8; j++)
    {
       if(i & 0x80)LCD_DATA_1 ;
       else LCD_DATA_0 ;
       lock_data();
       i <<= 1 ;
    }
}
//移位送n位数据
void shift2(uchar i, uchar n)
{
    uchar j ;
   for(j = 0; j < n; j++)
    {
       if(i & 0x80)LCD_DATA_1 ;
       else LCD_DATA_0 ;
       lock_data();
       i <<= 1 ;
    }

}

//写命令
void disp_cmd(uchar cmd)
{
   //uchar i=0 ;
   LCD_CS_0 ;
   LCD_DATA_1 ;
   lock_data();
    LCD_DATA_0;
   lock_data();
   LCD_DATA_0 ;
   lock_data();
   shift(cmd);
   //空数据
   lock_data();
   LCD_CS_1 ;
}
void beep(uchar t)
{
   if(BeeEn)
    {
       disp_cmd(0x09);
       beep_time = t ;
    }
}
void beep3(void)
{
   beep_count = 3;
   beep_delay = 1;
}
uchar disp_hi(uchar temp)
{
   return num[temp/10%10];
}

uchar disp_low(uchar temp)
{
   return num[temp%10];
}

uchar disp_hi2(uchar temp)
{
   return num2[temp/10%10];
}

uchar disp_low2(uchar temp)
{
   return num2[temp%10];
}

//写全部数据
void disp_all(void)
{
   uchar i = 0 ;
   LCD_CS_0 ;
   //101,addr=0
   LCD_DATA_1 ;
   lock_data();
   shift(0x40);
   for(i = 0; i < 4; i++)
    {
       shift(DisBuf);
       DisBuf = 0x00 ;
    }
   shift2(DisBuf[4], 4);
   for(i = 5; i < 16; i++)
    {
       shift(DisBuf);
       DisBuf = 0x00 ;
    }
   LCD_CS_1 ;
}

//初始化显示
void Ini_Disp(void)
{
   disp_cmd(0x00);
   //关闭系统振荡器与LCD偏压器
   disp_cmd(0x18);
   //系统时钟源,片内RC振荡器
   disp_cmd(0x80);
   //IRQ输出失效
   disp_cmd(0xa7);//?
   //时基wdt输出
   disp_cmd(0x01);
   //打开系统振荡器
   disp_cmd(0x29);
   //1/3偏压,4个公共口
   disp_cmd(0x03);
   //打开偏压发生器
   disp_cmd(0x08);
   //关闭声音输出
   disp_cmd(0x60);
   //2kHZ声音
}


void disp(void)
{
   uchar temp;
   uchar d1, d2, d3, d4, d5, d6, d7, d8, d9;
   uchar TT1, TT2, TT3, TT4, TT5, TT6, TT7, TT8, TT9, TT10, TT11, TT12,TT13, TT14, TT15, TT16, TT17, TT18;

............
............
............
............
............
............
............

   if(ACFg)TT9 = 1;

   temp = 0; //0
   if(d6 != 99)temp |= num2[d6];//led6
   if(T2dot)temp |= 0x08; //5p .
   DisBuf[0] = temp;

   temp = 0; //1
   if(d5 != 99)temp |= num2[d5];//led5
   if(TT14)temp |= 0x08;
   DisBuf[1] = temp;

   temp = 0; //2
   if(d4 != 99)temp |= num2[d4];//led4
   if(TT15)temp |= 0x08;//T15启动温度
   DisBuf[2] = temp;

   temp = 0; //3
   if(TT1)temp |= 0x01;//T1实测温度
   if(TT4)temp |= 0x08;//T4 C
   if(TT2)temp |= 0x02;//T2
   if(TT3)temp |= 0x04; //T3
   if(TT5)temp |= 0x10;//T5 温度控制
   if(TT6)temp |= 0x20;//T6间隙控制
   if(TT7)temp |= 0x40;//T7倒计时开
   if(TT8)temp |= 0x80;//T8倒计时关
   DisBuf[3] = temp;


   temp = 0; //4
   if(TT10)temp |= 0x10; //T10 停止温度
   if(TT11)temp |= 0x20; //T11 c
   if(TT13)temp |= 0x80; //h
   if(TT12)temp |= 0x40;
   DisBuf[4] = temp;

   temp = 0; //5
   if(d1 != 99)temp |= num[d1];//led1
   DisBuf[5] = temp;

   temp = 0; //6
   if(d2 != 99)temp |= num[d2];//led2
   DisBuf[6] = temp;

   temp = 0; //7
   if(d3 != 99)temp |= num[d3];//led3
   if(T1dot)temp |= 0x80; //2p .
   DisBuf[7] = temp;

   temp = 0; //8
   if(TT9)temp |= 0x80;//T9 AC
   if(d7 != 99)temp |= num[d7];//led7
   DisBuf[8] = temp;

   temp = 0; //9
   if(d8 != 99)temp |= num[d8];//led8
   DisBuf[9] = temp;

   temp = 0; //10
   if(d9 != 99)temp |= num[d9];//led9
   if(T3dot)temp |= 0x80; //8p .
   DisBuf[10] = temp;


   temp = 0; //11
   if(TT16)temp |= 0x10;//T16 C
   if(TT18)temp |= 0x40;//T18 min
   if(TT17)temp |= 0x20;//T17
   DisBuf[11] = temp;

    disp_all();
}




















液晶逻辑图.jpg

HT1621B(中文).PDF.pdf

1.09 MB, 下载次数: 210

N76E003.rar

3.56 MB, 下载次数: 595

STM8S003使用手册.pdf

956.63 KB, 下载次数: 99

电路图与源码.rar

94.93 KB, 下载次数: 308

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-7-1
在线时间
0 小时
发表于 2018-7-1 11:59:31 | 显示全部楼层
不错的设计啊,在淘宝上搜索关键字“HTC-10 电路板”,的确能找到这产品,卖的价格也很便宜,只要36元,找算同店主商量是否可以包邮买一件回去当实验板用。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-12-9
在线时间
4 小时
发表于 2018-12-9 22:38:31 | 显示全部楼层
你好 你的电路板哪里可以买到 淘宝上搜索不到。我的qq824880574
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-7-9
在线时间
4 小时
发表于 2019-1-4 22:23:10 | 显示全部楼层
楼主,请教一下,数据锁定函数,有什么作用呢
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-7-9
在线时间
4 小时
发表于 2019-1-4 23:42:32 | 显示全部楼层
楼主,能不能加一下你的QQ,最近做项目,用到1621,LCD没反应,能不能向你请教一下
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-8-5
在线时间
31 小时
发表于 2020-8-3 13:40:48 | 显示全部楼层
按给的关键词,淘宝怎么搜得不到了?
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2019-8-15
在线时间
61 小时
发表于 2021-4-16 15:24:52 | 显示全部楼层
不错 学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 03:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表