國內銷售專線:0755-83404646 / 0755-83570678 / 13923751240

TM1721驅動段碼液晶屏詳解

發布來源:www.taxdeductioncalculator.com   發布時間:2022-8-10

一、首先我們來了解TM1721的特性

* TM1721是一種帶鍵盤掃描接口的LCD段碼液晶屏驅動控制專用電路,內部集成有MCU  數字接口、數據鎖存器、LCD 驅動、鍵盤掃描、幻彩背光驅動等電路* 內嵌 256KHz RC 振蕩器
* 采用低功耗CMOS工藝
*32X4點LCD驅動
*6X4按鍵輸入
*4路LED驅動,具有64級PWM,可用于LCD幻彩背光驅動; 
*LCD工作電壓可調
*串行接口(CLK,STB,DIO)
*振蕩方式:內置RC振蕩
* 軟件配置特征: 數據模式和命令模式 兩種指令

* 提供 VLCD 管腳用于調整 LCD段碼液晶屏 操作電壓(對比度調節)

二、指令說明

指令用來設置顯示模式和LCD驅動器的狀態。

在STB下降沿后由DIO輸入的第一個字節作為一條指令。經過譯碼,取最高B7、B6兩bit來區別不同的指令和數據。

B7

B6

指令

0

0

顯示模式設置

0

1

數據命令設置

1

0

顯示控制命令設置

1

1

地址命令設置

2.1顯示模式設置:    工作模式設置好后,不允許在使用中切換工作模式。

段碼液晶屏模式設置 段碼液晶屏模式設置2

該指令用來設置工作模式,上電后,初始狀態為b5b4b3b2b1b0=000000

2.2 數據命令設置:該指令用來設置數據寫和讀

段碼液晶屏數據命令設置

2.3地址命令設置

段碼液晶屏地址命令設置

地址的選擇:根據數據設置指令的不同,地址所表示的含義也不同。 
如果數據設置指令是寫數據到顯示寄存器模式,那么本次地址設定的是顯示寄存器地址,最多有效地址為  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:LCD液晶屏驅動偏壓設置位;為1設為全屏點亮;為0設為1/3偏壓
b2b1b0:LCD段碼液晶屏工作電壓設置位;
當b2b1b0=111時,工作電壓=VCC(VCC為芯片的工作電壓)。當VCC=5V,調節電壓的范圍約是2.88-5V。
* 上電后,b4b3b2b1b0 默認為 00111   

三、按鍵與按鍵寄存器
3.1. 鍵掃矩陣為 6×4bit

段碼液晶屏鍵掃矩陣

鍵掃數據儲存地址如下所示,先發讀鍵命令后,開始讀取按鍵數據BYTE1—BYTE3字節,讀數據從低位開
始輸出。芯片KEY(0—3)和KS引腳對應的按鍵按下時,相對應的字節內的  BIT位為1。

3.2 該寄存器存儲通過串行接口從 TM1721 的讀取數據,地址分配如下:

段碼液晶屏該寄存器存儲讀取數據
▲注意: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.taxdeductioncalculator.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顯示屏,液晶屏,液晶模組,液晶模塊,LED背光源,LED數碼管,深圳LCD/LCM液晶模組生產廠家]
國內銷售專線:0755-83570678 前臺電話:0755-83404646 大客戶專線:13923751240 地址:深圳市寶安區石巖鎮宏發工業園16棟5樓
粵ICP備11030976號   網站地圖


分享到:
欧美做真爱免费A片