?? ch452w4.c
字號:
/* ***************************
Website: http://wch.cn
Email: tech@wch.cn
Author: W.ch 2005.4
CH452的4線接口子程序
****************************
CH45X的4線接口,不含按鍵中斷為3個I/O引腳,含按鍵中斷為4個I/O,類似SPI時序,
四線制方式也可以參照CH451,其中對CH451的選擇4線串行接口初始化子函數可以省去
*************************************************************************** */
#include "PIN.H" // 修改該文件以適應硬件環境/單片機型號等
#include "CH452CMD.H" // CH452常量定義
//輸出操作命令子程序
//定義一無符號整型變量存儲12字節的命令字。
void CH452_Write(unsigned short cmd)
{
unsigned char i;
DISABLE_KEY_INTERRUPT; //禁止鍵盤中斷,防止傳輸過程中被CH452中斷而進入中斷服務程序中再次傳輸
CH452_LOAD_CLR; //命令開始,LOAD=0
CH452_LOAD_D_OUT; // 設置LOAD為輸出方向
CH452_DOUT_D_IN; // 設置DOUT為輸入方向
CH452_DIN_D_OUT; // 設置DIN為輸出方向
CH452_DCLK_D_OUT; // 設置DCLK為輸出方向
for(i=0;i!=12;i++) //送入12位數據,低位在前
{
if (cmd&1) {CH452_DIN_SET;}
else {CH452_DIN_CLR;} // 輸出位數據
// CH452_DIN=cmd&1;
CH452_DCLK_CLR;
cmd>>=1;
CH452_DCLK_SET; //上升沿有效
}
CH452_LOAD_SET; //加載數據,LOAD上升沿
DELAY_1US; //命令數據加載周期不小于6US,CH451不需要該周期
DELAY_1US;
DELAY_1US;
DELAY_1US;
DELAY_1US;
DELAY_1US;
ENABLE_KEY_INTERRUPT;
}
//*************************************************
//輸入按鍵代碼子程序,從CH452讀取
unsigned char CH452_Read( void )
{
unsigned char i;
unsigned char cmd,keycode; //定義命令字,和數據存儲器
DISABLE_KEY_INTERRUPT; //禁止鍵盤中斷,防止傳輸過程中被CH452中斷而進入中斷服務程序中再次傳輸
cmd=0x07; //讀按鍵的命令字
CH452_LOAD_CLR;
for(i=0;i!=4;i++) // 只需要發出高4位,多發也可以,但應該確保最后留下的4位是該命令碼
{
if (cmd&1) {CH452_DIN_SET;}
else {CH452_DIN_CLR;} // 輸出位數據
// CH452_DIN=cmd&1; //送入最低位
CH452_DCLK_CLR;
cmd>>=1; //往右移一位
CH452_DCLK_SET; //產生時鐘上升沿鎖通知CH451輸入位數據
}
CH452_LOAD_SET; //產生加載上升沿通知CH451處理命令數據
keycode=0; //清除keycode
for(i=0;i!=7;i++)
{
keycode<<=1; //數據移入keycode,高位在前,低位在后
if (CH452_DOUT) keycode++; //從高到低讀入451的數據
// keycode|=CH452_DOUT;
CH452_DCLK_CLR; //產生時鐘下升沿通知CH451輸出下一位
CH452_DCLK_SET;
}
CLEAR_KEY_INTER_FLAG; //清中斷標志
ENABLE_KEY_INTERRUPT;
return(keycode); //反回鍵值
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -