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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
手头有坏电子秤的段码液晶,从网上买的段码液晶屏带有TM1621D。TM1621D与HT1621结构相同,只是引脚少,段码少但容易业余制作。正好利用这两种材料,自制段码液晶模块,并用开发板调试通过。
6 \; y7 ~9 V& d8 W% v: W6 a . y. X( F) D6 J
/ }& T, c! N4 }8 q$ T' w! Y1 P

$ q- z4 {& o# e8 C" @" M
9 z% u7 }" {  z" F2 I% L2 g
+ `" N& b" M& E' V* a2 T
5 [) }- H( A7 z$ |连接TM1621D模块,, ^5 D" z8 I: Z& }! g
程序编译后HEX文件下载到单片机' L" k& g% f. s& s! i
关掉下载程序,打开串口调试助手,设置4800波特率,$ U+ m& r* `% n% u0 K
数据位8停止位1,无校验无流控制,3 u" ?% @8 T7 p4 ]& C# `* \
勾选HEX发送,输入80-8F之间的数据,显示地址0-F。
# S5 L5 x. ?1 C$ o% h: U, [4 f输入数据0d-16,1602显示SEG数字,TM1621
0 b5 B' T8 U1 t" [9 R6 @. B对应段点亮。
) y. B3 C. \8 K注意5v电压下程序BASE选1/2.选1/3全亮。
$ s; `, B, G7 O7 m+ a. y' |$ a# Y3v选1/3BASE
% \2 @" U# w9 r9 C3 |2 ]& ?+ w0 ACOM误接成SEG,开机初始化即显示88。
- O+ Q2 _* F( o背光限流电阻1K,白天亮度略低。
6 S/ c9 d. v( d; q% ~VLCD电阻选10k.
" Q8 j' y) s' O0 q段码每位由两个地址构成,每个地址4位数据(4段)
, g6 m( s3 w5 A# I用串口调试助手发送必须输成两位  @; m4 g: {; D3 C
80(数据)0b-16(可串发)选定时发送10ms/次
* P, {% k0 c" e清零:800b0c0d0e0f10111213141516
+ F. f0 I, A% j/ s8 f; L先81,再输入0b-16中的任意数字,显示对应段。) Q9 h% }( r3 n. P: f
82: t6 U9 w1 T1 S7 N
84
. r% Z7 x# m. y% _, \; j6 M( L88
8 B- X/ W) j; c2 L: h/ }测试段
4 O) v5 W* Q, Q5 Y8 |全显示:8f0b0c0d0e0f10111213141516
0 e6 J0 B( m- P
. T3 k/ U2 u# b. X单片机源程序如下:
$ b- K! V7 U0 `3 B" Y/ q% Q
  • /*-****************************************
  • 名称: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);
  • }
    9 E# X, \) I8 Y! g* h" `

" U; Q9 K3 l* X3 j! Y

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

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

该用户从未签到

2#
发表于 2022-9-28 13:10 | 只看该作者
3 个关键数据口:
" o& E. P2 a/ y3 ^$ j: A; J1.CS: 片选,低电平有效;& V2 k" d+ y/ e' n2 i3 F. w
2.WR: 读写控制,上升沿从 MCU 读取数据;
# t) |. |$ O: w. v+ v% p' O$ h, Z3.DATA: 数据,命令是大端位序,数据是小端位序; 灵话运用。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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