?? ch452.c
字號(hào):
/********************************************************************************************
CH452驅(qū)動(dòng)程序
與單片機(jī)接口方式:4線
********************************************************************************************/
#include <reg52.h>
#include <intrins.h>
#include "ch452.h"
#include "work.h"
/********************************************************************************************
初始化
********************************************************************************************/
void InitCh452()
{
WrietCh452(CH452_SYSON2); //打開(kāi)鍵盤(pán)、顯示,有按鍵按下時(shí)產(chǎn)生低電平中斷
WrietCh452(CH452_BCD); //設(shè)置BCD譯碼方式
ENABLE_INTERRUPT; //打開(kāi)鍵盤(pán)中斷
}
/********************************************************************************************
向CH452發(fā)送指令和數(shù)據(jù)
da;指令和數(shù)據(jù)
********************************************************************************************/
void WrietCh452(uint da)
{
uint iq0;
DISABLE_INTERRUPT; //關(guān)閉鍵盤(pán)中斷
CH452_LOAD_CLR; //復(fù)位LOAD信號(hào)
for(iq0=0;iq0<12;iq0++)
{
if((da&0x1)==1)
CH452_DIN_SET;
else
CH452_DIN_CLR;
CH452_DCLK_CLR;
da >>=1;
CH452_DCLK_SET; //CH452上升沿讀取數(shù)據(jù)
}
CH452_LOAD_SET; //加載數(shù)據(jù),LOAD上升沿
DelayUs();
ENABLE_INTERRUPT; //打開(kāi)鍵盤(pán)中斷
}
/***************************************************************************************
從CH452讀取按鍵值
返回:讀取的按鍵值
***************************************************************************************/
uint ReadCh452()
{
uchar q0;
uchar cmd,keycode; //定義命令字,和數(shù)據(jù)存儲(chǔ)器
DISABLE_INTERRUPT; //禁止鍵盤(pán)中斷,防止傳輸過(guò)程中被CH452中斷而進(jìn)入中斷服務(wù)程序中再次傳輸
cmd=0x07; //輸入讀451命令字
CH452_LOAD_CLR;
for(q0=0;q0<4;q0++)
{
if ((cmd&0x1)==1)
CH452_DIN_SET;
else
CH452_DIN_CLR; //輸出位數(shù)據(jù)
CH452_DCLK_CLR;
cmd>>=1; //向右移一位
CH452_DCLK_SET; //產(chǎn)生時(shí)鐘上升沿鎖通知CH451輸入位數(shù)據(jù)
}
CH452_LOAD_SET; //產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù)
keycode=0; //清除按鍵碼
for(q0=0;q0<7;q0++)
{
keycode<<=1; //數(shù)據(jù)移入keycode,高位在前,低位在后
keycode|=CH452_DOUT; //從高到低讀入451的數(shù)據(jù)
CH452_DCLK_CLR; //產(chǎn)生時(shí)鐘下降沿通知CH451輸出下一位
CH452_DCLK_SET;
}
CLEAR_INTER_FLAG; //清中斷標(biāo)志
ENABLE_INTERRUPT;
return(keycode); //返回鍵值
}
/***************************************************************************************
按鍵中斷函數(shù)
***************************************************************************************/
void IntKey() interrupt 2
{
uchar key;
key=ReadCh452();
}
/***************************************************************************************
延時(shí)
***************************************************************************************/
void DelayUs()
{
_nop_();
_nop_();
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -