欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于 tm1629 的控制
[打印本頁]
作者:
surubu
時間:
2017-3-3 13:51
標題:
關于 tm1629 的控制
****************************************************************************************************/ #include < REG52.h>
#include<stdio.h> #include<intrins.h>//************************************************************************************************** #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
#define tw1628 20
#define icmodel tm1616 //這里選擇的TM1616,更改“tm1616”可以得到其他型號IC的驅動程序
#if icmodel== tm1616
#define seg 7
#define grid 4
#define dismodel 1
#elif icmodel== tm1618
#define seg 5
#define grid 7
#define key 3
#define dismodel 4
#elif icmodel== tm1618a
#define seg 7
#define grid 5
#define key 4
#define dismodel 2
#elif icmodel== tm1620
#define seg 8
#define grid 6
#define dismodel 3
#elif icmodel== tm1620b
#define seg6
#define grid7
#define key3
#define dismodel 4
#elif icmodel== tm1623
#define seg 11
#define grid 7
#define key 4
#define dismodel 4
#elif icmodel== tm1624
#define seg 11
#define grid 7
#define dismodel 4
#elif icmodel== tm1626a
#define seg 10
#define grid 7
#define key 5
#define sw 2
#define led 6
#define dismodel 4
#elif icmodel== tm1626b
#define seg 11
#define grid 7
#define key 5
#define sw 4
#define led 6
#define dismodel 4
#elif icmodel== tm1626c
#define seg 11
#define grid 7
#define key 5
#define led 1
#define dismodel 4
#elif icmodel== tm1626d
#define seg 10
#define grid 7
#define key 5
#define led 1
#define dismodel 4
#elif icmodel== tm1628
#define seg 10
#define grid 7
#define key 4
#define dismodel 4
#elif icmodel== tm1629
#define seg 16
#definegrid 8
#definekey 4
#definedismodel 1
#elif icmodel== tm1629a
#defineseg 16
#definegrid 8
#definedismodel 1
#elif icmodel== tm1629b
#defineseg 14
#definegrid 8
#definekey 4
#definedismodel 1
#elif icmodel== tm1629c
#defineseg 15
#definegrid 8
#definekey 4
#definedismodel 1
#elif icmodel== tm1629d
#defineseg 12
#definegrid 8
#definekey 4
#definedismodel 1
#elif icmodel== tm1638
#defineseg 10
#definegrid 8
#definekey 4
#definedismodel 1
#elif icmodel== tm1668
#define seg 10
#definegrid 7
#definekey 5
#definedismodel 1
#elif icmodel== tw1628
#defineseg 10
#definegrid 7
#definekey 5
#define dismodel 1
#else
#error "你必須確認IC的型號是否存在?"
#endif
#define dissetmode 0x03 / /顯示模式設置
#define writedatamode_z 0x40 //采用地址自動加一方式寫顯存
#define writeledmode_z 0x41 //采用地址自動加一方式寫LED顯存命令
#define readkeymode 0x42 //讀按鍵命令
#define readswmode 0x43 //讀SW口命令
#define writedatamode_g 0x44 //采用固定地址方式寫顯存
#define writeledmode_g 0x45 //采用固定地址方式寫LED顯存命令
#define startaddress 0xc0 //起始地址
#define disconmode 0x8c //顯示控制
#define datacount 2*grid //采用地址自動加一方式傳輸數據的個數
//定義全局變量
unsigned char k1, k2, k3, k4, k5; //按鍵值寄存器
unsigned da_sw; //SW寄存器
unsigned int count;
//端口的定義
sbit STB= P2^0;
sbitCLK= P2^1;
sbitDIO= P2^2; / /串行通訊口
sbit 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”清零
}else
{
DIO=0; //需要傳送的數據的低位為“0”,則把“DIO”置高
}
CLK=1; //送時鐘的上升沿
p=p>>1; //準備送下一個BIT } //送完一個字節后退出循環
}
/ /----------------------------------------------寫入輸入1個字節(8bit)到LED_IC程序結束--------- //----------------------------------------------從LED_IC讀入1個字節(8bit)程序開始-------------
//輸出8BIT數據
//在時鐘的上升沿通過MCU從LED驅動IC——TM16xx讀數據
# ifdef key
unsigned char outdate()
{ unsigned char i,k=0; //i——控制循環次數,k——臨時保存讀到的數據
DIO=1; //釋放DIO為輸入
STB=0; //保證“STB”為低電平,程序不依賴于之前端口的狀態 //保證程序在實際運行中不會出現“端口迷失”
for(i=0;i<8;i++)
{ CLK=0; //先將“CLK”清零
k=k>>1;
if(( P2 & 0x04)==0)
{
k=k& 0x7f; //如果“DIO”為低電平,則把k的最高位清“0”,其他各位保持不變
}
else
{
k=(k| 0x80& 0xff); //如果“DIO”為高電平,則把k的最高位置“1”,其他各位保持不變
}
CLK=1; //送時鐘的上升沿
} //送完一個字節后退出循環
return(k); //返回讀到的1字節數據
}
#endif
/ /----------------------------------------------從LED_IC讀入1個字節(8bit)程序結束----------- //----------------------------------------------采用地址自動加一方式傳輸地址和數據開始------
//采用地址自動加1方式
//上電后LED-DRIVER顯存中的數據是隨機的,上電后馬上傳顯示控制命令字(打開顯示),會出現亂碼。
//為避免上述現象,用戶可以先傳顯示控制命令將顯示關掉(見應用手冊中詳細介紹),然后正常操作
//也可以先主動刷新LED-DRIVER顯存中的數據。然后開顯示
//這里采用是第二種方法
void display(unsigned char disa)
{
unsigned int i; //i——控制本次需要傳多少個字節顯示數據
DIO=1;CLK=1;
STB=1; //通訊開始前通訊端口全部初始化為“1”
indate( writedatamode_z); //傳數據設置命令,設置采用地址自動加1方式寫顯示數據,
STB=1; //數據設置命令傳完后需要將“STB”置“1”
indate(startaddress); //傳起始地址
//地址命令傳完后,“STB”保持為“0”繼續傳需要顯示的數據
for(i=0;i<datacount;i++)
{
indate(disa); //在連續傳顯示的數據過程中,“STB”一直保持為”0“
}
STB=1; //傳完所有的顯示數據后(最多14BYTE)后,將“STB置“1”
indate(disconmode); //傳顯示控制命令
STB=1; //顯示控制命令傳完后將“STB”置“1”
}
/ /----------------------------------------------采用地址自動加一方式傳輸地址和數據結束------- //----------------------------------------------采用固定地址方式傳輸地址和數據開始-----------
//采用固定地址方式
void display2(unsigned char adress,disa)
{
DIO=1;
CLK=1;
STB=1; //通訊開始前通訊端口全部初始化為“1”
indate( writedatamode_g); //數據設置命令
STB=1;
indate(adress); //傳顯示數據對應的地址
indate(disa); //保持“STB”=“0”,傳1BYTE顯示數據
STB=1; //傳完顯示數據后將“STB”置“1”
}
/ /----------------------------------------------采用固定地址方式傳輸地址和數據結束------------- //----------------------------------------------按鍵掃描程序開始------------------------------
//按鍵掃描 //只要定義了key都將執行按鍵掃描程序,且必須從低字節開始讀
# ifdef key
unsigned char keyscan()
{
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;
return 0; //讀鍵結束將“STB”置“1”
}
#endif
//----------------------------------------------按鍵掃描程序結束----------------------------------
//----------------------------------------------PWM數據傳輸開始-----------------------------------
# ifdef led
unsigned char in_led()
{
STB=1;
indate( writeledmode_z); //數據設置命令,設置為寫LED顯存
STB=1;
indate( 0xc0); //起始地址,這里的地址和
indate( 0x0f); //LED1寬度設置
indate( 0x0f); //LED2寬度設置
indate( 0x0f); //LED3寬度設置
indate( 0x00); //關閉LED123同步調節
indate( 0x0f); //LED4寬度設置
indate( 0x0f); //LED5寬度設置
indate( 0x0f); //LED6寬度設置
indate( 0x00); //關閉LED456同步調節
STB=1;
return 0;
}
#endif //----------------------------------------------PWM數據傳輸結束-------------------------------------
# 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口狀態開始------------------------------------
# ifdef sw
unsigned char out_sw()
{
STB=1;
indate(readswmode); //數據設置命令,設置為讀SW輸入口
d a_sw=outdate();
STB=1;
return 0;
}
#endif / /----------------------------------------------讀入SW口狀態結束----------------------------------- //*********************************************子程序結束****************************************** //*********************************************主程序開始******************************************
void main(void)
{
SPEAK=0;
DIO=1;
CLK=1;
STB=1;
indate(dissetmode); / /傳顯示模式設置命令,設置為7個“GRID”方式
//這里不在詳細給出多個顯示模式的設置程序請參考產品應用手冊,顯示模式在上電設置好后不允許更改
STB=1;
display( 0xff); //全亮
delay(10);
display2( 0xC0, 0x00); //采用固定地址方式向C0地址單元寫00
delay(10);
#ifdef key
keyscan(); //調用按鍵掃描程序
#endif //本程序僅僅提供按鍵掃描,2次按鍵掃描的時間不得<10MS,在這里不提供按鍵處理程序
#ifdef led
in_led(); //6路PWM輸出口輸出"1"
delay(10);
in_led_g( 0xc0, 0x00); //讓LED1輸出"0"
#endif
#ifdef sw out_sw(); //調用讀SW輸入口程序
#endif //這里不提供SW口處理程序
_nop_();
}
//*********************************************主程序結束*******************************************
復制代碼
作者:
surubu
時間:
2017-3-3 17:52
請各位大神指導,想做個時鐘
作者:
k2866
時間:
2019-1-14 11:20
這個代碼太好了,借了我燃眉之急!
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1