/* *********************************************************************** CH452的4線接法驅(qū)動(dòng)4聯(lián)共陰極LED數(shù)碼管KeilC程序 Author: 王虎 2008.3.11 單片機(jī):89S52 晶振:11.0592M CH45X的4線接口,本電路中未接鍵盤掃描,接4位數(shù)碼管,DOUT懸空,不含按鍵中斷為3個(gè)I/O引腳。 ****************************************************************************/ #include <regx51.h> #include <ch452cmd.h> // CH452常量定義 #include <intrins.h>
/***********CH452與單片機(jī)接線方式************/ sbit CH452_DCLK=P1^7; // 串行數(shù)據(jù)時(shí)鐘上升延激活 sbit CH452_DIN=P1^6; // 串行數(shù)據(jù)輸出,接CH452的數(shù)據(jù)輸入 sbit CH452_LOAD=P1^5; // 串行命令加載,上升延激活 //sbit CH452_DOUT=P3^3; // INT1,鍵盤中斷和鍵值數(shù)據(jù)輸入,接CH452的數(shù)據(jù)輸出
/******** 4線接口的位操作,與單片機(jī)有關(guān) *********/ #define CH452_DCLK_SET {CH452_DCLK=1;} #define CH452_DCLK_CLR {CH452_DCLK=0;}
#define CH452_DIN_SET {CH452_DIN=1;} #define CH452_DIN_CLR {CH452_DIN=0;}
#define CH452_LOAD_SET {CH452_LOAD=1;} #define CH452_LOAD_CLR {CH452_LOAD=0;}
/******* 延時(shí)1uS子程序,主要用于2線接口,與單片機(jī)速度有關(guān) ********/ //#define DELAY_1US {} // MCS51<=10MHz #define DELAY_1US {_nop_();} // MCS51<=20MHz //#define DELAY_1US {_nop_();_nop_();} // MCS51<=30MHz
/**************寫12bit控制字函數(shù)*******************/ void CH452_Write(unsigned short cmd) { unsigned char i; CH452_LOAD_CLR; //命令開始,LOAD=0 for(i=0;i!=12;i++) //送入12位數(shù)據(jù),低位在前 { // if (cmd&1) {CH452_DIN_SET;} // else {CH452_DIN_CLR;} // 輸出位數(shù)據(jù) CH452_DCLK_CLR; CH452_DIN=cmd&1; CH452_DCLK_SET; //上升沿有效 cmd=cmd>>1;
} CH452_LOAD_SET; //加載數(shù)據(jù),LOAD上升沿 DELAY_1US; //命令數(shù)據(jù)加載周期不小于6US,CH451不需要該周期 DELAY_1US; DELAY_1US;
}
/******************主函數(shù)******************************/ void main() { CH452_Write(CH452_RESET); CH452_Write(CH452_BCD + 0x40); // 選擇BCD譯碼方式,掃描極限為4個(gè)數(shù)碼管 CH452_Write(CH452_SYSON1); // 開啟顯示 while (1) { CH452_Write(CH452_DIG3 | 1); CH452_Write(CH452_DIG2 | 2); CH452_Write(CH452_DIG1 | 3); CH452_Write(CH452_DIG0 | 4); // 4位數(shù)碼管顯示字符1234 // CH452_Write(CH452_RIGHTCYC);
} }
|
|