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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
手头有坏电子秤的段码液晶,从网上买的段码液晶屏带有TM1621D。TM1621D与HT1621结构相同,只是引脚少,段码少但容易业余制作。正好利用这两种材料,自制段码液晶模块,并用开发板调试通过。
5 f( m# X/ j8 |$ R$ X3 r2 l  B
/ Y9 i  E& W% C& W
. x3 ^9 ~& P3 Q/ K3 v/ X
! \4 S/ U/ D8 M3 X 2 }5 g) U) K4 F. Z9 N8 u

0 a! M' ^4 o+ y0 P0 ^3 G9 v  u/ m# c7 s: c+ f
连接TM1621D模块,
$ I+ D2 ~% L/ \. ?- U4 s程序编译后HEX文件下载到单片机* {& f  `+ F0 F+ \
关掉下载程序,打开串口调试助手,设置4800波特率,2 {6 `3 o7 I2 _8 S( a9 R, W
数据位8停止位1,无校验无流控制,4 w; h2 J/ \/ A" u' P  W
勾选HEX发送,输入80-8F之间的数据,显示地址0-F。
" ^2 t5 Q+ M9 i% ?- \* V2 L输入数据0d-16,1602显示SEG数字,TM1621
( D1 C" o# x) v. G" b. q# t, H; N对应段点亮。3 v4 \; ?( F/ e
注意5v电压下程序BASE选1/2.选1/3全亮。
/ |4 l/ t& @, W3v选1/3BASE0 i: Q  k! k: z+ ?
COM误接成SEG,开机初始化即显示88。
- C6 N2 n# h' ?2 p, S4 K; S背光限流电阻1K,白天亮度略低。. W: W8 e! Y$ D5 c8 q3 W
VLCD电阻选10k.8 P# k1 @: r& J" K
段码每位由两个地址构成,每个地址4位数据(4段)
0 E4 R1 x4 V, c用串口调试助手发送必须输成两位
# p$ t) l2 |/ T3 T" r4 u80(数据)0b-16(可串发)选定时发送10ms/次5 C# a5 [  y+ a+ F! T7 I
清零:800b0c0d0e0f10111213141516: z! ], N6 F0 H/ G3 D
先81,再输入0b-16中的任意数字,显示对应段。
2 X' a2 i6 c- l  y8 T# o$ _  f2 g829 v; \  v/ l2 _+ J1 E$ @( K# e6 T
847 p& c3 P6 D% d3 ?! w0 j
88
3 R0 _1 R; S  `0 V- a: E9 b# |测试段* s7 K# Z: h8 B
全显示:8f0b0c0d0e0f10111213141516) n  _3 X8 ?7 N0 m' q% F5 ?7 _5 A
" f& G, Z) g8 `; ^) \1 |
单片机源程序如下:0 Y# Y  o2 p1 N$ b1 l
  • /*-****************************************
  • 名称: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);
  • }
    : I- v( C9 B2 V( K+ W$ z9 g  o- o. @
, k& ^( ?0 O& o

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

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

该用户从未签到

2#
发表于 2022-9-28 13:10 | 只看该作者
3 个关键数据口:
! X; m4 `' c$ J6 j8 M' \. b/ F1.CS: 片选,低电平有效;9 A% @! Q" U" k& w
2.WR: 读写控制,上升沿从 MCU 读取数据;
9 s  ~5 H8 y+ \) h: r( Y3.DATA: 数据,命令是大端位序,数据是小端位序; 灵话运用。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 21:32 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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