TM1629驱动程序.docx

上传人:b****3 文档编号:3703392 上传时间:2022-11-24 格式:DOCX 页数:27 大小:98.86KB
下载 相关 举报
TM1629驱动程序.docx_第1页
第1页 / 共27页
TM1629驱动程序.docx_第2页
第2页 / 共27页
TM1629驱动程序.docx_第3页
第3页 / 共27页
TM1629驱动程序.docx_第4页
第4页 / 共27页
TM1629驱动程序.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

TM1629驱动程序.docx

《TM1629驱动程序.docx》由会员分享,可在线阅读,更多相关《TM1629驱动程序.docx(27页珍藏版)》请在冰豆网上搜索。

TM1629驱动程序.docx

TM1629驱动程序

 

TM1629驱动程序(总8页)

 

E:

\Item\design\tmxxleddemo\sw\

/***************************************************************************************************

Filename:

Author:

Version:

Date:

MCU:

leddriverdemoprogramme

xcwy

leddemo

2006年7月21日

AT89S52

12M

keilc

Date:

Author:

Date:

Author:

xcwy

2006年12月17日

Modification:

1)修改为本公司通用的LED驱动程序

****************************************************************************************************/

#include<>

#include<>

#include<>

//**************************************************************************************************

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

tm1616

tm1618

tm1618a

tm1620

tm1620b

tm1623

tm1624

tm1626a

tm1626b

tm1626c

tm1626d

tm1628

tm1629

tm1629a

tm1629b

tm1629c

tm1629d

tm1638

tm1668

tw1628

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#define

icmodel

tm1616

//这里选择的TM1616,更改“tm1616”可以得到其他型号IC的驱动程序

#ificmodel==tm1616

 

Page:

1

 

E:

\Item\design\tmxxleddemo\sw\

#defineseg

#definegrid

7

4

#definedismodel1

#elificmodel==tm1618

#defineseg

#definegrid

#definekey

5

7

3

#definedismodel4

#elificmodel==tm1618a

#defineseg

#definegrid

#definekey

7

5

4

#definedismodel2

#elificmodel==tm1620

#define

#define

seg

grid

8

6

#define

dismodel3

#elificmodel==tm1620b

#define

#define

#define

seg

grid

key

6

7

3

#define

dismodel4

#elificmodel==tm1623

#define

#define

#define

seg

grid

key

11

7

4

#define

dismodel4

#elificmodel==tm1624

#define

#define

seg

grid

11

7

#define

dismodel4

#elificmodel==tm1626a

#define

#define

#define

#define

#define

seg

grid

key

sw

led

10

7

5

2

6

#define

dismodel4

#elificmodel==tm1626b

#define

#define

#define

#define

#define

seg

grid

key

sw

led

11

7

5

4

6

#define

dismodel4

#elificmodel==tm1626c

#define

#define

#define

#define

seg

grid

key

led

11

7

5

1

#define

dismodel4

#elificmodel==tm1626d

#define

#define

#define

#define

seg

grid

key

led

10

7

5

1

#define

dismodel4

#elificmodel==tm1628

#define

#define

#define

seg

grid

key

10

7

4

#define

dismodel4

#elificmodel==tm1629

 

Page:

2

 

E:

\Item\design\tmxxleddemo\sw\

#define

#define

#define

seg

grid

key

16

8

4

#define

dismodel1

#elificmodel==tm1629a

#define

#define

seg

grid

16

8

#define

dismodel1

#elificmodel==tm1629b

#define

#define

#define

seg

grid

key

14

8

4

#define

dismodel1

#elificmodel==tm1629c

#define

#define

#define

seg

grid

key

15

8

4

#define

dismodel1

#elificmodel==tm1629d

#define

#define

#define

seg

grid

key

12

8

4

#define

dismodel1

#elificmodel==tm1638

#define

#define

#define

seg

grid

key

10

8

4

#define

dismodel1

#elificmodel==tm1668

#define

#define

#define

seg

grid

key

10

7

5

#define

dismodel1

#elificmodel==tw1628

 

#endif

 

#else

#error"你必须确认IC的型号是否存在"

#define

#define

#define

#define

seg

grid

key

dismodel

10

7

5

1

#define

#define

#define

#define

#define

#define

#define

#define

#define

#define

dissetmode

writedatamode_z

writeledmode_z

readkeymode

readswmode

writedatamode_g

writeledmode_g

startaddress

disconmode

datacount

0x03

0x40

0x41

0x42

0x43

0x44

0x45

0xc0

0x8c

2*grid

//显示模式设置

//采用地址自动加一方式写显存

//采用地址自动加一方式写LED显存命令

//读按键命令

//读SW口命令

//采用固定地址方式写显存

//采用固定地址方式写LED显存命令

//起始地址

//显示控制

//采用地址自动加一方式传输数据的个数

//定义全局变量

unsignedchark1,k2,k3,k4,k5;

unsignedda_sw;

//按键值寄存器

//SW寄存器

unsignedint

//端口的定义

count;

sbit

sbit

STB

CLK

=P2^0;

=P2^1;

sbit

sbit

DIO

SPEAK

=P2^2;

=P2^7;

//串行通讯口

//外接蜂鸣器,可以不必理会

//*********************************************子程序开始************************************

 

Page:

3

 

E:

\Item\design\tmxxleddemo\sw\

//----------------------------------------------延时程序开始---------------------------------

voiddelay(intk)

{

unsignedchari,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写数据

voidindate(unsignedcharp)

{

unsignedinti;

STB=0;

//保证“STB”为低电平,程序不依赖于之前端口的状态

//保证程序在实际运行中不会出现“端口迷失”

for(i=0;i<8;i++)

{

CLK=0;

//先将“CLK”清零

if((p&0x01)!

=0)

{

 

}

}

else

{

}

CLK=1;

p=p>>1;

DIO=1;

 

DIO=0;

//需要传送的数据的低位为“1”,则把“DIO”清零

 

//需要传送的数据的低位为“0”,则把“DIO”置高

//送时钟的上升沿

//准备送下一个BIT

//送完一个字节后退出循环

}

//----------------------------------------------写入输入1个字节(8bit)到LED_IC程序结束---------

//----------------------------------------------从LED_IC读入1个字节(8bit)程序开始-------------

//输出8BIT数据

//在时钟的上升沿通过MCU从LED驱动IC——TM16xx读数据

#ifdefkey

unsignedcharoutdate()

{

unsignedchari,k=0;

DIO=1;

STB=0;

//i——控制循环次数,k——临时保存读到的数据

//释放DIO为输入

//保证“STB”为低电平,程序不依赖于之前端口的状态

//保证程序在实际运行中不会出现“端口迷失”

for(i=0;i<8;i++)

{

CLK=0;

k=k>>1;

if((P2&0x04)==0)

{

k=k&0x7f;

//先将“CLK”清零

 

//如果“DIO”为低电平,则把k的最高位清“0”,其他各位保持不变

}

else

{

k=(k|0x80&0xff);//如果“DIO”为高电平,则把k的最高位置“1”,其他各位保持不变

}

CLK=1;

}

return(k);

//送时钟的上升沿

//送完一个字节后退出循环

//返回读到的1字节数据

}

#endif

//----------------------------------------------从LED_IC读入1个字节(8bit)程序结束-----------

//----------------------------------------------采用地址自动加一方式传输地址和数据开始------

//采用地址自动加1方式

 

Page:

4

 

E:

\Item\design\tmxxleddemo\sw\

//上电后LED-DRIVER显存中的数据是随机的,上电后马上传显示控制命令字(打开显示),会出现乱码。

//为避免上述现象,用户可以先传显示控制命令将显示关掉(见应用手册中详细介绍),然后正常操作

//也可以先主动刷新LED-DRIVER显存中的数据。

然后开显示

//这里采用是第二种方法

voiddisplay(unsignedchardisa)

{

unsignedinti;

DIO=1;

CLK=1;

STB=1;

indate(writedatamode_z);

STB=1;

indate(startaddress);

//i——控制本次需要传多少个字节显示数据

 

//通讯开始前通讯端口全部初始化为“1”

//传数据设置命令,设置采用地址自动加1方式写显示数据,

//数据设置命令传完后需要将“STB”置“1”

//传起始地址

//地址命令传完后,“STB”保持为“0”继续传需要显示的数据

for(i=0;i

{

indate(disa);

}

STB=1;

indate(disconmode);

STB=1;

//在连续传显示的数据过程中,“STB”一直保持为”0“

//传完所有的显示数据后(最多14BYTE)后,将“STB置“1”

//传显示控制命令

//显示控制命令传完后将“STB”置“1”

}

//----------------------------------------------采用地址自动加一方式传输地址和数据结束-------

//----------------------------------------------采用固定地址方式传输地址和数据开始-----------

//采用固定地址方式

voiddisplay2(unsignedcharadress,disa)

{

DIO=1;

CLK=1;

STB=1;

indate(writedatamode_g);

STB=1;

indate(adress);

indate(disa);

STB=1;

//通讯开始前通讯端口全部初始化为“1”

//数据设置命令

//传显示数据对应的地址

//保持“STB”=“0”,传1BYTE显示数据

//传完显示数据后将“STB”置“1”

}

//----------------------------------------------采用固定地址方式传输地址和数据结束-------------

//----------------------------------------------按键扫描程序开始------------------------------

//按键扫描

//只要定义了key都将执行按键扫描程序,且必须从低字节开始读

#ifdefkey

unsignedcharkeyscan()

{

STB=1;

indate(readkeymode);

//传数据设置命令,设置为读按键

//“STB”保持为“0”,读键值

//将读到的键值保存在MCU的寄存器中

//根据IC型号读指定字节,不允许多读,否则会造成读按键不稳定

if(key>=1)

k1=outdate();

if(key>=2)

k2=outdate();

if(key>=3)

k3=outdate();

if(key>=4)

k4=outdate();

if(key>=5)

k5=outdate();

STB=1;

return0;

//读键结束将“STB”置“1”

}

#endif

//----------------------------------------------按键扫描程序结束----------------------------------

 

Page:

5

 

E:

\Item\design\tmxxleddemo\sw\

//----------------------------------------------PWM数据传输开始-----------------------------------

#ifdefled

unsignedcharin_led()

{

STB=1;

indate(writeledmode_z);

STB=1;

//数据设置命令,设置为写LED显存

indate(0xc0);

indate(0x0f);

indate(0x0f);

indate(0x0f);

indate(0x00);

indate(0x0f);

indate(0x0f);

indate(0x0f);

indate(0x00);

//起始地址,这里的地址和

//LED1宽度设置

//LED2宽度设置

//LED3宽度设置

//关闭LED123同步调节

//LED4宽度设置

//LED5宽度设置

//LED6宽度设置

//关闭LED456同步调节

STB=1;

return0;

}

#endif

//----------------------------------------------PWM数据传输结束-------------------------------------

#ifdefled

unsignedcharin_led_g(unsignedcharadress_led,da_led)

{

STB=1;

indate(writeledmode_g);

STB=1;

indate(adress_led);

indate(da_led);

STB=1;

return0;

}

#endif

//----------------------------------------------读入SW口状态开始------------------------------------

#ifdefsw

unsignedcharout_sw()

{

STB=1;

indate(readswmode);

//数据设置命令,设置为读SW输入口

da_sw=outdate();

STB=1;

return0;

}

#endif

//----------------------------------------------读入SW口状态结束-----------------------------------

//*********************************************子程序结束******************************************

//*********************************************主程序开始******************************************

voidmain(void)

{

SPEAK=0;

DIO=1;

CLK=1;

STB=1;

indate(dissetmode);

//传显示模式设置命令,设置为7个“GRID”方式

//这里不在详细给出多个显示模式的设置程序请参考产品应用手册,显示模式在上电设置好后不允许更改

STB=1;

display(0xff);

delay(10);

display2(0xC0,0x00);

delay(10);

#ifdefkey

 

Page:

6

//全亮

//采用固定地址方式向C0地址单元写00

 

E:

\Item\design\tmxxleddemo\sw\

keyscan();

//调用按键扫描程序

#endif

//本程序仅仅提供按键扫描,2次按键扫描的时间不得<10MS,在这里不提供按键处理程序

#ifdefled

in_led();

delay(10);

in_led_g(0xc0,0x00);

#endif

#ifdefsw

out_sw();

//6路PWM输出口输出"1"

//让LED1输出"0"

 

//调用读SW输入口程序

#endif

//这里不提供SW口处理程序

_nop_();

}

//*********************************************主程序结束*******************************************

 

Page:

7

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1