📄 ch451.h
字号:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define CH451_RESET 0x0201 //复位
#define CH451_LEFTMOV 0x0300 //设置移动方式-作移
#define CH451_LEFTCYC 0x0301 //设置移动方式-左循
#define CH451_RIGHTMOV 0x0302 //设置移动方式-右移
#define CH451_RIGHTCYC 0x0303 //设置移动方式-右循
#define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗
#define CH451_SYSON1 0x0401 //开显示
#define CH451_SYSON2 0x0403 //开显示、键盘
#define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能
#define CH451_DSP 0x0500 //设置默认显示方式
#define CH451_BCD 0x0580 //设置BCD译码方式
#define CH451_TWINKLE 0x0600 //设置闪烁控制
#define CH451_DIG 0x0800 //数码管位+位置
sbit ch451_dclk=P1^5; //串行数据时钟上升延激活
sbit ch451_din=P1^6; //串行数据输出,接CH451的数据输入
sbit ch451_load=P1^7; //串行命令加载,上升延激活
sbit ch451_dout=P3^3; //INT1,键盘中断和键值数据输入,接CH451的数据
extern unsigned char ch451_key; //声明外部变量
extern bit ch451_flag; //有健按下标志
/*----------------------ch451初始化------------------------------*/
void ch451_init(void)
{
ch451_din=0; //先低后高,选择4线输入
ch451_din=1;
IT1=1; //设置下降沿触发
IE1=0; //清中断标志
PX1=0; //设置低优先级
EX1=1; //开中断
EA=1;
}
/*---------------------------命令输出程序----------------------*/
void ch451_write(unsigned int command) //定义一无符号整型变量存储12字节的命令字
{
unsigned char i;
EX1=0; //禁止键盘中断
ch451_load=0; //命令开始,此命令可以放在后边
for(i=0;i<12;i++)
{ //送入12位数据,低位在前
ch451_din=command&1;
ch451_dclk=0;
command>>=1;
ch451_dclk=1; //上升沿有效
}
ch451_load=1; //加载数据
EX1=1;
}
/*----------------------------全部输出num---------------------------*/
void LightenAllLed(uchar num) //全部输出num
{
ch451_write(CH451_DIG+0x000+num);
ch451_write(CH451_DIG+0x100+num);
ch451_write(CH451_DIG+0x200+num);
ch451_write(CH451_DIG+0x300+num);
ch451_write(CH451_DIG+0x400+num);
ch451_write(CH451_DIG+0x500+num);
ch451_write(CH451_DIG+0x600+num);
ch451_write(CH451_DIG+0x700+num);
}
/*------------------------------全部不显示------------------------*/
void ClearLed(void) //全部不显示
{
ch451_write(CH451_DIG+0x000+30);
ch451_write(CH451_DIG+0x100+30);
ch451_write(CH451_DIG+0x200+30);
ch451_write(CH451_DIG+0x300+30);
ch451_write(CH451_DIG+0x400+30);
ch451_write(CH451_DIG+0x500+30);
ch451_write(CH451_DIG+0x600+30);
ch451_write(CH451_DIG+0x700+30);
}
/*----------------------------- 延时程序-----------------------*/
void delay(uint num) //延时程序
{
uint i;
for(i=0;i<num;i++);
}
/*-------------------------------- 键值转换(转换为ASCII码)--------------*/
void ch451_keytest(void) //键值转换(转换为ASCII码)
{
switch(ch451_key)
{
case 0x53:ch451_key=13; //确认健
break;
case 0x58:ch451_key=8; //删除健
break;
case 0x59:ch451_key=48; //0
break;
case 0x50:ch451_key=49; //1
break;
case 0x51:ch451_key=50; //2
break;
case 0x52:ch451_key=51; //3
break;
case 0x48:ch451_key=52; //4
break;
case 0x49:ch451_key=53; //5
break;
case 0x4a:ch451_key=54; //6
break;
case 0x40:ch451_key=55; //7
break;
case 0x41:ch451_key=56; //8
break;
case 0x42:ch451_key=57; //9
break;
case 0x5b:ch451_key=0; //right
break;
case 0x5a:ch451_key=1; //left
break;
case 0x43:ch451_key=3; //f1
break;
case 0x4b:ch451_key=4; //f2
break;
default:
break;
}
}
/*-----------------------------键盘中断处理程序--------------------------*/
void ch451_inter(void) interrupt 2 using 1 //键盘中断处理程序外部中断1
{
unsigned char i; //定义循环变量
unsigned char command,keycode; //定义控制字寄存器,和中间变量定时器
EX1=0;
command=0x07; //读取键值命令的高4位0111B
ch451_load=0; //命令开始
for(i=0;i<4;i++)
{
ch451_din=command&1; //低位在前,高位在后
ch451_dclk=0;
command>>=1; //右移一位
ch451_dclk=1; //产生时钟上升沿锁通知CH451输入位数据
}
ch451_load=1; //产生加载上升沿通知CH451处理命令数据
keycode=0; //清除keycode
for(i=0;i<7;i++)
{
keycode<<=1; //数据作移一位,高位在前,低位在后
keycode|=ch451_dout; //从高到低读入451的数据
ch451_dclk=0; //产生时钟下升沿通知CH451输出下一位
ch451_dclk=1;
}
ch451_key=keycode; //保存键值
ch451_flag=1; //置有健按下标志
IE1=0;
EX1=1; //清中断标志
}
/*-----------------------------用于检测数码管是否完好------------------------------*/
void ch451_check(void) //用于检测数码管是否完好
{ LightenAllLed(9);
delay(30000); //延时
LightenAllLed(8);
delay(30000); //延时
LightenAllLed(7);
delay(30000); //延时
LightenAllLed(6);
delay(30000); //延时
LightenAllLed(5);
delay(30000); //延时
LightenAllLed(4);
delay(30000); //延时
LightenAllLed(3);
delay(30000); //延时
LightenAllLed(2);
delay(30000); //延时
LightenAllLed(1);
delay(30000); //延时
LightenAllLed(0);
delay(30000); //延时
ClearLed();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -