📄 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 <reg52.h>
#include <intrins.h>
#include <pin.h> // 修改该文件以适应硬件环境/单片机型号等
//输出命令子程序
//定义一无符号整型变量存储12字节的命令字。
void CH452_Write(unsigned int cmd)
{
unsigned char i;
#ifdef USE_KEY
DISABLE_INTERRUPT; //禁止键盘中断,防止传输过程中被CH452中断而进入中断服务程序中再次传输
#endif
CH452_LOAD_CLR; //命令开始,LOAD=0
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
DELAY_1US;
DELAY_1US;
DELAY_1US;
DELAY_1US;
DELAY_1US;
#ifdef USE_KEY
ENABLE_INTERRUPT;
#endif
}
//*************************************************
//输入命令子程序,MCU从CH452读一字节
unsigned char CH452_Read()
{
unsigned char i;
unsigned char cmd,keycode; //定义命令字,和数据存储器
#ifdef USE_KEY
DISABLE_INTERRUPT; //禁止键盘中断,防止传输过程中被CH452中断而进入中断服务程序中再次传输
#endif
cmd=0x07; //输入读451命令字
CH452_LOAD_CLR;
for(i=0;i!=4;i++)
{
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,高位在前,低位在后
keycode|=CH452_DOUT; //从高到低读入451的数据
CH452_DCLK_CLR; //产生时钟下升沿通知CH451输出下一位
CH452_DCLK_SET;
}
CLEAR_INTER_FLAG; //清中断标志
#ifdef USE_KEY
ENABLE_INTERRUPT;
#endif
return(keycode); //反回键值
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -