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

📄 ch451.h

📁 这是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 + -