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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
手头有坏电子秤的段码液晶,从网上买的段码液晶屏带有TM1621D。TM1621D与HT1621结构相同,只是引脚少,段码少但容易业余制作。正好利用这两种材料,自制段码液晶模块,并用开发板调试通过。
5 I; H6 G; H8 d# o% o
4 P/ e' H1 y# A- b: s6 I/ T8 j # P9 U% P& D# q+ z
& `% v% N$ g0 l
- O, u( A# t! O" ^# `

! r) L4 c7 ^+ P7 b8 i9 X8 @, J; |! x3 ?) O! a& R" @
连接TM1621D模块,
* I$ v8 V7 v3 G程序编译后HEX文件下载到单片机# g$ L7 L' q" E
关掉下载程序,打开串口调试助手,设置4800波特率,
# J, |6 Z' n/ e4 _0 @+ C, l8 j. \数据位8停止位1,无校验无流控制,% G! [1 J& F# _! E* z2 D& c
勾选HEX发送,输入80-8F之间的数据,显示地址0-F。. b1 {1 j5 |/ l! S2 k* i8 \+ w4 L
输入数据0d-16,1602显示SEG数字,TM1621
3 Q; U0 w9 K1 z: R! v对应段点亮。/ v* |$ q1 A8 ?) W9 f! |: h+ |' A
注意5v电压下程序BASE选1/2.选1/3全亮。
1 G) i4 e% x8 g) c& t- B3v选1/3BASE2 p$ x1 t: |: V: ^
COM误接成SEG,开机初始化即显示88。8 C/ |- G' Q! G: L, D& H$ d1 \
背光限流电阻1K,白天亮度略低。' A9 ?, E1 x- Y6 m) `' Q4 U9 K
VLCD电阻选10k.
  j1 [5 v! O  L/ k5 ^段码每位由两个地址构成,每个地址4位数据(4段)$ L! e3 _2 n: }( F
用串口调试助手发送必须输成两位
- G) Z8 M+ N, X. q80(数据)0b-16(可串发)选定时发送10ms/次
5 M' B- {9 [0 ^4 u& ^清零:800b0c0d0e0f10111213141516
* t: X. W7 E: B6 x9 j- R2 @  _先81,再输入0b-16中的任意数字,显示对应段。
% |: s9 ~# Y2 v82
* a; @3 C( Y3 c7 N' v84
  Y. N5 N. |8 `9 |3 ]88
; @" Q% t$ i- I: l  L+ [  N测试段
+ C; ]7 ~+ X; b& s7 H全显示:8f0b0c0d0e0f10111213141516& E( }" @1 u  X* g" j' ^7 d

7 d8 [' D) {! s8 O% g% }2 @, U% @单片机源程序如下:$ W- J! n, b5 N
  • /*-****************************************
  • 名称: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 ]2 T7 R* f( w- `: O
0 J) G) Y9 T3 E- I( g& q) j

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

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

该用户从未签到

2#
发表于 2022-9-28 13:10 | 只看该作者
3 个关键数据口:
, D/ p" m4 E; M' g% t1 n9 T1.CS: 片选,低电平有效;
4 f4 ^4 i5 y; O0 U2.WR: 读写控制,上升沿从 MCU 读取数据;
- o! b5 K1 {9 L0 G3.DATA: 数据,命令是大端位序,数据是小端位序; 灵话运用。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-5 11:51 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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