|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
手头有坏电子秤的段码液晶,从网上买的段码液晶屏带有TM1621D。TM1621D与HT1621结构相同,只是引脚少,段码少但容易业余制作。正好利用这两种材料,自制段码液晶模块,并用开发板调试通过。
- I T5 v$ @: x# ^( ^2 {
8 H5 ]2 i8 |) H+ |8 ~( K, [
* k; f! ?0 N/ U2 h( W4 l: g6 C* @9 X. F" e1 ?! L
6 v$ M6 K* L6 b! Q; p c
0 {0 W, p! G& r- [6 \& g6 u6 E% S& i+ q# y! H/ ?! K- G8 F( H6 O" D
连接TM1621D模块,& G* c2 R- E. y7 Q6 V) V
程序编译后HEX文件下载到单片机
3 c }9 v5 E& G d- U关掉下载程序,打开串口调试助手,设置4800波特率,1 x2 V, K+ f4 x1 _3 h
数据位8停止位1,无校验无流控制,) e- d) _$ z! h" i/ Y( B
勾选HEX发送,输入80-8F之间的数据,显示地址0-F。% t! D: d% n0 j) U, \9 d" Y
输入数据0d-16,1602显示SEG数字,TM16219 D: s# u# T; \0 P
对应段点亮。% P. @& }( q3 G* w
注意5v电压下程序BASE选1/2.选1/3全亮。
3 V! B: j- }& x- Y( M! M; l3v选1/3BASE
0 ^5 _8 p2 e; ?4 M6 qCOM误接成SEG,开机初始化即显示88。
. I9 ^8 z% @, P4 L) C: r0 T背光限流电阻1K,白天亮度略低。: ]) E+ `" j; ^' S; S
VLCD电阻选10k.) D' i8 C J' U
段码每位由两个地址构成,每个地址4位数据(4段)
$ M) `' g3 U O, t! l用串口调试助手发送必须输成两位
! D* O8 u! i, U/ b1 k7 a80(数据)0b-16(可串发)选定时发送10ms/次
$ R0 I' b& m. B0 a: @7 o7 v清零:800b0c0d0e0f10111213141516
$ ]) h+ L1 S4 u: s. l/ z& a+ W; @/ \先81,再输入0b-16中的任意数字,显示对应段。# O8 q/ x% k% |3 i% W/ Y* j/ p3 ?
82
2 r o# g' A$ N# o84; R6 s( A: U1 Y; N4 r2 M( Q* _
88
; q( l7 {9 m$ F- w' r+ a5 q测试段
+ B t, G8 c+ }- P2 Z* c. @: T全显示:8f0b0c0d0e0f10111213141516
( \6 V& P5 ~3 h$ h# ~0 _7 O/ Q `& f# `+ @. ]- G
单片机源程序如下:( Y9 u' X& W; G
- /*-****************************************
- 名称: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- J( s C" R* z! U' ^& L
/ `" O0 z0 Y4 j# A/ ]) O
|
|