TM1629TM161TM162系列驱动程序
TM1629A芯片参考程序
/* *版权信息: *文件名: TM1629A芯片参考程序 *当前版本: 1.0 *单片机型号: AT89S52 *开发环境: Keil uVision3 *晶震频率: 12M *作者: *完成日期: 2009-05-05 功能: 驱动共阴LED数码屏做时钟显示,可由按键控制时钟暂 停,开始,停止以及其它数码管显示0-9数字,
if(TIME_seconds == 10) 出。
//对时间数据进行处理,以免溢
{
TIME_seconds = 0;
seconds_2+=1;
}
if(seconds_2 == 6)
{
seconds_2 = 0;
sub_1 +=1;
}
if(sub_1 == 10)
{
sub_1 = 0;
sub_2 +=1;
show[14] = CODE[seconds_2]; //数码屏倒数第二个“8”字,
第6页
tm1629.c
show[13] = CODE[sub_1]|T_count;
show[12] = CODE[sub_2];
show[11] = CODE[shi_1]|T_count;
show[10] = CODE[shi_2];
//K1与
SEG6按键按下,key_FLAG1 = 0x00启动定时器,时间开始。
if((key[1]==0x08)){count7 = 0x01;TR0 = 0;key_FLAG1 = 0x02;} //当
K0与SEG6按键按下,key_FLAG1 = 0x02单独显示数字按键无效!
暂停。
if((key[1]==0x80))
uchar h; stb = 1; clk = 1; dio = 1; write(0x40);//写数据到显示寄存器,采用地址自动加一 stb = 1; write(0xc0);//显示寄存器的00H单元开始 for(h=0;h<16;h++) { write(show_led[h]);//给显示寄存器送数据, } stb=1; write(0x8b);//显示控制参数,点亮数码屏幕,亮度可以通过改变低 三位调节
TM1629系列LED驱动IC应用手册说明书
如果你需要两个按键同时按下,图(11)的电路就有问题了。 我们知道SEG1/KS1-SEG8/KS8是显示和按键扫描复用的。以图(12)为例子,显示 需要D1亮,D2灭,那么我们需要让SEG1为“1”,SEG2为“0”状态,如果S1,S2同时被 按下,那么相当于SEG1,SEG2被短路,这时D1,D2都被点亮。
0
0
1
1
1
1
1
1
00H
B7
B6
B5
B4
B3
B2
B1
B0
SEG1
a bcd e f g
GRID1 图(8)
GRID7
图8给出共阳数码管的连接示意图,如果让该数码管显示“0”,那你需要在GRID1, GRID2,GRID3,GRID4,GRID5,GRID6为低电平的时候让SEG1为高电平,在GRID7为低电 平的时候让SEG1为低电平。
- 10 -
图(13) 图(14)
图(15)
由于在软件上面的处理有一定的局限,这里不给出具体的方法,我们建议用户 在使用过程中显示数据的存放地址单元中没有使用到的BIT位全部写“0”。否则在遇到 上面的情况按照图(12)连接可能会出现干扰显示的问题。
(3)显示和键盘扫描的时序 键扫描由TM1629xx完成,不受用户控制,用户只需要按照时序读键值。完成一 次键扫需要2个显示周期,一个显示周期大概需要T=8x500US,也就是说如果你在8MS先 后按下了2个不同的按键,2次读到的键值都是先按下的那个按键的键值。 显示和读键的时序如图(16)所示:
TM1629-ABCD不同系列介绍
TM1629是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位电路、键盘扫描等电路,芯片的段位可通过软件设置来实现16*8进行配置来适应不同连接的LED数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
本产品性能优良,质量可靠。
采用QFP44的封装形式。
TM1629A是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位等电路,芯片的段位可通过软件设置来实现16*8进行配置来适应不同连接的LED数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
本产品性能优良,质量可靠。
采用SOP32的封装形式。
TM1629B是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位电路、键盘扫描等电路,芯片的段位可通过软件设置来实现14*8进行配置来适应不同连接的LED数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
本产品性能优良,质量可靠。
采用SOP32的封装形式。
TM1629C是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口2、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位电路、键盘扫描等电路,芯片的段位可通过软件设置来实现15*8进行配置来适应不同连接的LED 数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
1628驱动按键程序
/*文件名:TM1628*单片机型号:A T89S52*开发环境:Keil uVision3*晶震频率:12M*/#include<reg52.h>#include<intrins.h>#include "tm1628.h"#define uchar unsigned char#define uint unsigned int//定义控制端口sbit DIO =P2^0;sbit CLK =P2^1;sbit STB =P2^2;//定义数据unsigned char const CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xef,0x6f}; //共阴数码管0-9的编码unsigned char KEY[5]={0}; //为存储按键值开辟的数组//向TM1628发送8位数据,从低位开始------------------------void send_8bit(uchar dat){uchar i;for(i=0;i<8;i++){if(dat&0x01)DIO=1;else DIO=0;CLK=0;CLK=1;dat=dat>>1;}}//向TM1628发送命令--------------------------------------void command(uchar com){STB=1;STB=0;send_8bit(com);}//读取按键值并存入KEY[]数组,从低字节开始,从低位开始---- void read_KEY(){uchar i,j;command(0x42); //读键盘命令DIO=1; //将DIO置高for(j=0;j<5;j++)//连续读取5个字节5组8位20位for(i=0;i<8;i++){KEY[j]=KEY[j]>>1;CLK=0;CLK=1;if(DIO)KEY[j]=KEY[j]|0X80;}STB=1;}//显示函数,1-7位数码管显示数字0-6----------------------------void nodisplay(unsigned char *s){uchar i;command(0x03); //设置显示模式,7位10段模式command(0x40); //设置数据命令,采用地址自动加1模式command(0xc0); //设置显示地址,从00H开始for(i=0;i<7;i++) //发送显示数据{send_8bit(*s); //从00H起,偶数地址送显示数据s++;send_8bit(0); //因为SEG9-14均未用到,所以奇数地址送全“0”}command(0x8F); //显示控制命令,打开显示并设置为最亮//read_KEY(); //读按键值STB=1;}//按键处理函数-------------------------------------------------/*void KEY_process(){//由用户编写} *///下边重新写定义unsigned char key_process(){switch(KEY[0]) //k1ks1k2ks1 0 k2ks1k2ks2 0(k0-k7)高地位对调k7-k0 实际是{case 0x01:return 1; break;case 0x02:return 2; break;case 0x08:return 3; break;case 0x10:return 4; break;default:return 0;break;}switch(KEY[1]){case 0x01:return 5; break;case 0x02:return 6; break;case 0x08:return 7; break;case 0x10:return 8; break;default:return 0;break;}switch(KEY[2]){case 0x01:return 9; break;case 0x02:return 10; break;case 0x08:return 11; break;case 0x10:return 12; break;default:return 0;break;}switch(KEY[3]){case 0x01:return 13; break;case 0x02:return 14; break;case 0x08:return 15; break;case 0x10:return 16; break;default:return 0;break;}switch(KEY[4]){case 0x01:return 17; break;case 0x02:return 18; break;case 0x08:return 19; break;case 0x10:return 20; break;default:return 0;break;}}/*//主函数-------------------------------------------------------void main(){display(); //显示while(1){read_KEY(); //读按键值key_process(); //按键处理}}*/#ifndef __tm1628_H__#define __tm1628_H__#define uchar unsigned char#define uint unsigned int//向TM1628发送8位数据,从低位开始------------------------void send_8bit(uchar dat) ;//向TM1628发送命令--------------------------------------void command(uchar com) ;//读取按键值并存入KEY[]数组,从低字节开始,从低位开始---- void read_KEY() ;//显示函数,1-7位数码管显示数字0-6----------------------------void nodisplay(unsigned char *s) ;//按键处理函数-------------------------------------------------/*void KEY_process(){//由用户编写} *///下边重新写定义unsigned char key_process();#endif。
TM1629驱动程序
{
unsigned char i,k=0;
//i——控制循环次数,k——临时保存读到的数据
DIO=1;
//释放DIO为输入
STB=0;
//保证“STB”为低电平,程序不依赖于之前端口的状态
//保证程序在实际运行中不会出现“端口迷失”
for(i=0;i<8;i++)
{
CLK=0;
//先将“CLK”清零
#define tm1616
1
#define tm1618
2
#define tm1618a
3
#define tm1620
4
#define tm1620b
5
#define tm1623
6
#define tm1624
7
#define tm1626a
8
#define tm1626b
9
#define tm1626c
10
#define tm1626d
11
#define tm1628
12
#define tm1629
13
#define tm1629a
14
#define tm1629b
15
#define tm1629c
16
#define tm1629d
17
#define tm1638
18
#define tm1668
19
Function List:
// 其它内容的说明
1.delay() ——延时程序
2.indate() ——通过MCU向LEDdriver中写入一字节的数据
3.outdate() ——通过MCU从LEDdriver中读出一字节的数据
LED驱动控制专用电路TM1628说明书
一、概述TM1628是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU 数字接口、数据锁存器、LED 驱动、键盘扫描等电路。
本产品质量可靠、稳定性好、抗干扰能力强。
主要适用于家电设备(智能热水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电表等数码管或LED显示设备。
二、特性说明•采用CMOS工艺•多种显示模式(10 段×7 位~ 13段×4 位)••••••••三、四、管脚功能定义:五、指令说明:指令用来设置显示模式和LED驱动器的状态。
在STB如果在指令或数据传输时STB被置为高电平,串行通讯被初始化,并且正在传送的指令或数据无效(之前传送7位10(3)显示控制命令设置:该指令用来设置显示的开关以及显示亮度调节。
共有8级辉度可供选择进行调节。
略,六、 显示寄存器地址:该寄存器存储通过串行接口接收从外部器件传送到TM1628的数据,最多有效地址从00H-0DH 共14字节单元,分别与芯片SEG 和GRID 管脚对应,具体分配如图(2):写, (图(7)图7给出共阴极数码管的连接示意图,如果让该数码管显示“0”,只需要向00H (GRID1)地址中从低位开2、驱动共阳极数码管:、该芯片最大支持的键扫矩阵为10×2bit,如下所示:图(3)键扫数据储存地址如下所示,先发读按键命令后,开始读取5字节的按键数据BYTE1—BYTE5,读数据从低位开始输出,其中B7和B6位为无效位固定输出为0。
芯片K和KS引脚对应的按键按下时,相对应的字节内的BIT位为1。
▲注意:1、TM1628最多可以读5个字节,不允许多读。
按下时,九、(1需要27位10.....图(10)如图(10)可知,芯片内部按键扫描原理如下:芯片从SEG1/KS1开始逐渐扫描到SEG10/KS10结束,并且SEG1/KS1-SEG8/KS8在一个周期内完成,SEG9/KS9-SEG10/KS10在下一个周期内完成。
TM1623TM1628共阳程序
*晶震频率:11.0592MHZ
*完成日期:2013-12-16
*程序功能:1.数码管驱动:
*免责声明:1.此程序为TM1628 TM1623共阳 驱动LED数码管显示演示程序,仅作参考之用。
2.如有直接使用本例程程序造成经济损失的,本人不承担任何责任
unsigned char Key[5]={0}; //为存储按键值定义的数组
const unsigned char BCD_LABLE_ALL[19]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
}
/****************读取按键值并存储*******************/
void read_key()
{
unsigned char i,j;
send_command(0x42);
Dout=1; //释放DIO
for(j=0;j<5;j++)
sbit CLK=P1^1; //定义CLK
sbit STB=P1^2; //定义STB
#ifdef guango
sbit Dout=P1^0;
#else
sbit Dout=P2^5;
#endif
char flag = 0;
/********************定义数据*************************/
}
}
}
}
else
TM1629
1 2
3 4 5 6 7
8 9 10 11
NC DOUT
DIN SCLK STB K0 K1
K2 K3 VSS NC
示波器探头1 示波器探头2
VCC
12
13
14
15
16
17
R1 R2
18
1K 1K
19
20
21
22
CLKSET/VDD
NC SEG1/KS1 SEG2/KS2 SEG3/KS3 SEG4/KS4
SEG16 SEG15 SEG14 SEG13 SEG12 SEG11 SEG10 SEG9 SEG8 SEG7 SEG6 SEG5 SEG4 SEG3 SEG2 SEG1
xxHL(低四位)
xxHU(高四位)
xxHL(低四位)
xxHU(高四位)
B0 B1 B2 B3 B4 B5 B6 B7 B0 B1 B2 B3 B4 B5 B6 B7
00HL 02HL 04HL 06HL 08HL 0AHL 0CHL 0EHL
00HU 02HU 04HU 06HU 08HU 0AHU 0CHU 0EHU
01HL 03HL 05HL 07HL 09HL 0BHL 0DHL 0FHL
01HU 03HU 05HU 07HU 09HU 0BHU 0DHU 0FHU
10 1 0 无关项,
011
设置脉冲宽度为 10/16
消光数量设置
100
设置脉冲宽度为 11/16
1 0 填0
101
设置脉冲宽度为 12/16
10
110
设置脉冲宽度为 13/16
10
111
设置脉冲宽度为 14/16
10
TM1621_V1.4液晶驱动
1 概述TM1621是内存映象和多功能的LCD 驱动器,TM1621的软件配置特性使它适用于多种LCD 应用场合,包括LCD 模块和显示子系统。
用于连接主控制器和TM1621的管脚只有4或5条,TM1621还有一个节电命令用于降低系统功耗。
功能特性工作电压2.4~ 5.2V内嵌256KHz RC 振荡器可外接32KHz 晶片或256KHz 频率源输入可选1/2或1/3偏压和1/2、1/3或1/4的占空比片内时基频率源蜂鸣器可选择两种频率节电命令可用于减少功耗内嵌时基发生器和看门狗定时器(WDT )时基或看门狗定时器溢出输出八个时基/看门狗定时器时钟源一个32x4的LCD 驱动器一个内嵌的32x4位显示RAM 内存四线串行接口片内LCD 驱动频率源软件配置特征数据模式和命令模式指令三种数据访问模式提供VLCD 管脚用于调整LCD 操作电压封装形式:SSOP48、LQFP44结构图2/CS 为片选信号线BZ ,/BZ 声音输出/WR ,/RD ,DATA : 串行接口COM0~COM3,SEG0~SEG31:LCD 输出/IRQ :时基或WDT 溢出输出管脚图:TM1621_SSOP4831234567891011VLCD VSS WR CS DATA VDD BZ BZ 121314151617181920212233232425262728293031323435363738394041424344TM1621TOP VIEW COM0COM1COM2COM3SEG0SEG1SEG2SEG3SEG4SEG5SEG6SEG7SEG8SEG9SEG10SEG11SEG12SEG13SEG14SEG15SEG16SEG17SEG18SEG19SEG20SEG21SEG22SEG23SEG24SEG25SEG26SEG27SEG28SEG29SEG30SEG31管脚功能定义:符号 引脚名称 脚号SSOP48 脚号QFP44 说明/CS 片选 9 1 当/CS 为高电平读写TM1621 的数据和命令无效,串行接口电路复位;当/CS 为低电平和作为输入时,读写TM1621的数据和命令有效/RD 数据输入 10 2 在/RD 信号的下降沿,TM1621内存的数据被读到DATA 线上,主控制器可以在下一个上升沿时锁存这些数据/WR 数据输入 11 / 在/WR 信号的上升沿,DATA 线上的数据写到TM1621DATA 串行数据输入/输出 12 3 外接上拉电阻的串行数据逻辑输入/输出VSS 逻辑地 13 4 系统接地OSCI 、 OSCO 外接晶振 14/15 / OSCI 和OSCO 外接一个32.768KHz 晶振用于产生系统时钟;若用另一个外部时钟源, 应接在OSCI 上;若用片内RC 振荡器OSCI 和OSCO 应悬空VLCD LCD 电源输入 16 5 LCD 电源输入VDD 逻辑正 17 6 系统接电源正/IRQ 时基/看门狗 18 / 时基或看门狗定时器溢出标志,NMOS 开漏输出4BZ 、/BZ 音频输出 19/20 7/8 声音频率输出COM0~COM 3 共用端输出端口21~24 9~12 LCD 共用端(common)驱动口SEG0~S EG31 段输出端口 8~1/48~25 44~13 LCD 段(segment)驱动口极限最大额定值 供应电压: -0.3V~0.5V 贮存温度:-50~125度输入电压: V SS -0.3V~V DD +0.3V 工作温度:-25~75度直流电气参数符号 描述 测试条件 最小值 典型值 最大值单位V DD 条 件 VDD 工作电压 2.4 5.2 VIDD 工作电流 3V 不带负载 片内RC 振荡器 150 300 uA5V 300 600 uAIDD 工作电流 3V 不带负载晶振 60 120 uA5V 120 240 uAIDD 工作电流 3V 不带负载 外部时钟源 100 200 uA5V 200 400 uAISTB 待机电流 3V 不带负载 省电模式 0.1 5 uA5V 0.3 10 uAVIL 输入低电平电压 3V DATA,/WR, /CS,/RD 0 0.6 V5V 0 1.0 VVIH 输入高电平电压 3V DATA,/WR, /CS,/RD 2.4 3.0 V5V 4.0 5.0 VIOL1 DATA,BZ,/BZ,/IRQ 3V VOL=0.3V 0.5 1.2 mA5V VOL=0.5V 1.3 2.6 mAIOH1 DATA,BZ, /BZ 3V VOH=2.7V -0.4 -0.8 mA5V VOH =4.5V -0.9 -1.8 mAIOL2 LCD 公共口漏电流 3V VOL=0.3V 80 150 uA5V VOL=0.5V 150 250 uAIOH2 LCD 公共口源电流 3V VOH=2.7V -80 -120 uA5V VOH=4.5V -120 -200 uAIOL3 LCD 段管脚漏电流 3V VOL=0.3V 60 120 uA55V VOL=0.5V 120 200 uAIOH3 LCD 段管脚源电流 3V VOH=2.7V -40 -70 uA5V VOH=4.5V -70 -100 uARPH 上拉电阻 3V DATA,/WR, /CS,/RD 40 80 150 Kohm5V 30 60 100 Kohm交流电气特性:符号 描 述 测试条件 最小值 典型值 最大值单位V DD 条件 fSYS1 系统时钟 3V 片内RC 振荡器 256 KHz5V 256 KHzfSYS2 系统时钟 3V 晶振 32.768 KHz5V 32.768 KHzfSYS3 系统时钟 3V 外部时钟源 256 KHz5V 256 KHzfLCD LCD 时钟 片内RC 振荡器 fSYS1/1024Hz晶振 fSYS2 /128Hz外部时钟源 fSYS3/1024HztCOM COM 时钟周期 n:COM 个数n/ fLCD sfCLK 串行数据时钟 3V 3 00 KHz5V 500 KHzfTON E 声音频率 片内RC 振荡器2.0或4.0 KHztDD DATA 管脚输出延迟时间 3V 2 u s5V 1 ustCS 串行接口复位脉冲宽度/RS 4 us6 应用图:主控制器与TM1621组成显示系统,参见下图注意: 1、VLCD 的电压必须低于VDD 电压;2、VR 电阻用于调节VLCD 输出电压,当VDD=5V ,VLCD=4V ,VR=15K Ω+20%3、R 为外部上拉电阻,上拉到VDD ,R=10K Ω+20%4、C1、C2 为外部晶振电容,建议值如下:晶振误差 电容值(C1、C2)+10ppm 0~10p10~20ppm 10~20p系统结构:1、显示内存(RAM )静态显示内存(RAM )以32x4位的格式储存所显示的数据。
使用TM1629A芯片驱动米字数码管
使⽤TM1629A芯⽚驱动⽶字数码管⽶字数码管可以显⽰数字和26个英⽂字母,应⽤范围⽐8字数码管更⼴泛⼀些。
市⾯上常见的⽶字数码管有三种,⼀种是15段的,另⼀种是16段,还有⼀种是17段的。
TM1629A可以驱动15和16段的数码管。
⼀、TM1629A主要参数共阴数码管:16 段 × 8 位共阳数码管:8 段 × 16 位8级辉度调节串⾏接⼝(CLK,STB,DIO)逻辑电源电压范围:-0.5~7.0V正常⼯作电压电压:5.0V ⼿册在天微官⽹上有,百度⼀下也很多。
⼆、电路设计 ⼿册给出了两个驱动8位数码管的电路,并未给出驱动⽶字数码管的电路。
参照这两个电路设计了驱动15位红⾊⽶字管的电路。
经过试验,电源电压完全可以使⽤3.3V,亮度⾮常⾼,甚⾄曾烧坏过⼀个笔画,也不知是不是数码管的质量问题。
三、驱动程序 该芯⽚有3个控制线,分别是:DIO:数据输⼊线CLK:时钟输⼊线STB:⽚选线 需要注意的是,TM1629A的CLK的时钟周期较慢(⼤于500ns),要根据MCU的频率测试⼀下,如果不能满⾜要求,要加⼊适当的延时。
特别需要注意的是时序图中的t CLK-STB和PW STB,都要求最⼩1us。
最好的办法是在DIO、CLK、STB变化的前后都插⼊⾜够长时间的延时,整个调通后再优化时间。
3.1 初始化⼯作 ⾸先进⾏初始化⼯作,主要是定义功能脚的⼯作模式。
1/****************************************************2*说明:初始化TM1629A3*备注:io.h中定义了 STB P3^2,CLK P3^3,DIO P5^54****************************************************/5void TM1629A_Init(void)6 {7/*GPIO初始化,均为开漏输出*/8 SET_BIT(P3M1, 2); //宏功能:令P3M1的BIT2=19 SET_BIT(P3M0, 2);10 SET_BIT(P3M1, 3);11 SET_BIT(P3M0, 3);12 SET_BIT(P5M1, 5);13 SET_BIT(P5M0, 5);14/*STB、CLK赋初值*/15 STB = 1;16 CLK = 1;17 }3.2 基本的写⼊函数 实际⼯作频率设定的是5.5296MHz。
TM1629-ABCD不同系列介绍
TM1629是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位电路、键盘扫描等电路,芯片的段位可通过软件设置来实现16*8进行配置来适应不同连接的LED数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
本产品性能优良,质量可靠。
采用QFP44的封装形式。
TM1629A是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位等电路,芯片的段位可通过软件设置来实现16*8进行配置来适应不同连接的LED数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
本产品性能优良,质量可靠。
采用SOP32的封装形式。
TM1629B是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位电路、键盘扫描等电路,芯片的段位可通过软件设置来实现14*8进行配置来适应不同连接的LED数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
本产品性能优良,质量可靠。
采用SOP32的封装形式。
TM1629C是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU数字接口2、数据锁存器、LED高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位电路、键盘扫描等电路,芯片的段位可通过软件设置来实现15*8进行配置来适应不同连接的LED 数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。
TM1629驱动程序
uint j; //j——控制本次需要传多少个字节显示数据
uchar tempdis;
tempdis=0;
DIO=1;
CLK=1;
STB=1; //通讯开始前通讯端口全部初始化为“1”
}
STB=1; //显示控制命令传完后将“STB”置“1”
}
//采用固定地址方式
void ser_display_g(uchar address,uchar disa)
{
DIO=1;
indata(startaddress); //传起始地址
//地址命令传完后,“STB”保持为“0”继续传需要显示的数据
for(j=0;j<datacount;j++)
{
{
k=(k|0x80&0xff); //如果“DIO”为高电平,则把k的最高位置“1”,其他各位保持不变
}
CLK=1; //送时钟的上升沿
} //送完一个字节后退出循环
}
indata(buf_ser[j]); //在连续传显示的数据过程中,STB保持为0
}
STB=1; //传完所有的显示数据后(最多14BYTE)后,将“STB置“1”
#endif
//------------------------------------------------采用地址自---------------------------------
void ser_display_a()
k=k>>1;
if(DIO==0)
{
k=k&0x7f; //如果“DIO”为低电平,则把k的最高位清“0”,其他各位保持不变
TM1621_V1.4液晶驱动
1 概述TM1621是内存映象和多功能的LCD 驱动器,TM1621的软件配置特性使它适用于多种LCD 应用场合,包括LCD 模块和显示子系统。
用于连接主控制器和TM1621的管脚只有4或5条,TM1621还有一个节电命令用于降低系统功耗。
功能特性工作电压2.4~ 5.2V内嵌256KHz RC 振荡器可外接32KHz 晶片或256KHz 频率源输入可选1/2或1/3偏压和1/2、1/3或1/4的占空比片内时基频率源蜂鸣器可选择两种频率节电命令可用于减少功耗内嵌时基发生器和看门狗定时器(WDT )时基或看门狗定时器溢出输出八个时基/看门狗定时器时钟源一个32x4的LCD 驱动器一个内嵌的32x4位显示RAM 内存四线串行接口片内LCD 驱动频率源软件配置特征数据模式和命令模式指令三种数据访问模式提供VLCD 管脚用于调整LCD 操作电压封装形式:SSOP48、LQFP44结构图2/CS 为片选信号线BZ ,/BZ 声音输出/WR ,/RD ,DATA : 串行接口COM0~COM3,SEG0~SEG31:LCD 输出/IRQ :时基或WDT 溢出输出管脚图:TM1621_SSOP4831234567891011VLCD VSS WR CS DATA VDD BZ BZ 121314151617181920212233232425262728293031323435363738394041424344TM1621TOP VIEW COM0COM1COM2COM3SEG0SEG1SEG2SEG3SEG4SEG5SEG6SEG7SEG8SEG9SEG10SEG11SEG12SEG13SEG14SEG15SEG16SEG17SEG18SEG19SEG20SEG21SEG22SEG23SEG24SEG25SEG26SEG27SEG28SEG29SEG30SEG31管脚功能定义:符号 引脚名称 脚号SSOP48 脚号QFP44 说明/CS 片选 9 1 当/CS 为高电平读写TM1621 的数据和命令无效,串行接口电路复位;当/CS 为低电平和作为输入时,读写TM1621的数据和命令有效/RD 数据输入 10 2 在/RD 信号的下降沿,TM1621内存的数据被读到DATA 线上,主控制器可以在下一个上升沿时锁存这些数据/WR 数据输入 11 / 在/WR 信号的上升沿,DATA 线上的数据写到TM1621DATA 串行数据输入/输出 12 3 外接上拉电阻的串行数据逻辑输入/输出VSS 逻辑地 13 4 系统接地OSCI 、 OSCO 外接晶振 14/15 / OSCI 和OSCO 外接一个32.768KHz 晶振用于产生系统时钟;若用另一个外部时钟源, 应接在OSCI 上;若用片内RC 振荡器OSCI 和OSCO 应悬空VLCD LCD 电源输入 16 5 LCD 电源输入VDD 逻辑正 17 6 系统接电源正/IRQ 时基/看门狗 18 / 时基或看门狗定时器溢出标志,NMOS 开漏输出4BZ 、/BZ 音频输出 19/20 7/8 声音频率输出COM0~COM 3 共用端输出端口21~24 9~12 LCD 共用端(common)驱动口SEG0~S EG31 段输出端口 8~1/48~25 44~13 LCD 段(segment)驱动口极限最大额定值 供应电压: -0.3V~0.5V 贮存温度:-50~125度输入电压: V SS -0.3V~V DD +0.3V 工作温度:-25~75度直流电气参数符号 描述 测试条件 最小值 典型值 最大值单位V DD 条 件 VDD 工作电压 2.4 5.2 VIDD 工作电流 3V 不带负载 片内RC 振荡器 150 300 uA5V 300 600 uAIDD 工作电流 3V 不带负载晶振 60 120 uA5V 120 240 uAIDD 工作电流 3V 不带负载 外部时钟源 100 200 uA5V 200 400 uAISTB 待机电流 3V 不带负载 省电模式 0.1 5 uA5V 0.3 10 uAVIL 输入低电平电压 3V DATA,/WR, /CS,/RD 0 0.6 V5V 0 1.0 VVIH 输入高电平电压 3V DATA,/WR, /CS,/RD 2.4 3.0 V5V 4.0 5.0 VIOL1 DATA,BZ,/BZ,/IRQ 3V VOL=0.3V 0.5 1.2 mA5V VOL=0.5V 1.3 2.6 mAIOH1 DATA,BZ, /BZ 3V VOH=2.7V -0.4 -0.8 mA5V VOH =4.5V -0.9 -1.8 mAIOL2 LCD 公共口漏电流 3V VOL=0.3V 80 150 uA5V VOL=0.5V 150 250 uAIOH2 LCD 公共口源电流 3V VOH=2.7V -80 -120 uA5V VOH=4.5V -120 -200 uAIOL3 LCD 段管脚漏电流 3V VOL=0.3V 60 120 uA55V VOL=0.5V 120 200 uAIOH3 LCD 段管脚源电流 3V VOH=2.7V -40 -70 uA5V VOH=4.5V -70 -100 uARPH 上拉电阻 3V DATA,/WR, /CS,/RD 40 80 150 Kohm5V 30 60 100 Kohm交流电气特性:符号 描 述 测试条件 最小值 典型值 最大值单位V DD 条件 fSYS1 系统时钟 3V 片内RC 振荡器 256 KHz5V 256 KHzfSYS2 系统时钟 3V 晶振 32.768 KHz5V 32.768 KHzfSYS3 系统时钟 3V 外部时钟源 256 KHz5V 256 KHzfLCD LCD 时钟 片内RC 振荡器 fSYS1/1024Hz晶振 fSYS2 /128Hz外部时钟源 fSYS3/1024HztCOM COM 时钟周期 n:COM 个数n/ fLCD sfCLK 串行数据时钟 3V 3 00 KHz5V 500 KHzfTON E 声音频率 片内RC 振荡器2.0或4.0 KHztDD DATA 管脚输出延迟时间 3V 2 u s5V 1 ustCS 串行接口复位脉冲宽度/RS 4 us6 应用图:主控制器与TM1621组成显示系统,参见下图注意: 1、VLCD 的电压必须低于VDD 电压;2、VR 电阻用于调节VLCD 输出电压,当VDD=5V ,VLCD=4V ,VR=15K Ω+20%3、R 为外部上拉电阻,上拉到VDD ,R=10K Ω+20%4、C1、C2 为外部晶振电容,建议值如下:晶振误差 电容值(C1、C2)+10ppm 0~10p10~20ppm 10~20p系统结构:1、显示内存(RAM )静态显示内存(RAM )以32x4位的格式储存所显示的数据。
程序调试报告-TM1628读按键
程序调试报告-TM1628读按键
调试人:
调试日期:2017-01-05——2017-01-06
1.编程总结
回过头来看TM1628读按键程序编写并无难度,反而很简单。
只需照TM1628手册编写即可,且对于ATmega8A单片机来说,用C语言不需任何延时。
关键点:
1)AVR单片机I/O口配置问题,涉及到输入、输出的切换;
2)串行通行用到的是I/O口的某一位,这一点操作时容易忽略。
2.调试现象及问题解决
1)读取键值恒为0xff(实际无此按键编码),实验中将此数据送入灯屏显示为“8:”;即使
无按键按下也是如此。
调试程序如下片段:
for(i=0;i<8;i++)
{
KEY[j]=KEY[j]>>1;
……
k=PIND;//①错误
if( k )
KEY[j]=KEY[j]|0x80;
}
①k取到的是D口的8位数据,实际串口数据线为其中的第7位BIT(6),其他7位做其他用途(包括显示),即D口8位不同时为0。
所以k=PIND≠0,最终KEY[j]=ff。
故应改为:k=PIND&0x40;//取串口数据位,即D口BIT(6)的值
2)读按键时无反应。
原因为D口数据位取错,对应的串口数据线为BIT(6),错误取了BIT(5)。
k=PIND&0x20;//②错误,这样得到的k永为0
②正确语句:
k=PIND&0x40;//取串口数据位,即D口BIT(6)的值。
TM1629 数据手册
GRID1
SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7
A DPY
B
a
Cf D
g
b
Ee
c
Fd
G [LEDgn]
GRID1
SEG7 1
图(7) 图7给出共阴数码管的连接示意图,如果让该数码管显示“0”,那你需要在GRID1为低电平 的时候让SEG1,SEG2,SEG3,SEG4,SEG5,SEG6为高电平,SEG7为低电平, 查看图(2)显示地址表格,只需在00H地址单元里面写数据3FH就可以让数码管显示“0”。
K1
SEG8/KS8
K2
SEG7/KS7
K3
SEG6/KS6
VDD
SEG5/KS5
SEG1/KS1
SEG4/KS4
SEG2/KS2
SEG3/KS3
图(9) IC在键盘扫描的时候SEGN/KSN的波形:
SEG1/KS1 SEG2/KS2 SEG3/KS3 SEGN/KSN
Tdisp=500us
图(10) Tdisp和IC工作的振荡频率有关,我司TM1629D经过多次完善,振荡频率不完全一致。500US 仅仅提供参考,以实际测量为准。
1
08H
0
0
0
0
0
0
0
1
0AH
0
0
0
0
0
0
0
0
0CH
B7
B6
B5
B4
B3
B2
B1
B0
▲注意:SEG1-12为P管开漏输出,GRID1-8为N管开漏输出,在使用时候,SEG1-12只能接LED的阳极, GRID只能接LED的阴极,不可反接。
TM1629B驱动代码参考
TM1629B驱动代码参考#define BIT0 0x01#define BIT1 0x02#define BIT2 0x04#define BIT3 0x08#define BIT4 0x10#define BIT5 0x20#define BIT6 0x40#define BIT7 0x80#define LNumb_a BIT7#define LNumb_b BIT5#define LNumb_c BIT0#define LNumb_d BIT2#define LNumb_e BIT3#define LNumb_f BIT6#define LNumb_g BIT4#define LNumb_x BIT1uint8 DisplayBuff[MaxWordBuff]; //显示缓冲区存放原始字形uint8 FlashBuff[MaxWordBuff]; //闪烁缓冲区存放同DisplayBuff 哪一位闪烁就清零该位缓冲区uint8xDat[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00}; //最终写入1629的代码uint8 FlashBit; //闪烁位bit FlashSwitch; //闪烁开关bit RefreshBit; //刷新标志uint8 FlashTime;bit ReadKey; //读键标志void Flash_Fun(void);extern uint8 *pDisplay;code uint8 NumTAB[] ={LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_e+LNumb_f, // 0LNumb_b+LNumb_c, // 1LNumb_a+LNumb_b+LNumb_d+LNumb_e+LNumb_g, // 2LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_g, // 3LNumb_b+LNumb_c+LNumb_f+LNumb_g, // 4LNumb_a+LNumb_c+LNumb_d+LNumb_f+LNumb_g, // 5LNumb_a+LNumb_c+LNumb_d+LNumb_e+LNumb_f+LNumb_g, // 6 LNumb_a+LNumb_b+LNumb_c, // 7LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_e+LNumb_f+LNumb_g, // 8 LNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_f+LNumb_g, // 9 };code uint8 ASCIITAB[]={LNumb_a+LNumb_b+LNumb_c+LNumb_e+LNumb_f+LNumb_g, // aLNumb_c+LNumb_d+LNumb_e+LNumb_f+LNumb_g, // bLNumb_a+LNumb_d+LNumb_e+LNumb_f, // cLNumb_b+LNumb_c+LNumb_d+LNumb_e+LNumb_g, // dLNumb_a+LNumb_d+LNumb_e+LNumb_f+LNumb_g, // eLNumb_a+LNumb_e+LNumb_f+LNumb_g, // fLNumb_a+LNumb_b+LNumb_c+LNumb_d+LNumb_f+LNumb_g, // gLNumb_b+LNumb_c+LNumb_e+LNumb_f+LNumb_g, // h LNumb_e+LNumb_f, // i 0xFF, // jLNumb_b+LNumb_d+LNumb_e+LNumb_f+LNumb_g, // kLNumb_d+LNumb_e+LNumb_f, // LLNumb_a+LNumb_c+LNumb_e+LNumb_g, // m LNumb_c+LNumb_e+LNumb_g, // n LNumb_c+LNumb_d+LNumb_e+LNumb_g, // oLNumb_a+LNumb_b+LNumb_e+LNumb_f+LNumb_g, // pLNumb_a+LNumb_b+LNumb_c+LNumb_f+LNumb_g, // q LNumb_e+LNumb_g, / r LNumb_a+LNumb_c+LNumb_d+LNumb_f+LNumb_g, // sLNumb_d+LNumb_e+LNumb_f+LNumb_g, // tLNumb_b+LNumb_c+LNumb_d+LNumb_e+LNumb_f, // U LNumb_c+LNumb_d+LNumb_e, // vLNumb_x, // wLNumb_x, // xLNumb_b+LNumb_c+LNumb_d+LNumb_f+LNumb_g, // yLNumb_a+LNumb_b+LNumb_d+LNumb_e+LNumb_g, // z };void Int1(void) //Timer 0 interrupt 中断1{TH0=(Timer0_Temp&0xff00)>>8;TL0=Timer0_Temp&0xff;FlashSwitch=~FlashSwitch;if(FlashSwitch==0)pDisplay=FlashBuff; else pDisplay=DisplayBuff; Flash_Fun();ReadKey=1;if(KeyPress)KeyTime++;elseKeyTime=1;}//========================================================//函数功能:全屏显示//========================================================void DisplayFull(void) {uint8 i=0;for(i=0;i<MaxWordBuff;i++) {DisplayBuff[i]=0xff; FlashBuff[i]=0xff;}RefreshBit=1;}//========================================================//函数功能:全屏清零//========================================================void Display_Clear(void) {uint8 i=0;for(i=0;i<MaxWordBuff;i++) {DisplayBuff[i]=0x00; FlashBuff[i]=0x00;}RefreshBit=1;}void LED_Init(void){TMOD&=0xf0;TMOD|=0x01; //TH0=(Timer0_Temp&0xff00)>>8; TL0=Timer0_Temp&0xff; ET0=1; TR0=1;DisplayFull();}/*函数功能:显示一个数字入口参数: 1)要显示的整形数 2)小数点位数*/void Display_Num(uint16 Num,int8 dotbit){uint8 i=0;while(i<4){DisplayBuff[i]=NumTAB[Num%10]; if(dotbit==i)DisplayBuff[i]|=LNumb_x; Num/=10;i++;}for(i=0;i<MaxWordBuff;i++) {FlashBuff[i]=DisplayBuff[i]; }RefreshBit=1;}/*函数功能:显示一个浮点数入口参数: 要显示的浮点数调用函数:1)display_str 2)Display_Num*/void Display_Float(float Num) {if(Num>9999.0){Display_Str("eeee",0);//超过9999显示eeee return;}if(Num>=1000.0){Display_Num(Num,-1);return;}if(Num>=100.0&&Num<=1000.0){Num*=10;Display_Num(Num,1);return;}if(Num>=10.00&&Num<100.0){Num*=100;Display_Num(Num,2); return;}if(Num<10.00){Num*=1000;Display_Num(Num,3); return;}}/*函数功能:SPI写入入口参数:要写入的数据*/void SPI_Write(uint8 SendByte) {uint8 N;CLR_CS;for(N=0;N<8;N++) {CLR_SCLK;CLR_DIO;if((SendByte&0x01)!=0)SET_DIO;SendByte>>=1;WDT_Clear();SET_SCLK;WDT_Clear();}}/*函数数功能:对TM1629写数据入口参数:指向要写入内容的指针*/void TM1629_Write(uint8 *pSend){uint8 Len;SET_CS;SET_DIO;SET_SCLK;SPI_Write(0x40); //地址自增加模式 SET_CS;SPI_Write(0xC0); //数据起始地址 for(Len=0;Len<16;Len++) {SPI_Write(*pSend); pSend++;}SET_CS;SPI_Write(0x8A); SET_CS;}/*函数功能:读TM1629B 入口参数: 读出内容存放地址 */ void SPI_Read(uint8 *KeyBuff){uint8 N;uint8 i;uint8 RetDat=0; SET_CS;SET_DIO;SET_SCLK;SPI_Write(0x42); //发送读键盘命令DISEN_DIO_OUT; EN_DIO_IN;for(i=0;i<4;i++) {for(N=0;N<8;N++) {CLR_SCLK;SET_SCLK;if((P4ID&BIT3)!=0){RetDat|=0x80;}RetDat>>=1;}*(KeyBuff+i)=RetDat; RetDat=0;}DISEN_DIO_IN;EN_DIO_OUT;SET_CS;}/*函数功能:字码转换入口参数:1)源字型,2).最终转换码*/uint8 code Dmap[MaxWordBuff]={4,5,6,7}; //显示位 uint8 code Seg_Map[8]={LNumb_c,LNumb_x,LNumb_d,LNumb_e,LNumb_g,LNumb_b,LNum b_f,LNumb_a}; //GR1~GR8对应笔段void Conver_Code(uint8 *SrcCode,uint8 *DstCode){uint8 Cnt0;uint8 DisplayBit;uint8 Src_Temp;uint8 Dst_Temp;for(Cnt0=0;Cnt0<16;Cnt0++)*(DstCode+Cnt0)=0;for(DisplayBit=0;DisplayBit<MaxWordBuff;DisplayBit++){Src_Temp=*SrcCode;SrcCode++;for(Cnt0=0;Cnt0<8;Cnt0++) {Dst_Temp=0x00;if(Src_Temp&Seg_Map[Cnt0])Dst_Temp=0x01;Dst_Temp<<=Dmap[DisplayBit]; DstCode[Cnt0*2]|=Dst_Temp; } }}/*函数功能:闪烁*/void Flash_Fun(void) {uint8 N;if((FlashBit<0)||(FlashBit>MaxWordBuff))return;if(FlashBit==MaxWordBuff) //全闪{for(N=0;N<MaxWordBuff;N++)FlashBuff[N]=0;}elseFlashBuff[FlashBit]=0; RefreshBit=1;}/**/void main(void ){LED_Init();EA=1;while(1){WDT_Clear();if(ReadKey)ReadKey=0,Get_Key(); if(RefreshBit){Conver_Code(pDisplay,xDat);TM1629_Write(xDat); RefreshBit=0; }Display_Float(1.234); }}。
1628驱动按键程序
/*文件名:TM1628*单片机型号:A T89S52*开发环境:Keil uVision3*晶震频率:12M*/#include<reg52.h>#include<intrins.h>#include "tm1628.h"#define uchar unsigned char#define uint unsigned int//定义控制端口sbit DIO =P2^0;sbit CLK =P2^1;sbit STB =P2^2;//定义数据unsigned char const CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xef,0x6f}; //共阴数码管0-9的编码unsigned char KEY[5]={0}; //为存储按键值开辟的数组//向TM1628发送8位数据,从低位开始------------------------void send_8bit(uchar dat){uchar i;for(i=0;i<8;i++){if(dat&0x01)DIO=1;else DIO=0;CLK=0;CLK=1;dat=dat>>1;}}//向TM1628发送命令--------------------------------------void command(uchar com){STB=1;STB=0;send_8bit(com);}//读取按键值并存入KEY[]数组,从低字节开始,从低位开始---- void read_KEY(){uchar i,j;command(0x42); //读键盘命令DIO=1; //将DIO置高for(j=0;j<5;j++)//连续读取5个字节5组8位20位for(i=0;i<8;i++){KEY[j]=KEY[j]>>1;CLK=0;CLK=1;if(DIO)KEY[j]=KEY[j]|0X80;}STB=1;}//显示函数,1-7位数码管显示数字0-6----------------------------void nodisplay(unsigned char *s){uchar i;command(0x03); //设置显示模式,7位10段模式command(0x40); //设置数据命令,采用地址自动加1模式command(0xc0); //设置显示地址,从00H开始for(i=0;i<7;i++) //发送显示数据{send_8bit(*s); //从00H起,偶数地址送显示数据s++;send_8bit(0); //因为SEG9-14均未用到,所以奇数地址送全“0”}command(0x8F); //显示控制命令,打开显示并设置为最亮//read_KEY(); //读按键值STB=1;}//按键处理函数-------------------------------------------------/*void KEY_process(){//由用户编写} *///下边重新写定义unsigned char key_process(){switch(KEY[0]) //k1ks1k2ks1 0 k2ks1k2ks2 0(k0-k7)高地位对调k7-k0 实际是{case 0x01:return 1; break;case 0x02:return 2; break;case 0x08:return 3; break;case 0x10:return 4; break;default:return 0;break;}switch(KEY[1]){case 0x01:return 5; break;case 0x02:return 6; break;case 0x08:return 7; break;case 0x10:return 8; break;default:return 0;break;}switch(KEY[2]){case 0x01:return 9; break;case 0x02:return 10; break;case 0x08:return 11; break;case 0x10:return 12; break;default:return 0;break;}switch(KEY[3]){case 0x01:return 13; break;case 0x02:return 14; break;case 0x08:return 15; break;case 0x10:return 16; break;default:return 0;break;}switch(KEY[4]){case 0x01:return 17; break;case 0x02:return 18; break;case 0x08:return 19; break;case 0x10:return 20; break;default:return 0;break;}}/*//主函数-------------------------------------------------------void main(){display(); //显示while(1){read_KEY(); //读按键值key_process(); //按键处理}}*/#ifndef __tm1628_H__#define __tm1628_H__#define uchar unsigned char#define uint unsigned int//向TM1628发送8位数据,从低位开始------------------------void send_8bit(uchar dat) ;//向TM1628发送命令--------------------------------------void command(uchar com) ;//读取按键值并存入KEY[]数组,从低字节开始,从低位开始---- void read_KEY() ;//显示函数,1-7位数码管显示数字0-6----------------------------void nodisplay(unsigned char *s) ;//按键处理函数-------------------------------------------------/*void KEY_process(){//由用户编写} *///下边重新写定义unsigned char key_process();#endif。
TM1629A芯片参考程序
uchar count7;
第1页
tm1629.c
/********************************* 功能: TM1629写数据
**********************************/
void write(uchar wr_data)
{
uchar i;
stb =0; 效)
seconds_2 = 0; TIME_seconds = 0; } } /********************************* 延时函数 功能: 1ms延时 **********************************/ void delay_ms(uchar cyc) { //当将=1的时候,延时1ms uchar ii,jj; for(jj=1;jj<=cyc;jj++) {
show[14] = CODE[seconds_2]; //数码屏倒数第二个“8”字,
第6页
tm1629.c
show[13] = CODE[sub_1]|T_count;
show[12] = CODE[sub_2];
show[11] = CODE[shi_1]|T_count;
show[10] = CODE[shi_2];
if((key[0]==0x08)){key_LED= 3;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K0与SEG2按键按 下,数码管显示数字3。
if((key[0]==0x80)){key_LED= 4;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K0与SEG3按键按 下,数码管显示数字4。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*************************************************************************************************** File name: Author: Version: Date: MCU : leddriver demo programme // 文件名 xcwy // 作者 // 版本 // 完成日期leddemo 0.1 2006年7月21日 AT89S52 // 单片机型号// 单片机使用的晶体频率 // 软件开发环境12Mkeilc v3.05c Description: 本程序是深圳市国管机电有限公司LED 驱动IC 的演示程序,采用C 语言编写// 用于详细说明此程序文件完成的主要功能,与其他模块 // 或函数的接口,输出值、取值范围、含义及参数间的控 // 制、顺序、独立或依赖等关系Others: 本程序仅仅提供演示,任何个人或企业直接使用本程序造成的损失本公司不承担任何责任 Function List: 1.delay () // 其它内容的说明 ——延时程序 ——通过MCU 向LEDdriver 中写入一字节的数据2.indate ()3.outdate () ——通过MCU 从LEDdriver 中读出一字节的数据4.display () ——采用地址自动加1方式的显示程序5.display2() ——采用固定地址方式的显示程序6.in_led()7.out_sw() ——采用地址自动加一方式先LED 显存 ——读SW 输入口状态// 主要函数列表,每条记录应包括函数名及功能简要说明History: 1. Date: Author: Modification:// 修改历史记录列表,每条修改记录应包括修改日期、修改 // 作者及修改内容简述 2006年7月21日9:02 xcwy 1)进一步添加了详细的注释 2006年12月17日 xcwy2. Date:Author: Modification: ****************************************************************************************************/ 1)修改为本公司通用的LED 驱动程序#include < REG52.h> #include<stdio.h> #include<intrins.h>//**************************************************************************************************#define tm1616 #define tm1618 #define tm1618a #define tm1620 #define tm1620b #define tm1623 #define tm1624 #define tm1626a #define tm1626b #define tm1626c #define tm1626d #define tm1628 #define tm1629 #define tm1629a #define tm1629b #define tm1629c #define tm1629d #define tm1638 #define tm1668 #define tw1628 #define icmodel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 tm1616 //这里选择的TM1616,更改“tm1616”可以得到其他型号IC 的驱动程序#if icmodel== tm1616#define seg #define grid 7 4 #define dismodel 1 #elif icmodel== tm1618 #define seg #define grid #define key 57 3 #define dismodel 4#elif icmodel== tm1618a #define seg #define grid #define key 7 5 4 #define dismodel 2 #elif icmodel== tm1620 #define seg 8 6#define grid #define dismodel 3 #elif icmodel== tm1620b #define seg grid key 6 73 #define #define #define dismodel4 #elif icmodel== tm1623#define seg #define grid #define key 1174 #define dismodel 4 #elif icmodel== tm1624#define #define #define seg grid 11 7dismodel 4 #elif icmodel== tm1626a#define seg 10 75 26 #define grid #define key #define sw #define led#define dismodel 4#elif icmodel== tm1626b#define seg #define grid #define key #define sw #define led 11 75 4 6#define dismodel 4 #elif icmodel== tm1626c#define seg grid key led 11 75 1#define #define #define #define dismodel 4 #elif icmodel== tm1626d#define seg #define grid #define key 10 751 #define led#define dismodel 4 #elif icmodel== tm1628#define seg #define grid #define key 10 74 #define dismodel 4 #elif icmodel== tm1629#define seg #define grid#define key 16 8 4#define dismodel 1#elif icmodel== tm1629a#define seg #define grid 16 8#define dismodel 1#elif icmodel== tm1629b#define seg #define grid#define key 14 8 4#define dismodel 1#elif icmodel== tm1629c#define seg #define grid#define key 15 8 4#define dismodel 1#elif icmodel== tm1629d#define seg #define grid#define key 12 8 4#define dismodel 1 #elif icmodel== tm1638#define seg #define grid#define key 10 8 4#define dismodel 1 #elif icmodel== tm1668#define seg #define grid#define key 10 7 5#define dismodel 1 #elif icmodel== tw1628#define seg #define grid#define key 10 7 5#define dismodel 1 #else#error "你必须确认IC的型号是否存在?"#endif#define dissetmode 0x030x400x41 //显示模式设置#define writedatamode_z #define writeledmode_z #define readkeymode#define readswmode#define writedatamode_g #define writeledmode_g #define startaddress#define disconmode//采用地址自动加一方式写显存//采用地址自动加一方式写LED显存命令//读按键命令0x420x430x440x450xc00x8c//读SW口命令//采用固定地址方式写显存//采用固定地址方式写LED显存命令//起始地址//显示控制//采用地址自动加一方式传输数据的个数#define datacount 2*grid//定义全局变量unsigned char k1, k2, k3, k4, k5; //按键值寄存器//SW寄存器unsigned da_sw;unsigned int count;//端口的定义sbit sbit sbit sbit STBCLKDIO= P2^0;= P2^1;= P2^2; //串行通讯口//外接蜂鸣器,可以不必理会SPEAK = P2^7;//*********************************************子程序开始************************************//----------------------------------------------延时程序开始--------------------------------- void delay(int k) {unsigned char i,j; for(;k>0;k--)for(j=255;j>0;j--) for(i=255;i>0;i--); }//----------------------------------------------延时程序结束---------------------------------- //----------------------------------------------写入输入1个字节(8bit)到LED_IC 程序开始--------- //输入8BIT 数据//在时钟的上升沿通过MCU 向LED 驱动IC ——TM16xx 写数据 void indate(unsigned char p) {unsigned int i; STB=0; //保证“STB”为低电平,程序不依赖于之前端口的状态//保证程序在实际运行中不会出现“端口迷失”for(i=0;i<8;i++) {CLK=0; //先将“CLK”清零 if((p& 0x01)!=0){ DIO=1;//需要传送的数据的低位为“1”,则把“DIO”清零 } {} elseDIO=0; //需要传送的数据的低位为“0”,则把“DIO”置高 CLK=1; p=p>>1; //送时钟的上升沿 //准备送下一个BIT//送完一个字节后退出循环 }}//----------------------------------------------写入输入1个字节(8bit)到LED_IC 程序结束--------- //----------------------------------------------从LED_IC 读入1个字节(8bit)程序开始------------- //输出8BIT 数据//在时钟的上升沿通过MCU 从LED 驱动IC ——TM16xx 读数据 #ifdef keyunsigned char outdate() {unsigned char i,k=0; DIO=1; STB=0; //i ——控制循环次数,k ——临时保存读到的数据//释放DIO 为输入 //保证“STB”为低电平,程序不依赖于之前端口的状态//保证程序在实际运行中不会出现“端口迷失”for(i=0;i<8;i++) {CLK=0; k=k>>1;//先将“CLK”清零 if(( P2& 0x04)==0){k=k& 0x7f; //如果“DIO”为低电平,则把k 的最高位清“0”,其他各位保持不变 k=(k| 0x80& 0xff); //如果“DIO”为高电平,则把k 的最高位置“1”,其他各位保持不变} {} elseCLK=1; }return(k);//送时钟的上升沿//送完一个字节后退出循环 //返回读到的1字节数据}#endif//----------------------------------------------从LED_IC 读入1个字节(8bit)程序结束----------- //----------------------------------------------采用地址自动加一方式传输地址和数据开始------ //采用地址自动加1方式D: \design\tmxx led demo\tmxx.c//上电后LED-DRIVER显存中的数据是随机的,上电后马上传显示控制命令字(打开显示),会出现乱码。