标题: 基于新唐n76e003+液晶驱动HT1621的温控器产品的设计实例(原理图+源码) [打印本页]
作者: 1045878760 时间: 2018-6-30 17:01
标题: 基于新唐n76e003+液晶驱动HT1621的温控器产品的设计实例(原理图+源码)
基于液晶驱动HT1621的温控器产品的设计实例(原理图+源码)
全部手写输入,求加精,求回帖,这样我才会有更多的动力继续分享更好的设计经验。
这是一个温控器产品的设计实例,设计已经产品化,进入了量产阶段。
不磨叽,上图
Mcu的选择
原来的设计的mcu采用了stm8s003f3,后来这ic价格大涨,从1.3元狂飙到4元,后来我将它换成新唐n76e003,结果发现新唐这芯片实在是超强的啊,比起原来的stm8s003f3,它的AD精度竟然是12位的,这使得在设计温度计时有更好的温度检测精度,大爱啊!
N76E003 和 STM8S003F3 的管脚图对比
根据管脚对比,可以看出硬件是兼容的,但是软件需要更改
N76E003 和 STM8S003F3 的特性对比
液晶驱动的选择
段式液晶由于其功耗低、价格便宜在很多家电中得到广泛的应用,其驱动其实并不复杂,大多是情况下都是用HT1621B进行驱动。
HT1621是128 点内存映象和多功能的LCD驱动器HT1621 的软件配置特性使它适用于多种LCD应用场合包括LCD模块和显示子系统用于连接主控制器和HT1621的管脚只有4 或5 条HT1621 还有一个节电命令用于降低系统功耗。
在使用HT1621进行驱动时,首先得根据订做的液晶进行原理设置。驱动液晶实际上就是往HT1621的内部寄存器中写数据,至于数据如何去驱动液晶我们可以不去理会它。下面也一款订做的液晶为例进行说明:
液晶的逻辑图
液晶的显示实例图样
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)
- {
- ucharj ;
- 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();
- }<font color="#333333"><font face="微软雅黑"><font style="font-size: 8.5pt">
- </font></font></font>
复制代码 这个设计已经做成成品了
本文旨在学习与交流,如果大家对本文有兴趣,可以去淘宝购买配套的电路板成品,用于当实验板学习开发测试,在淘宝上搜索关键字“HTC-10 电路板”,即可找到。
全部资料51hei下载地址:
-
-
HT1621B(中文).PDF.pdf
1.09 MB, 下载次数: 172, 下载积分: 黑币 -5
-
-
电路图与源码.rar
94.93 KB, 下载次数: 449, 下载积分: 黑币 -5
-
-
STM8S003使用手册.pdf
956.63 KB, 下载次数: 108, 下载积分: 黑币 -5
-
-
N76E003规格书.7z
3.55 MB, 下载次数: 221, 下载积分: 黑币 -5
作者: hefeng898961 时间: 2018-7-20 13:38
感谢分享
作者: shui0419 时间: 2018-8-15 09:52
感谢楼主!
作者: gaoyang9992006 时间: 2018-9-19 16:08
下载学习学习。
作者: 1045878760 时间: 2018-10-12 16:46
大家交流一下
作者: YQHUOGE 时间: 2018-11-5 15:42
感谢楼主分享
作者: hfuhg 时间: 2018-11-16 11:29
刚还需要,多谢分享
作者: hfuhg 时间: 2018-11-16 11:39
很好的资料,非常详细
作者: guojian0129 时间: 2018-12-12 11:02
感谢分享
作者: pbx1105 时间: 2019-1-1 09:45
很好的资料,非常详细
作者: 何求 时间: 2019-1-23 08:54
谢谢分享,感谢。
作者: jiangweich 时间: 2019-3-14 10:23
谢谢,但是x宝上搜不到HTC-10 电路板了,想买块实物
作者: 113446945 时间: 2019-6-3 11:49
谢谢分享,感谢。
作者: 大仙他爸 时间: 2019-6-15 20:45
新唐的片子确实非常好,我最近也开始学新唐的了
作者: Blanken 时间: 2019-6-17 11:47
谢谢,但是x宝上搜不到HTC-10 电路板了,想买块实物
作者: ljj200526 时间: 2019-9-19 15:23
谢谢分享!非常好的资料!
作者: 天方夜 时间: 2020-1-9 20:18
下载学习学习。谢谢分享!
作者: ding2006 时间: 2020-2-20 17:04
新新手来学习了,请大家多指导
作者: linnyshow 时间: 2020-2-26 18:05
感谢分享
作者: beizC 时间: 2020-3-5 13:56
感谢楼主的分享。n76e003已更新增强版MS51FB9AE,如更新可参考下。
新唐 003 系列平台 MS51 替换更新 N76E003 V1.0.pdf
(898.51 KB, 下载次数: 13)
TRM_MS51_16KSeries_SC_Rev1.00.pdf
(8.93 MB, 下载次数: 12)
作者: 吴月涛 时间: 2020-5-16 17:11
搂住 你这种段码液晶屏哪里有卖呢?
作者: 吴月涛 时间: 2020-5-16 17:47
在吗?兄弟 陶宝上查不到 “HTC-10 电路板”呢?
作者: 我会想你的 时间: 2020-11-26 09:51
收藏了,最近在做这个
作者: hzw854025403 时间: 2021-2-3 12:12
可以,全部都有了
作者: alphalee77 时间: 2021-3-19 17:01
最近准备做温控器开发,资料很好
作者: gujiushentan 时间: 2021-6-1 11:02
太牛了!最近刚好想学习一下液晶屏的驱动方法!
作者: fj51hei 时间: 2021-6-12 23:14
新新手来学习了,请大家多指导
作者: lihui2558 时间: 2021-8-27 12:45
是NTC热敏电阻?
作者: SURUBU1976 时间: 2022-9-17 15:28
浪费币 只是一个1621小驱动例程
作者: xzsre 时间: 2023-7-3 14:56
感谢分享,学习一下
作者: chjh09 时间: 2024-1-5 18:44
现在很多数控电源都采用这两个集成电路,我得看看
作者: 我会想你的 时间: 2025-6-23 16:36
多谢,我要仔细研究研究怎么处理数据
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |