📄 mch452.h
字号:
#ifndef mch452_H
#define mch452_H
/************************************************************
* 注:本头文件实用于CH452的串行显示板,使用时应该 *
* 显示函数:Bit_Display_Num(bite ,data) *
Display_Init_Default()系统初始化函数
Key_scan()键值
*************************************************************/
#define LOAD (RD2)
#define DIN (RD1)
#define DCLK (RD0)
typedef int uint8 ;
typedef long uint16 ;
typedef long uint32 ;
#define _SI_H DIN=1
#define _SI_L DIN=0 //定义数据输出端口
#define _CLK_H DCLK=1
#define _CLK_L DCLK=0 //定义时钟信号口
#define _LOAD_H LOAD=1
#define _LOAD_L LOAD=0 //定义LOAD口
/****************************
* 端口初始化 *
*****************************/
void Port_init(void)
{
TRISD=0X00;
}
/****************************
* 端口初始化 *
*****************************/
const char DispData[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,
0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x02};
/*0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,-,*/
const int DispBite[]={0,0xc00,0xd00,0xe00,0xf00,0x800,0x900,0xa00,0xb00};
const int receive_key=0x7ff;
//* 系统函数声明*/
void Display_Init_Default(void);
void Display_Set(uint8 Mode);
void Send8(uint8 data);
void Send4(uint8 data);
void System_setting(unsigned char Key_IRQ_Out,unsigned char Flash_Speed,
unsigned char DIG_Lever,unsigned char Key_Scan_EN,
unsigned char Display_EN );
void Bit_Display_Num(uint8 bit0,uint8 buf0,uint8 bit1,uint8 buf1);
void Device_init(void) ;
void Display_Reset(void);
void SET_LOAD(void);
int LedBuffer[8]={0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000};
//******************显示参数定义**************************/
uint8 Key_IRQ_Out_LowLevel=0;
uint8 Key_IRQ_Out_LowPulse=1;//按键中断输出方式.....低电平/低电平脉冲
uint8 Flash_Speed_Sencond=0;
uint8 Flash_Speed_HalfSencond=1;//数码管闪烁速度.....1秒/0.5秒
uint8 DIG_Level_Low=0;
uint8 DIG_Level_High=1;//DIG输出极性.......低电平/高电平
uint8 Key_Scan_OFF=0;
uint8 Key_Scan_ON=1;//按键扫描使能.........关/开
uint8 Display_Off=0;
uint8 Display_On=1;//显示使能.........关/开
uint8 Mode_Default=0;
uint8 Mode_BCD=1;//译码方式选择......默认/BCD
/*--------------------------------------------------------------------------------------------
显示系统默认设置函数
默认参数:
---------------------------------------------------------------------------------------------*/
void Display_Init_Default(void)
{
Port_init();
Display_Reset();
System_setting(Key_IRQ_Out_LowLevel=0,Flash_Speed_HalfSencond,DIG_Level_Low,Key_Scan_OFF,Display_On);
Display_Set(0);
}
/*--------------------------------------------------------------------------------------------
显示参数设置
---------------------------------------------------------------------------------------------*/
void Display_Set( uint8 Mode)
{
uint8 temp1=0;
temp1=0x080*Mode;
Send8(temp1);
Send4(0x05);
temp1=0x080*Mode;
Send8(temp1);
Send4(0x05);
SET_LOAD();
}
void Delay(int time)
{
int i;
for (i=0;i<time;i++)
{;}
}
/****************************
* 系统设置函数 *
*****************************/
void System_setting(unsigned char Key_IRQ_Out,unsigned char Flash_Speed,
unsigned char DIG_Lever,unsigned char Key_Scan_EN,
unsigned char Display_EN )
{
int temp0=0,temp1=0;
temp0=0x04;
temp1=0x020*Key_IRQ_Out+0x010*Flash_Speed+0x008*DIG_Lever+0x002*Key_Scan_EN+0x001*Display_EN;
Send8(temp1);
Send4(temp0);
Send8(temp1);
Send4(temp0);
SET_LOAD();
}
/****************************
* 数据发送函数 *
*****************************/
void Send8(uint8 data)
{
uint8 i;
Port_init();
_LOAD_H;
for (i=0;i<8;i++)
{
_CLK_H;
if(data&(0x001<<i))
{
_SI_H;
}
else
{
_SI_L;
}
_CLK_L;
Delay(5);
_CLK_H;
}
}
void Send4(uint8 data)
{
uint8 i;
Port_init();
_LOAD_H;
for (i=0;i<4;i++)
{
_CLK_H;
if(data&(0x001<<i))
{
_SI_H;
}
else
{
_SI_L;
}
_CLK_L;
Delay(5);
_CLK_H;
}
}
void SET_LOAD(void)
{
_LOAD_L;
_LOAD_H;
}
/*--------------------------------------------------------------------------------------------
单个位上显示数据
---------------------------------------------------------------------------------------------*/
void Bit_Display_Num(uint8 bit0,uint8 buf0,uint8 bit1,uint8 buf1)
{
int temp0=0,temp1=0;
temp0=DispBite[bit0]>>8;
temp1=DispData[buf0];
Send8(temp1);
Send4(temp0);
temp0=DispBite[bit1]>>8;
temp1=DispData[buf1];
Send8(temp1);
Send4(temp0);
SET_LOAD();
}
void Display_Reset(void)
{
Send8(0x01);
Send4(0x02);
Send8(0x01);
Send4(0x02);
SET_LOAD();
}
void display_8num(uint8 number)
{
Bit_Display_Num(1,number,1,number);
Bit_Display_Num(2,number,2,number);
Bit_Display_Num(3,number,3,number);
Bit_Display_Num(4,number,4,number);
Bit_Display_Num(5,number,5,number);
Bit_Display_Num(6,number,6,number);
Bit_Display_Num(7,number,7,number);
Bit_Display_Num(8,number,8,number);
}
void Device_init(void)
{
Display_Init_Default();
System_setting(Key_IRQ_Out_LowLevel=0,Flash_Speed_HalfSencond,DIG_Level_Low,Key_Scan_OFF,Display_On);
Display_Set(0);
Port_init();
}
void Getnum(int v)
{
int i;
for(i=0;i<9;i++)
{
LedBuffer[8-i]=v%10;
v=v/10;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -