📄 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 + -