基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值應用
- STC12C5A60S2系列1T 8051單片機管腳圖
- STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置
- STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹
- TM1638鍵盤數碼管模塊概述
- TM1638鍵盤數碼管模塊特性說明
- TM1638鍵盤數碼管模塊管腳定義
- TM1638鍵盤數碼管模塊管腳功能說明
- TM1638鍵盤數碼管模塊按鍵讀取原理
- TM1638鍵盤數碼管模塊按鍵讀取時序
- TM1638鍵盤數碼管模塊顯示地址寄存器
- TM1638鍵盤數碼管模塊鍵掃數據寄存器
- TM1638鍵盤數碼管模塊數據寄存器
- TM1638鍵盤數碼管模塊數據命令寄存器
- TM1638鍵盤數碼管模塊地址命令寄存器
- TM1638鍵盤數碼管模塊顯示控制命令寄存器
- TM1638鍵盤數碼管模塊數碼管串行數據傳輸
- 數據接收(寫數據)
- 數據讀取(讀數據)
- TM1638鍵盤數碼管模塊串行數據地址傳輸模式時序圖
- 地址自動加1模式時序圖
- 固定地址模式時序圖
- TM1637鍵盤數碼管模塊程序設計流程圖
- 地址自動加1模式的程序設計流程圖
- 固定地址模式的程序設計流程圖
- TM1638鍵盤數碼管模塊應用電路
- TM1638鍵盤數碼管模塊驅動共陰數碼管硬件電路
- TM1638鍵盤數碼管模塊驅動共陽數碼管硬件電路
- TM1638鍵盤數碼管模塊電氣參數
- TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值編程
- TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值實驗現象
STC12C5A60S2系列1T 8051單片機管腳圖
STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置
STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹
TM1638鍵盤數碼管模塊概述
TM1638是帶鍵盤掃描接口的LED(發光二極管顯示器)驅動控制專用電路,內部集
成有MCU 數字接口、數據鎖存器、LED 高壓驅動、鍵盤掃描等電路。主要應用于冰箱、
空調 、家庭影院等產品的高段位顯示屏驅動。
TM1638鍵盤數碼管模塊特性說明
? 采用功率CMOS 工藝
? 顯示模式 10 段×8 位
? 鍵掃描(8×3bit)
? 輝度調節電路(占空比8 級可調)
? 串行接口(CLK,STB,DIO)
? 振蕩方式:RC 振蕩(450KHz+5%)
? 內置上電復位電路
? 采用SOP28封裝
TM1638鍵盤數碼管模塊管腳定義
TM1638鍵盤數碼管模塊管腳功能說明
TM1638鍵盤數碼管模塊按鍵讀取原理
TM1638鍵盤數碼管模塊按鍵讀取時序
TM1638鍵盤數碼管模塊顯示地址寄存器
TM1638鍵盤數碼管模塊鍵掃數據寄存器
TM1638鍵盤數碼管模塊數據寄存器
TM1638鍵盤數碼管模塊數據命令寄存器
TM1638鍵盤數碼管模塊地址命令寄存器
TM1638鍵盤數碼管模塊顯示控制命令寄存器
TM1638鍵盤數碼管模塊數碼管串行數據傳輸
數據接收(寫數據)
數據讀取(讀數據)
TM1638鍵盤數碼管模塊串行數據地址傳輸模式時序圖
地址自動加1模式時序圖
固定地址模式時序圖
TM1637鍵盤數碼管模塊程序設計流程圖
地址自動加1模式的程序設計流程圖
固定地址模式的程序設計流程圖
TM1638鍵盤數碼管模塊應用電路
TM1638鍵盤數碼管模塊驅動共陰數碼管硬件電路
TM1638鍵盤數碼管模塊驅動共陽數碼管硬件電路
TM1638鍵盤數碼管模塊電氣參數
TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值編程
main.c
#include <stc12c5a60s2.h>
#include "Timer0.h"
#include "Key.h"
#include "Digitron.h"
#include "TM1638OfI2C.h"
//#include"intrins.h"
#define uchar unsigned char//自定義無符號字符型為uchar
#define uint unsigned int//自定義無符號整數型為uintvoid PortModeSet()//端口模式設置函數
{P0M1 = 0x00;P0M0 = 0x00;P1M1 = 0x00;P1M0 = 0x00;P2M1 = 0x00;P2M0 = 0x00;P3M1 = 0x00;P3M0 = 0x00;P4M1 = 0x00;P4M0 = 0x00;}void main()//主函數
{PortModeSet();//端口模式設置函數
// Uart1Init();//串行口1工作模式1的8位串行口波特率可變初始化函數 波特率為9600bps 晶振為12MHzTimer0Init();//定時器0的16位定時模式1用12分頻定時2ms初始化函數 晶振為12MHzDigitronBootDisplay();//數碼管開機顯示函數TM1638OfI2CInit();//TM1638鍵盤數碼管模塊初始化函數
// TM1637AutomaticDisplay();//TM1637鍵盤數碼管模塊自動顯示函數while(1)//主循環{ KeyScanResult();//按鍵掃描結果函數}}
TM1638OfI2C.c
#include "TM1638OfI2C.h"
//#include "Key.h"
//#include "Digitron.h"
#include"intrins.h"
#define uchar unsigned char//自定義無符號字符型為uchar
#define uint unsigned int//自定義無符號整數型為uintvoid TM1638OfI2CWriteByte(uchar Data)//TM1638鍵盤數碼管模塊寫字節函數
{uchar i;//聲明字節位個數變量for (i = 0; i < 8; i++)//循環字節位個數{TM1638CLK = 0;//拉低TM1638鍵盤數碼管模塊時鐘線端口 讓TM1638鍵盤數碼管模塊進行輸出字節某位操作TM1638DIO = Data & 0x01;//取出該數據的字節最低位 如何取出該數據的字節最低位?為什么是&0x01?而不是|0x01?以兩個數據的字節來說明 如:0000 0010 和 0000 0011 它們的最低位分別為0和1 &0x01后是0和1 也是它們的最低位0和1 如果|0x01后都是1 就再也不是它們原來的最低位0和1 Data >>= 1;//取出該數據的字節最低位后 剩余字節往右移一位 形成新的數據的字節TM1638CLK = 1;//拉高TM1638鍵盤數碼管模塊時鐘線端口 結束TM1638鍵盤數碼管模塊輸出字節某位操作}}void TM1638OfI2CWriteCommand(uchar Command)//TM1638鍵盤數碼管模塊寫命令函數
{TM1638STB = 0;//拉低TM1638鍵盤數碼管模塊片選線端口 讓TM1638鍵盤數碼管模塊進行寫操作TM1638OfI2CWriteByte(Command);//通過TM1638鍵盤數碼管模塊寫字節函數來寫命令TM1638STB = 1;//拉高TM1638鍵盤數碼管模塊片選線端口 結束TM1638鍵盤數碼管模塊寫操作}void TM1638OfI2CWriteData(uchar Address,uint Data)//TM1638鍵盤數碼管模塊寫數據函數 在指定的顯示地址寫入數據
{TM1638STB = 0;//拉低TM1638鍵盤數碼管模塊片選線端口 讓TM1638鍵盤數碼管模塊進行寫操作TM1638OfI2CWriteByte(0x00 | Address);//通過TM1638鍵盤數碼管模塊寫字節函數來寫顯示地址TM1638OfI2CWriteByte(Data);//通過TM1638鍵盤數碼管模塊寫字節函數來寫數據TM1638STB = 1;//拉高TM1638鍵盤數碼管模塊片選線端口 結束TM1638鍵盤數碼管模塊寫操作}/***** uhar TM1638OfI2CReadByte()//TM1638鍵盤數碼管模塊讀字節函數
{uchar i;//聲明字節位個數變量uchar ByteData = 0;//聲明字節數據變量TM1638DIO = 1;//拉高TM1638鍵盤數碼管模塊數據線端口 讀入數據for(i = 0; i < 8; i++)//循環字節位個數{ByteData >>= 1;//字節數據往右移一位 形成新的數據的字節 如:1010 1010 右移一位 變為0101 0101TM1638CLK = 0;//拉低TM1638鍵盤數碼管模塊時鐘線端口 讓TM1638鍵盤數碼管模塊進行讀取字節某位操作if(TM1638DIO)//判斷TM1638鍵盤數碼管模塊數據線端口是否為高電平ByteData |= 0x80;//置該數據的字節最高位為1 其余位不變 如何置該數據的字節最高位為1?為什么是|=0x80?而不是&=0x80?以兩個數據的字節來說明 如:0100 0000 和 1000 0000 它們的最高位分別為0和1 |=0x80后都是1 也是它們的最高位都置為1 如果&=0x80后最高位分別是0和1 就再也不是它們原來的最高位都置為1 TM1638CLK = 1;//拉高TM1638鍵盤數碼管模塊時鐘線端口 結束TM1638鍵盤數碼管模塊讀取字節某位操作}return ByteData;//返回字節數據}
*****/ /***** uchar TM1638OfI2CReadKey()//TM1638鍵盤數碼管模塊讀按鍵函數
{uchar KeyByteArrary[4];//聲明按鍵字節值數組變量uchar i;//聲明按鍵字節值數組個數變量 uchar KeyValue = 0;//聲明按鍵數值變量TM1638STB=0;//拉低TM1638鍵盤數碼管模塊片選線端口 讓TM1638鍵盤數碼管模塊進行讀操作TM1638OfI2CWriteByte(0x42); //設置TM1638鍵盤數碼管模塊的數據命令寄存器 寫鍵掃數據命令 注意:這里要先寫完4個字節鍵值才能將TM1638STB置1 否則寫鍵值無效for (i = 0; i < 4; i++)//循環按鍵字節值數組中字節值個數 共有4個按鍵字節值KeyByteArrary[i] = TM1638OfI2CReadByte();//發送TM1638ReadByte(0x42)讀鍵掃數據命令后 開始讀取按鍵數據BYTE1—BYTE4共4個字節 從低位開始讀取數據 TM1638鍵盤數碼管模塊上的K和KS引腳對應的按鍵按下時 相對應的按鍵字節值內的字節位為1TM1638STB=1;//拉高TM1638鍵盤數碼管模塊片選線端口 結束TM1638鍵盤數碼管模塊進行讀操作for (i = 0; i < 4; i++)//循環按鍵字節值數組中字節值個數 共有4個按鍵字節值KeyValue |= KeyByteArrary[i] << i;//通過按鍵字節值循環取值來確定TM1638鍵盤數碼管模塊上的K引腳下對應的KS系列八個按鍵的前四個按鍵按鍵字節值 for (i = 0; i < 8; i++)//循環TM1638鍵盤數碼管模塊上的K引腳下對應的KS系列八個按鍵if ((0x01 << i) == KeyValue)//判斷TM1638鍵盤數碼管模塊上的K引腳下對應的KS系列八