找回密码
 注册
关于网站域名变更的通知
查看: 271|回复: 2
打印 上一主题 下一主题

自制模块,彻底理解单片机TM1621D段码液晶并点亮,附程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-28 10:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
手头有坏电子秤的段码液晶,从网上买的段码液晶屏带有TM1621D。TM1621D与HT1621结构相同,只是引脚少,段码少但容易业余制作。正好利用这两种材料,自制段码液晶模块,并用开发板调试通过。9 t; g! ]3 d: j8 o
2 {0 ]0 f4 @+ z0 x( V8 D( v" h' x

% f$ e% C+ }% O/ A' T9 C7 k+ t4 [6 S
3 D3 v6 x& E$ M9 f0 _
2 ~/ v; t- t' |# _3 `, V

+ [9 n+ j1 b( v; L连接TM1621D模块,1 P8 B! I, h3 D# t! o
程序编译后HEX文件下载到单片机6 o7 _; `5 y, q
关掉下载程序,打开串口调试助手,设置4800波特率,3 Q" f" g( E0 o5 q& e! l7 L
数据位8停止位1,无校验无流控制,8 U2 V+ ^6 S! S4 i7 D
勾选HEX发送,输入80-8F之间的数据,显示地址0-F。
% I1 f, c1 @1 C2 ~5 j输入数据0d-16,1602显示SEG数字,TM1621
6 p/ G# I- D' S对应段点亮。
! c6 q# B7 J) o( p注意5v电压下程序BASE选1/2.选1/3全亮。; u4 ]& _1 o$ H1 ~
3v选1/3BASE
/ a: b% y9 j/ K$ uCOM误接成SEG,开机初始化即显示88。+ }1 H+ T- Q. J
背光限流电阻1K,白天亮度略低。
3 P# [" R3 `- qVLCD电阻选10k.# F# Q! w- }& x3 o6 l  N: B
段码每位由两个地址构成,每个地址4位数据(4段)
( l8 i* f  b9 H$ l% {6 U# b; Q用串口调试助手发送必须输成两位. p! L1 ^4 j: ~$ q" l) q6 p
80(数据)0b-16(可串发)选定时发送10ms/次
9 S6 c- R& m8 L$ A0 G. N清零:800b0c0d0e0f10111213141516
$ y: F1 _, T( I0 T- Z4 E5 o5 C先81,再输入0b-16中的任意数字,显示对应段。
7 K$ Q' j- z* V% T" l82; k( h$ G- p  |) m
84
4 u/ Z( e, _9 c88
5 Z/ Z' j6 c2 f- }) W% E+ u. b测试段
" {* H+ G+ s1 _* m8 D全显示:8f0b0c0d0e0f10111213141516' h. s5 [/ ]  V* K& i) O' a

4 g8 ~4 w& [' L; k单片机源程序如下:6 }, L( S- U- Q7 M  U7 X
  • /*-****************************************
  • 名称:TM1621
  • ******************************************/
  • #include "TM1621.h"
  • #include<reg52.h>
  • #include "intrins.h"                                         //包含nop指令头文件
  • #define uchar unsigned char                                 //数据类型宏定义
  • #define uint unsigned int                                 //数据类型宏定义
  • #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义
  • /******************以下TM1621模块命令定义*********************/
  • #define SYSDIS   0x00         //关系统振荡器和LCD偏压发生器
  • #define SYSEN    0x02    //打开系统振荡器
  • #define LCDOFF   0x04     //关LCD偏压
  • #define LCDON    0x06     //开LCD偏压
  • #define TONEON   0x12     //打开声音输出
  • #define TONEOFF  0x10     //关闭声音输出
  • #define XTAL     0x28     //外部接晶振
  • #define RC       0x30     //内部RC振荡
  • #define BIAS     0x52     //1/3偏压 4公共口,0X52=1/2偏压
  • #define WDTDIS   0x0a     //禁止看门狗
  • #define WDTEN    0x0e     //开启看门狗
  • /********************定义控制端口**********************/
  • sbit CS=P2^2;
  • sbit READ=P2^0;//无用
  • sbit WRITE=P2^1;
  • sbit DATA=P2^0;
  • /********************延时函数*************************/
  • void delay_nms(uint n)
  • {
  •         uint i;
  •         while (n--)
  •                 for (i=0;i<500;i++);
  • }
  • /********************从高位写入数据*************************/
  • void Write_Data_H(uchar Data, uchar Cnt)           //Data的高cnt位写入TM1621,高位在前
  • {
  •         uchar i;
  •         for (i=0;i<Cnt;i++)
  •         {
  •                 WRITE=0;
  •                 if (Data&0x80)                                 //从最高位发送
  •                         DATA=1;
  •                 else
  •                         DATA=0;
  •                 nop;
  •                 nop;
  •                 WRITE=1;
  •                 Data<<=1;
  •         }
  •         WRITE=0;
  •         DATA=0;
  • }
  • /********************从低位写入数据*************************/
  • void Write_Data_L(uchar Data,uchar Cnt)        //Data 的低cnt位写入TM1621,低位在前
  • {
  •         unsigned char i;
  •         for (i=0;i<Cnt;i++)
  •         {
  •                 WRITE=0;
  •                 if (Data&0x01)                               //从低位发送
  •                         DATA=1;
  •                 else
  •                         DATA=0;
  •                 nop;
  •                 nop;
  •                 WRITE=1;
  •                 Data>>=1;
  •         }
  •         WRITE=0;
  •         DATA=0;
  • }
  • /********************写入控制命令*************************/
  • void WriteCmd(uchar Cmd)
  • {
  •         CS=0;
  •         nop;
  •         Write_Data_H(0x80,4);     //写入命令标志100
  •         Write_Data_H(Cmd,8);      //写入命令数据
  •         CS=1;
  •         nop;
  • }
  • /*********指定地址写入数据,实际写入后4位************/
  • void WriteOneData(uchar Addr, uchar Data)
  • {
  •         CS=0;
  •         Write_Data_H(0xa0,3);     //写入数据标志101
  •         Write_Data_H(Addr<<2,6);  //写入地址数据(A5-A4-A3-A2-A1-A0)从高位开始写数据
  •         Write_Data_L(Data,4);     //写入数据
  •         CS=1;
  •         nop;
  • }
  • /*********连续写入方式,每次数据为8位,写入数据************
  • void WriteAllData(uchar Addr,uchar *p,uchar cnt)
  • {
  • uchar i;
  • CS=0;
  • Write_Data_H(0xa0,3);      //写入数据标志101
  • Write_Data_H(Addr<<2,6);   //写入地址数据
  • for(i=0;i<cnt;i++)            //写入数据
  • {
  •    Write_Data_L(*p,8);
  •    p++;
  • }
  • CS=1;
  • nop;
  • }
  • ***************这个子程序暂时没用,注释掉******************/
  • /*******************TM1621初始化**********************/
  • void TM1621_init()
  • {
  •         CS=1;
  •         WRITE=1;
  •         DATA=1;
  •         nop;
  •         delay_nms(1);
  •         WriteCmd(BIAS);                 //1/3偏压 4公共口
  •         WriteCmd(RC);                         //内部RC振荡
  •         WriteCmd(SYSDIS);                 //关系统振荡器和LCD偏压发生器
  •         WriteCmd(WDTDIS);                 //禁止看门狗
  •         WriteCmd(SYSEN);                 //打开系统振荡器
  •         WriteCmd(LCDON);                 //开LCD偏压
  • }
  • /*************TM1621清屏函数*****************/
  • void Clear1621()
  • {
  • uchar i;
  • for(i=9;i<22;i++)
  • {
  • WriteOneData(i, 0x00);
  • }
  • }
  • /*******************************************************************************
  • * 函数名称                   :1621显示函数显示
  • * 函数功能                   :
  • * 输    入         : 无
  • * 输    出         : 无
  • *******************************************************************************/
  • void Disp1621(uchar Addr, uchar Data)
  • {
  • WriteOneData(Addr, Data);
  • }
    5 m) C; X) n' C& f- I4 ]
' _* X3 a& T$ J  G

完全调试通过的1602和TM1621程序.rar

1.91 MB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-9-28 13:10 | 只看该作者
3 个关键数据口:
5 o7 \3 k& ]- y1.CS: 片选,低电平有效;
, _( h) \7 Y/ {8 S2.WR: 读写控制,上升沿从 MCU 读取数据;& ~- \3 V3 a0 Y: |# W5 ~" f
3.DATA: 数据,命令是大端位序,数据是小端位序; 灵话运用。

该用户从未签到

3#
发表于 2022-9-28 14:07 | 只看该作者
最近也在玩pt1621b,米字管的,用最笨的方法绘的真值表。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 19:36 , Processed in 0.109375 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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