⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch451.c

📁 CH451专用键盘扫描
💻 C
字号:
/******************************************************************
* 作    者: Gaoshibing(ceeback@gmail.com)
* 编写日期: 2006/03/07
*----------------------------------------------------------
* 修改记录:

********************************************************************/

#include <intrins.h>
#include <absacc.h>
#include "main.h"
#include "mcs51.h"
#include "io_define.h"
#include "ch451.h"

/****** CH451 操作命令 *********/
#define CMD_GET_KEY 	0X07
#define CMD_SET_MODE_L	0X03  // 此字节 bit7 ~ bit0 与命令 bit7  ~ bit0 对应;
#define CMD_SET_MODE_H	0X04  // 此字节 bit3 ~ bit0 与命令 bit11 ~ bit8 对应;
#define CMD_DISPLAY_L	0X7F  // 显示参数;
#define CMD_DISPLAY_H	0X05  // 设置显示命令字;

#define CMD_LOAD_DAT_H	0X08  // 加载显示内容命令字高字节;


/* CH451 说明:
/* DIN 引脚输入数据低位在前,高位在后.操作命令为12位; bit0 ~ bit11.
/* ch451 在 DCLK 上升沿从 DIN 引脚输入数据,在其下降沿从 DOUT 输出数据
/* CH451 在 LOAD 引脚上升沿加载命令数据处理.*/

/*************************************************
* 函数功能:
* 对CH451设置命令
* cmd_high: 命令高字节;  此字节 bit3 ~ bit0 与命令 bit11 ~ bit8 对应;
* cmd_low : 命令低字节;  此字节 bit7 ~ bit0 与命令 bit7  ~ bit0 对应;
**************************************************/
void ch451_set_cmd(uchar cmd_low,uchar cmd_high)
{
	uchar i;
	
	for(i=0;i<8;i++)  //设定 CH451 系统参数命令低八位;
	{   
		CH451_CLK=0;
		if(0x01&cmd_low)
			CH451_DIN = 1;
		else
			CH451_DIN = 0;
		cmd_low >>= 1;
		CH451_CLK=1;
		_nop_();
	}
	
	for(i=0;i<4;i++)  //设定 CH451 系统参数命令高四位;
	{    
		CH451_CLK = 0;
		if(0x01&cmd_high)
			CH451_DIN = 1;
		else CH451_DIN = 0;
		cmd_high >>= 1;
		CH451_CLK = 1;
		_nop_();
	}
	
	CH451_LOAD = 0;
	_nop_();
	CH451_LOAD = 1; // LOAD 上升沿加载命令;
	
}

/*************************************************
* 函数功能:
* 初始化设定芯片工作模式:关看门狗;开键盘扫描;开显示驱动;
**************************************************/
void init_ch451(void)
{	
	CH451_DIN=0;
	DOUT=1;
	CH451_LOAD=1;
	CH451_DIN=1;
	ch451_set_cmd(CMD_SET_MODE_L,CMD_SET_MODE_H);
}

/*************************************************
* 函数功能:
* 加载 CH451 显示内容:
* num:     数码管或者八只LED 的序号,0~7;
* content: 显示内容;
**************************************************/
void display_led(uchar num,uchar content)
{
	num &= 0x07;  // 只取低三位;
	ch451_set_cmd(content,CMD_LOAD_DAT_H|num);
}

/*************************************************
* 函数功能:
* 获取7位按键代码;
**************************************************/
uchar get_key(void)
{	
	uchar i ,temp = CMD_GET_KEY;
	
	DOUT=1;

	for(i=0;i<4;i++)  // 写入读取按键值命令;
	{    
		CH451_CLK = 0;
		if(0x01&temp)
			CH451_DIN = 1;
		else 
			CH451_DIN = 0;
		temp >>= 1;
		CH451_CLK = 1;
		_nop_();
	}
	
	CH451_LOAD = 0;
	_nop_();
	temp = 0;
	CH451_DIN = 1;
	CH451_LOAD = 1;
	_nop_();

	if(DOUT)            // 获取7位按键代码
		temp += 1;

	for(i=0;i<6;i++)
	{
		temp <<= 1;
		CH451_CLK = 0;
		_nop_();
		if(DOUT)
			temp += 1;
		CH451_CLK = 1;
		_nop_();
	}
	
	//DOUT=1;

	return(temp);
}

/*************************************************
* 函数功能:
* 获取7位按键代码;
**************************************************/
uchar get_key1(void)
{	
	uchar i ,temp = CMD_GET_KEY;
	
	DOUT=1;

	for(i=0;i<4;i++)  // 写入读取按键值命令;
	{    
		CH451_CLK = 0;
		if(0x01&temp)
			CH451_DIN = 1;
		else 
			CH451_DIN = 0;
		temp >>= 1;
		CH451_CLK = 1;
		_nop_();
	}
	
	CH451_LOAD = 0;
	_nop_();
	temp = 0;
	CH451_DIN = 1;
	CH451_LOAD = 1;
	_nop_();

	if(DOUT)            // 获取7位按键代码
		temp += 1;

	for(i=0;i<6;i++)
	{
		temp <<= 1;
		CH451_CLK = 0;
		_nop_();
		if(DOUT)
			temp += 1;
		CH451_CLK = 1;
		_nop_();
	}
	
	//DOUT=1;

	return(temp);
}

void clear_led(void)
{
	uchar i;

	for(i=3;i<8;i++)
		display_led(i,LED_NONE);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -