国内销售专线:0755-83404646 / 0755-83570678 / 13923751240
产品类别
  • 联系方式
  • 在线QQ咨询:sage/?uin=2355581220&Site=深圳市兴宇合电子有限公司&Menu=yes" target="blank">在线QQ咨询
    拨打销售专线
    0755-83404646 / 0755-83570678
    联系邮箱
    xyhlcd02@xyhlcd.com、service01@xyhlcd.com

TM1721驱动段码xf187兴发娱乐详解

发布来源:www.xyhlcd.com   发布时间:2022-8-10

一、首先我们来了解TM1721的特性

* TM1721是一种带键盘扫描接口的LCD段码xf187兴发娱乐驱动控制专用电路,内部集成有MCU  数字接口、数据锁存器、LCD 驱动、键盘扫描、幻彩背光驱动等电路* 内嵌 256KHz RC 振荡器
* 采用低功耗CMOS工艺
*32X4点LCD驱动
*6X4按键输入
*4路LED驱动,具有64级PWM,可用于LCD幻彩背光驱动; 
*LCD工作电压可调
*串行接口(CLK,STB,DIO)
*振荡方式:内置RC振荡
* 软件配置特征: 数据模式和命令模式 两种指令

* 提供 VLCD 管脚用于调整 LCD段码xf187兴发娱乐 操作电压(对比度调节)

二、指令说明

指令用来设置显示模式和LCD驱动器的状态。

在STB下降沿后由DIO输入的第一个字节作为一条指令。经过译码,取最高B7、B6两bit来区别不同的指令和数据。

B7

B6

指令

0

0

显示模式设置

0

1

数据命令设置

1

0

显示控制命令设置

1

1

地址命令设置

2.1显示模式设置:    工作模式设置好后,不允许在使用中切换工作模式。

段码xf187兴发娱乐模式设置 段码xf187兴发娱乐模式设置2

该指令用来设置工作模式,上电后,初始状态为b5b4b3b2b1b0=000000

2.2 数据命令设置:该指令用来设置数据写和读

段码xf187兴发娱乐数据命令设置

2.3地址命令设置

段码xf187兴发娱乐地址命令设置

地址的选择:根据数据设置指令的不同,地址所表示的含义也不同。 
如果数据设置指令是写数据到显示寄存器模式,那么本次地址设定的是显示寄存器地址,最多有效地址为  00H-0FH; 
如果数据设置指令是写数据到PWM控制寄存器模式,那么本次地址设置PWM寄存器的地址,有效地址为 00H-03H。 

2.4显示控制命令设置

B7

B6

B5

B4

B3

B2

B1

B0

1

0

0

B4

B3

B2

B1

B0



b4:显示开关设置位;为1显示开,为0显示关
b3:LCDxf187兴发娱乐驱动偏压设置位;为1设为全屏点亮;为0设为1/3偏压
b2b1b0:LCD段码xf187兴发娱乐工作电压设置位;
当b2b1b0=111时,工作电压=VCC(VCC为芯片的工作电压)。当VCC=5V,调节电压的范围约是2.88-5V。
* 上电后,b4b3b2b1b0 默认为 00111   

三、按键与按键寄存器
3.1. 键扫矩阵为 6×4bit

段码xf187兴发娱乐键扫矩阵

键扫数据储存地址如下所示,先发读键命令后,开始读取按键数据BYTE1—BYTE3字节,读数据从低位开
始输出。芯片KEY(0—3)和KS引脚对应的按键按下时,相对应的字节内的  BIT位为1。

3.2 该寄存器存储通过串行接口从 TM1721 的读取数据,地址分配如下:

段码xf187兴发娱乐该寄存器存储读取数据
▲注意:1、TM1721最多可以读3个字节,不允许多读。
        2、读数据字节只能按顺序从BYTE1-BYTE3读取,不可跨字节读。例如:硬件上的KEY2与KS5对应按键按下时,此时想要读到此按键数据,必须需要读到第3个字节的第6BIT位,才可读出数据;
当KEY1与KS5,KEY2与KS5,KEY3与KS5三个按键同时按下时,此时BYTE3所读数据的B5,B6,B7位均为1。
        3、组合键只能是同一个KS,不同的KEY引脚才能做组合键;同一个KEY与不同的KS引脚不可以做成组合键使用。


下面是兴宇合电子有限公司的程序C代码诠释
/********************************************************
公司:深圳市兴宇合电子有限公司www.xyhlcd.com
功能描述: TM1721芯片测试程序
人:Zheng Qiu Sheng
完成时间:2022年5月13日
********************************************************/
#include<reg52.h>
#include  <intrins.h>
sbit stb =P2^3; //定义片选通讯口
sbit clk =P2^2; //定义时钟通讯口
sbit dio =P1^0; //定义数据输入/输出通讯口
#define uchar unsigned char
#define uint unsigned int
unsigned char m,d,e,i,y;
unsigned char w[4];
unsigned char code table1[16]= {0x00,0x06,0x06, 0x06, 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00};
unsigned char code table2[16]= {0xe0,0xe3,0xe3, 0xe3,0xe3,0xe3,0x03,0x7c,0x7c,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00};
unsigned char code table3[16]= {0xb0,0xb5,0xb5,0xb5,0xb5,0xb5,0x05,0xda,0xda,0xda,0xda,0x00,0x00,0x00,0x00,0x00};
unsigned char code table4[16]= {0xf0,0xf7,0xf7, 0xf7, 0xf7, 0xf7,0x07,0xfe,0xfe,0xfe, 0xfe,0x00,0x00,0x00,0x00,0x00};
unsigned char code table5[16]= {0x0f,0x08,0x08, 0x08, 0x08, 0x08,0xf8,0x01,0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00};
//------写数据给IC----------
void Delay(uchar us)  //5,7,9
{while(--us);}

void DelayMS(uint x)
{uchar i;
while(x--)
{for(i=0;i<125;i++);}
}

void write(unsigned char p)
{unsigned int i;
stb =0; //给有效的片选信号(片选信号是低电平有效)
for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据
{
clk =0;
if((p&0x01)!=0)
{dio=1;}
else
{dio=0;}
clk =1;
p=p>>1;
}
}
//-------读按键数据--------
unsigned char read()
{  unsigned char kk;
stb = 0;   //给有效的片选信号(片选信号是低电平有效)
dio = 1;   //这里必须置高,因为没有按键按下时,键值默认为00H,此时为了与键值有区别
for(d=0;d<8;d++)
{clk = 0;
if(dio==1)
{kk =(kk|0x80);}
else
{kk =(kk|0x00);}
clk = 1;
if(d!=7){kk=(kk>>1);}
}
y=kk;
return(y);
}
//------显示all子程序--------
void xianshiall(unsigned char p)
{
unsigned char h;
stb = 1;clk = 1;dio = 1;
write(0x0c);//显示模式设置,
stb = 1;
write(0x10);
stb = 1;
write(0x40);//写数据到显示寄存器,采用地址自动加一
stb = 1;
write(0xc0);//显示寄存器的00H单元开始
for(h=0;h<16;h++)
{
write(p);//给显示寄存器送数据,
}
stb=1;
write(0x96);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节
}
//------显示all子程序--------
void xianshia2( unsigned char *ss)small
{unsigned char h,*pp;
pp=ss;
stb = 1;clk = 1;dio = 1;
write(0x0c);//显示模式设置,
stb = 1;
write(0x10);
stb = 1;
write(0x40);//写数据到显示寄存器,采用地址自动加一
stb = 1;
write(0xc0);//显示寄存器的00H单元开始
for(h=0;h<16;h++)
{write(*pp);//给显示寄存器送数据,
++pp;
}
stb=1;
write(0x96);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节
}
//------显示子程序--------
void xianshi(unsigned char p)
{unsigned char h;
stb = 1;clk = 1;dio = 1;
write(0x0c);//显示模式设置,
stb = 1;
write(0x10);
stb = 1;
write(0x40);//写数据到显示寄存器,采用地址自动加一
stb = 1;
write(0xc0);//显示寄存器的00H单元开始
for(h=0;h<2;h++)
{write(p); }//给显示寄存器送数据,
stb=1;
write(0x96);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节
}
//-----判按键子程序-------
void panjian(unsigned char k[4])
{
if((k[0]==0x01)){m=0x06;} //当KS0与SEG28按键按下时候,数码管显示数字0
if((k[0]==0x02)){m=0xe3;} //当KS0与SEG29按键按下时候,数码管显示数字1
if((k[0]==0x04)){m=0x3f;} //当KS0与SEG30按键按下时候,数码管显示数字4
if((k[0]==0x08)){m=0x2E;} //当KS0与SEG31按键按下时候,数码管显示数字3
if((k[0]==0x10)){m=0x5b;} //当KS1与SEG28按键按下时候,数码管显示数字4。
if((k[0]==0x20)){m=0x4f;} //当KS1与SEG29按键按下时候,数码管显示数字5
if((k[0]==0x40)){m=0x2F;} //当KS1与SEG30按键按下时候,数码管显示数字6
if((k[0]==0x80)){m=0x07;} //当KS1与SEG31按键按下时候,数码管显示数字7

if((k[1]==0x01)){m=0x66;} //当KS2与SEG28按键按下时候,数码管显示数字4。
if((k[1]==0x02)){m=0x6d;} //当KS2与SEG29按键按下时候,数码管显示数字5。
if((k[1]==0x04)){m=0x7d;} //当KS3与SEG30按键按下时候,数码管显示数字6。
if((k[1]==0x08)){m=0x07;} //当KS3与SEG31按键按下时候,数码管显示数字7。
if((k[1]==0x10)){m=0x63;} //当KS2与SEG28按键按下时候,数码管显示数字4。
if((k[1]==0x20)){m=0x67;} //当KS2与SEG29按键按下时候,数码管显示数字5。
if((k[1]==0x40)){m=0x77;} //当KS3与SEG30按键按下时候,数码管显示数字6。
if((k[1]==0x80)){m=0x7E;} //当KS3与SEG31按键按下时候,数码管显示数字7?

if((k[2]==0x01)){m=0x7f;} //当KS4与SEG29按键按下时候,数码管显示数字8。
if((k[2]==0x02)){m=0x6f;} //当KS4与SEG30按键按下时候,数码管显示数字9
if((k[2]==0x04)){m=0xE7;} //当KS5与SEG29按键按下时候,全屏显示。
if((k[2]==0x08)){m=0xF2;} //当KS5与SEG30按键按下时候,全灭。
if((k[2]==0x10)){m=0xF3;} //当KS4与SEG29按键按下时候,数码管显示数字8。
if((k[2]==0x20)){m=0xFD;} //当KS4与SEG30按键按下时候,数码管显示数字9
if((k[2]==0x40)){m=0xff;} //当KS5与SEG29按键按下时候,全屏显示。
if((k[2]==0x80)){m=0x00;} //当KS5与SEG30按键按下时候,全灭。
}
//----------主函数-----------------
void main()
{
xianshiall(0xff);//根据按键值,给显示寄存器送相应的显示数据
DelayMS(1000);
xianshia2(table1);//根据按键值,给显示寄存器送相应的显示数据
DelayMS(1000);
xianshia2(table2);//根据按键值,给显示寄存器送相应的显示数据
DelayMS(1000);
xianshia2(table3);//根据按键值,给显示寄存器送相应的显示数据
DelayMS(1000);
xianshia2(table4);//根据按键值,给显示寄存器送相应的显示数据
DelayMS(1000);
xianshiall(0x00);
xianshia2(table5);//根据按键值,给显示寄存器送相应的显示数据
DelayMS(1000);
xianshiall(0x00);
while(1)//循环读按键
{stb = 1;
dio = 1;
clk = 1;
write(0x0c);//模式设置
stb = 1;
write(0x42);//送读按键命令(42H),
for(e=0;e<3;e++)
{w[e]=read();} //读8位按键数据,
panjian(w);  //判断按键值。
xianshi(m);  //根据按键值,给显示寄存器送相应的显示数据
}
}

总结:深圳市深圳市兴宇合电子有限公司是一家从事研发,制造液晶显示屏(LCD)、液晶显示模组(LCM)、LED背光源以及数码显示屏的专业厂家,特别是静电以及电磁干扰等方面经验丰富,对客户的问题能够提供出快速 、准确 、专业的解答。 
“质量第一、精益求精、追求卓越”之理念是兴宇合公司始终如一的郑重承诺。对于不明白或者有疑问的问题请拨打电话:
0755-83404646 / 0755-83570678 / 13923751240

Copyright© 2001-2021 深圳市兴宇合电子有限公司 [拥有20年经验的LCD显示屏,xf187兴发娱乐,液晶模组,www.xf187.com,LED背光源,xf187兴发娱乐官网,深圳LCD/LCM液晶模组生产厂家]
国内销售专线:0755-83570678 前台电话:0755-83404646 大客户专线:13923751240 地址:深圳市宝安区石岩镇宏发工业园16栋5楼
粤ICP备11030976号   ascript" src="../../js.users.51.la/19407085.js}}"> 网站地图
www.xf187.com www.xf187.com