找回密码
 注册
查看: 249|回复: 2
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
手头有坏电子秤的段码液晶,从网上买的段码液晶屏带有TM1621D。TM1621D与HT1621结构相同,只是引脚少,段码少但容易业余制作。正好利用这两种材料,自制段码液晶模块,并用开发板调试通过。
( Q, X; @; J! K 9 w) y; T; ?1 A. L( N
8 L+ `2 z+ g/ r% D8 a+ Q* y( e
2 _! b" Q/ A5 j  w: D- k
) Q% h. f' T% g8 v. _3 i0 f

3 U& y  Z6 }2 b5 P5 _1 j/ b  _; u# x6 b' S
连接TM1621D模块,
6 q, i' H- x& J程序编译后HEX文件下载到单片机
% w$ I* q5 E0 J& K( Z关掉下载程序,打开串口调试助手,设置4800波特率,5 h8 `2 S3 ~8 F% ?( u6 ~. A& s
数据位8停止位1,无校验无流控制,
3 I: M. t+ x  H0 ]% Z勾选HEX发送,输入80-8F之间的数据,显示地址0-F。
$ B5 L  t& t/ H0 n输入数据0d-16,1602显示SEG数字,TM16217 d0 M7 @2 ?9 \1 N5 l9 V; b
对应段点亮。
% P( J' W! T7 f- ]3 z6 E注意5v电压下程序BASE选1/2.选1/3全亮。% n5 w, S8 g8 f; M( \  S' g
3v选1/3BASE
+ B9 z, q# ?( {2 s: X; hCOM误接成SEG,开机初始化即显示88。. {2 J+ q; c/ f8 A
背光限流电阻1K,白天亮度略低。
! o$ F0 n3 k4 n) dVLCD电阻选10k." X% g% \) s% a' ]
段码每位由两个地址构成,每个地址4位数据(4段)
' M5 v1 l5 c2 ?6 K/ c* a用串口调试助手发送必须输成两位8 R8 W5 p0 C+ R) S. S9 u  @
80(数据)0b-16(可串发)选定时发送10ms/次0 [$ f' l- Z: Z: p0 H
清零:800b0c0d0e0f10111213141516
/ r; |$ E1 Y) O9 V1 [$ u# l5 H% Y先81,再输入0b-16中的任意数字,显示对应段。
$ ?) C" \( \/ U9 W+ |% A! d82. [' i: T  z3 i
84
" R' U; w2 C2 z, F88* A: L) l" d1 O) c+ Z
测试段) [& C0 E' v* c5 j
全显示:8f0b0c0d0e0f10111213141516
5 M' M5 @6 [9 b; ^+ A. W9 s+ C# y
4 y: |0 K& d' z/ e单片机源程序如下:! g9 I+ P: l) y+ T6 c
  • /*-****************************************
  • 名称: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);
  • }0 b, |& u* H, N: _5 \1 A

, j" U5 }/ z  K( |* G

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

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

该用户从未签到

2#
发表于 2022-9-28 13:10 | 只看该作者
3 个关键数据口: % C! [2 v& k1 h' O# {* B
1.CS: 片选,低电平有效;
2 M9 H* X4 f1 Z( t( j; ~& B: D& ^6 e2.WR: 读写控制,上升沿从 MCU 读取数据;
  Z. x5 S: g9 e3 y7 T3.DATA: 数据,命令是大端位序,数据是小端位序; 灵话运用。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-1 06:22 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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