《TM1629驅(qū)動程序.doc》由會員分享,可在線閱讀,更多相關(guān)《TM1629驅(qū)動程序.doc(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
E:\Item\design\tmxx led demo\sw\currency.c
/***************************************************************************************************
File name:
Author:
Version:
Date:
MCU:
leddriver demo programme
xcwy
leddemo 0.1
2006年7月21日
AT89S52
12M
keilc v3.05c
// 文件名
// 作者
// 版本
// 完成日期
// 單片機(jī)型號
// 單片機(jī)使用的晶體頻率
// 軟件開發(fā)環(huán)境
Description: 本程序是深圳市天微電子有限公司LED驅(qū)動IC的演示程序,采用C語言編寫
// 用于詳細(xì)說明此程序文件完成的主要功能,與其他模塊
// 或函數(shù)的接口,輸出值、取值范圍、含義及參數(shù)間的控
// 制、順序、獨立或依賴等關(guān)系
Others:
本程序僅僅提供演示,任何個人或企業(yè)直接使用本程序造成的損失本公司不承擔(dān)任何責(zé)任
// 其它內(nèi)容的說明
Function List:
1.delay()
2.indate()
3.outdate()
4.display()
——延時程序
——通過MCU向LEDdriver中寫入一字節(jié)的數(shù)據(jù)
——通過MCU從LEDdriver中讀出一字節(jié)的數(shù)據(jù)
——采用地址自動加1方式的顯示程序
5.display2() ——采用固定地址方式的顯示程序
6.in_led()
7.out_sw()
——采用地址自動加一方式先LED顯存
——讀SW輸入口狀態(tài)
// 主要函數(shù)列表,每條記錄應(yīng)包括函數(shù)名及功能簡要說明
History:
1. Date:
Author:
// 修改歷史記錄列表,每條修改記錄應(yīng)包括修改日期、修改
// 作者及修改內(nèi)容簡述
2006年7月21日9:02
xcwy
Modification:
1)進(jìn)一步添加了詳細(xì)的注釋
2. Date:
Author:
xcwy
2006年12月17日
Modification:
1)修改為本公司通用的LED驅(qū)動程序
*************************************************************************************************** */
#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的驅(qū)動程序
#if icmodel==tm1616
Page: 1
E:\Item\design\tmxx led demo\sw\currency.c
#define seg
#define grid
7
4
#define dismodel 1
#elif icmodel==tm1618
#define seg
#define grid
#define key
5
7
3
#define dismodel 4
#elif icmodel==tm1618a
#define seg
#define grid
#define key
7
5
4
#define dismodel 2
#elif icmodel==tm1620
#define
#define
seg
grid
8
6
#define
dismodel 3
#elif icmodel==tm1620b
#define
#define
#define
seg
grid
key
6
7
3
#define
dismodel 4
#elif icmodel==tm1623
#define
#define
#define
seg
grid
key
11
7
4
#define
dismodel 4
#elif icmodel==tm1624
#define
#define
seg
grid
11
7
#define
dismodel 4
#elif icmodel==tm1626a
#define
#define
#define
#define
#define
seg
grid
key
sw
led
10
7
5
2
6
#define
dismodel 4
#elif icmodel==tm1626b
#define
#define
#define
#define
#define
seg
grid
key
sw
led
11
7
5
4
6
#define
dismodel 4
#elif icmodel==tm1626c
#define
#define
#define
#define
seg
grid
key
led
11
7
5
1
#define
dismodel 4
#elif icmodel==tm1626d
#define
#define
#define
#define
seg
grid
key
led
10
7
5
1
#define
dismodel 4
#elif icmodel==tm1628
#define
#define
#define
seg
grid
key
10
7
4
#define
dismodel 4
#elif icmodel==tm1629
Page: 2
E:\Item\design\tmxx led demo\sw\currency.c
#define
#define
#define
seg
grid
key
16
8
4
#define
dismodel 1
#elif icmodel==tm1629a
#define
#define
seg
grid
16
8
#define
dismodel 1
#elif icmodel==tm1629b
#define
#define
#define
seg
grid
key
14
8
4
#define
dismodel 1
#elif icmodel==tm1629c
#define
#define
#define
seg
grid
key
15
8
4
#define
dismodel 1
#elif icmodel==tm1629d
#define
#define
#define
seg
grid
key
12
8
4
#define
dismodel 1
#elif icmodel==tm1638
#define
#define
#define
seg
grid
key
10
8
4
#define
dismodel 1
#elif icmodel==tm1668
#define
#define
#define
seg
grid
key
10
7
5
#define
dismodel 1
#elif icmodel==tw1628
#endif
#else
#error "你必須確認(rèn)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
//顯示模式設(shè)置
//采用地址自動加一方式寫顯存
//采用地址自動加一方式寫LED顯存命令
//讀按鍵命令
//讀SW口命令
//采用固定地址方式寫顯存
//采用固定地址方式寫LED顯存命令
//起始地址
//顯示控制
//采用地址自動加一方式傳輸數(shù)據(jù)的個數(shù)
//定義全局變量
unsigned char k1,k2,k3,k4,k5;
unsigned da_sw;
//按鍵值寄存器
//SW寄存器
unsigned int
//端口的定義
count;
sbit
sbit
STB
CLK
=P2^0;
=P2^1;
sbit
sbit
DIO
SPEAK
=P2^2;
=P2^7;
//串行通訊口
//外接蜂鳴器,可以不必理會
//*********************************************子程序開始************************************
Page: 3
E:\Item\design\tmxx led demo\sw\currency.c
//----------------------------------------------延時程序開始---------------------------------
void delay(int k)
{
unsigned char i,j;
for(;k>0;k--)
for(j=255;j>0;j--)
for(i=255;i>0;i--);
}
//----------------------------------------------延時程序結(jié)束----------------------------------
//----------------------------------------------寫入輸入1個字節(jié)(8bit)到LED_IC程序開始---------
//輸入8BIT數(shù)據(jù)
//在時鐘的上升沿通過MCU向LED驅(qū)動IC——TM16xx寫數(shù)據(jù)
void indate(unsigned char p)
{
unsigned int i;
STB=0;
//保證“STB”為低電平,程序不依賴于之前端口的狀態(tài)
//保證程序在實際運行中不會出現(xiàn)“端口迷失”
for(i=0;i<8;i++)
{
CLK=0;
//先將“CLK”清零
if((p&0x01)!=0)
{
}
}
else
{
}
CLK=1;
p=p>>1;
DIO=1;
DIO=0;
//需要傳送的數(shù)據(jù)的低位為“1”,則把“DIO”清零
//需要傳送的數(shù)據(jù)的低位為“0”,則把“DIO”置高
//送時鐘的上升沿
//準(zhǔn)備送下一個BIT
//送完一個字節(jié)后退出循環(huán)
}
//----------------------------------------------寫入輸入1個字節(jié)(8bit)到LED_IC程序結(jié)束---------
//----------------------------------------------從LED_IC讀入1個字節(jié)(8bit)程序開始-------------
//輸出8BIT數(shù)據(jù)
//在時鐘的上升沿通過MCU從LED驅(qū)動IC——TM16xx讀數(shù)據(jù)
#ifdef key
unsigned char outdate()
{
unsigned char i,k=0;
DIO=1;
STB=0;
//i——控制循環(huán)次數(shù),k——臨時保存讀到的數(shù)據(jù)
//釋放DIO為輸入
//保證“STB”為低電平,程序不依賴于之前端口的狀態(tài)
//保證程序在實際運行中不會出現(xiàn)“端口迷失”
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);
//送時鐘的上升沿
//送完一個字節(jié)后退出循環(huán)
//返回讀到的1字節(jié)數(shù)據(jù)
}
#endif
//----------------------------------------------從LED_IC讀入1個字節(jié)(8bit)程序結(jié)束-----------
//----------------------------------------------采用地址自動加一方式傳輸?shù)刂泛蛿?shù)據(jù)開始------
//采用地址自動加1方式
Page: 4
E:\Item\design\tmxx led demo\sw\currency.c
//上電后LED-DRIVER顯存中的數(shù)據(jù)是隨機(jī)的,上電后馬上傳顯示控制命令字(打開顯示),會出現(xiàn)亂碼。
//為避免上述現(xiàn)象,用戶可以先傳顯示控制命令將顯示關(guān)掉(見應(yīng)用手冊中詳細(xì)介紹),然后正常操作
//也可以先主動刷新LED-DRIVER顯存中的數(shù)據(jù)。然后開顯示
//這里采用是第二種方法
void display(unsigned char disa)
{
unsigned int i;
DIO=1;
CLK=1;
STB=1;
indate(writedatamode_z);
STB=1;
indate(startaddress);
//i——控制本次需要傳多少個字節(jié)顯示數(shù)據(jù)
//通訊開始前通訊端口全部初始化為“1”
//傳數(shù)據(jù)設(shè)置命令,設(shè)置采用地址自動加1方式寫顯示數(shù)據(jù),
//數(shù)據(jù)設(shè)置命令傳完后需要將“STB”置“1”
//傳起始地址
//地址命令傳完后,“STB”保持為“0”繼續(xù)傳需要顯示的數(shù)據(jù)
for(i=0;i=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;
return 0;
//讀鍵結(jié)束將“STB”置“1”
}
#endif
//----------------------------------------------按鍵掃描程序結(jié)束----------------------------------
Page: 5
E:\Item\design\tmxx led demo\sw\currency.c
//----------------------------------------------PWM數(shù)據(jù)傳輸開始-----------------------------------
#ifdef led
unsigned char in_led()
{
STB=1;
indate(writeledmode_z);
STB=1;
//數(shù)據(jù)設(shè)置命令,設(shè)置為寫LED顯存
indate(0xc0);
indate(0x0f);
indate(0x0f);
indate(0x0f);
indate(0x00);
indate(0x0f);
indate(0x0f);
indate(0x0f);
indate(0x00);
//起始地址,這里的地址和
//LED1寬度設(shè)置
//LED2寬度設(shè)置
//LED3寬度設(shè)置
//關(guān)閉LED123同步調(diào)節(jié)
//LED4寬度設(shè)置
//LED5寬度設(shè)置
//LED6寬度設(shè)置
//關(guān)閉LED456同步調(diào)節(jié)
STB=1;
return 0;
}
#endif
//----------------------------------------------PWM數(shù)據(jù)傳輸結(jié)束-------------------------------------
#ifdef led
unsigned char in_led_g(unsigned char adress_led,da_led)
{
STB=1;
indate(writeledmode_g);
STB=1;
indate(adress_led);
indate(da_led);
STB=1;
return 0;
}
#endif
//----------------------------------------------讀入SW口狀態(tài)開始------------------------------------
#ifdef sw
unsigned char out_sw()
{
STB=1;
indate(readswmode);
//數(shù)據(jù)設(shè)置命令,設(shè)置為讀SW輸入口
da_sw=outdate();
STB=1;
return 0;
}
#endif
//----------------------------------------------讀入SW口狀態(tài)結(jié)束-----------------------------------
//*********************************************子程序結(jié)束******************************************
//*********************************************主程序開始******************************************
void main(void)
{
SPEAK=0;
DIO=1;
CLK=1;
STB=1;
indate(dissetmode);
//傳顯示模式設(shè)置命令,設(shè)置為7個“GRID”方式
//這里不在詳細(xì)給出多個顯示模式的設(shè)置程序請參考產(chǎn)品應(yīng)用手冊,顯示模式在上電設(shè)置好后不允許更改
STB=1;
display(0xff);
delay(10);
display2(0xC0,0x00);
delay(10);
#ifdef key
Page: 6
//全亮
//采用固定地址方式向C0地址單元寫00
E:\Item\design\tmxx led demo\sw\currency.c
keyscan();
//調(diào)用按鍵掃描程序
#endif
//本程序僅僅提供按鍵掃描,2次按鍵掃描的時間不得<10MS,在這里不提供按鍵處理程序
#ifdef led
in_led();
delay(10);
in_led_g(0xc0,0x00);
#endif
#ifdef sw
out_sw();
//6路PWM輸出口輸出"1"
//讓LED1輸出"0"
//調(diào)用讀SW輸入口程序
#endif
//這里不提供SW口處理程序
_nop_();
}
//*********************************************主程序結(jié)束*******************************************
Page: 7
鏈接地址:http://ioszen.com/p-6657558.html