📄 es51_ii_lib.h
字号:
/* ES51-II 函数库 */
#ifndef __ES51_II_LIB_H__
#define __ES51_II_LIB_H__
/*--------------------------------------------------------------------------
// EasyStudy51-II 库函数
// 编写: wolfe
// 版本: V1.0 2008.10
// 修改:
--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
全局变量
--------------------------------------------------------------------------*/
// 数码管显示缓冲区;可直接操作此缓冲区控制数码管显示
extern unsigned char SMG_BUFF[4];
// 不带小数点的数码管段码表[0~F]
extern unsigned char code SMG_TABLE[16];
// 带小数点的数码管段码表[0~F]
extern unsigned char code SMG_TABLE_DP[16];
// 此变量是在INT1中断中所读取的键值;
// 此变量只包含KEY1~KEY4的键值,并不包含INT0和COUNT键
extern unsigned char KeyVal;
// 字符串发送完毕标志
// 在调用PutStr()函数前查询前一字符串是否发送完毕
extern bit bTxDone;
// 字符串接收完毕标志位
// 在调用GetStr()函数后查询此变量,可判断字符串接收是否完成
extern bit bRxDone;
/*--------------------------------------------------------------------------
软件延时函数
--------------------------------------------------------------------------*/
// 延时nms函数,软件延时
void DelayMS(unsigned int ms);
// 延时S函数,软件延时
void DelayS(unsigned char secs);
// 汇编实现的软件延时函数
void ES51_DELAY1MS(void);
// 汇编实现的软件延时函数
void ES51_DELAY500MS(void);
/*--------------------------------------------------------------------------
LED控制函数
--------------------------------------------------------------------------*/
// 跑马灯占用了T0
// 若T0有其他用途,则不能调用跑马灯程序
// 或者你可以在不同时刻分配T0为何种功能,这样可以解决资源占用的问题;
// 流水灯样式宏定义
#define LEDALLLOOP 0 // 全亮->全灭
#define LEDRIGHTLOOP 1 // 自右向左
#define LEDLEFTLOOP 2 // 自左向右
#define LEDMIDDLELOOP 3 // 中间散开->向中间靠拢
// 用定时器实现流水灯
// type: 跑马灯样式
// delay100ms: 跑马灯延时长短,100毫秒单位
void LoopLEDON(unsigned char type,unsigned char delay100ms);
// 关闭跑马灯;
// 禁止T0中断,停止T0
void LoopLEDOFF(void);
// 根据索引值index点亮LED,不改变其他LED状态
// index: 范围1~8
void TurnOnLED(unsigned char index);
// 根据索引值index熄灭LED,比改变其他LED状态
// index: 范围1~8
void TurnOffLED(unsigned char index);
/*--------------------------------------------------------------------------
蜂鸣器控制函数
--------------------------------------------------------------------------*/
// 蜂鸣器发声控制函数
// delayms_on/delayms_off:发声/不发声延时长短,以ms为单位
// 发声长短通过延时实现,
void CtrlBuzzer(unsigned int delayms_on,unsigned int delayms_off);
// 蜂鸣器控制函数
// long_nub: 长声次数
// short_nub: 短声次数
// 此函数调用CtrlBuzzer()函数实现;
void Buzzer(unsigned char long_nub,unsigned char short_nub);
/*--------------------------------------------------------------------------
数码管控制函数
--------------------------------------------------------------------------*/
// 数码管动态扫描,占用了T1
// 若T1有其他用途(如拨特率发生器),则不能使用以下函数,
// 对于拨特率发生器也可以用T2;
// 打开数码管显示
// 启动T1定时,允许T1溢出中断
void SMGDisplayON(void);
// 关闭数码管显示
// 关闭T12定时,禁止T1溢出中断
void SMGDisplayOFF(void);
// 数码管显示函数
// ::::::注意,所有参数必须是无符号数.
// 如在数码管显示十进制数: SMGprintf("%u",变量); 变量类型为:unsigned int
// 若在数码管显示十六进制数: SMGprintf("%x",变量); 变量类型为:unsigned int
// 若在数码管显示浮点数: SMGprintf("%f",变量); 变量类型为:float
// 若不指定小数后几位,则只显示1位小数;
// 若指定小数点,则必须确保位数不大于6位(小数点也算);
// 若在数码管显示字符串: SMGprintf("%s","12df"); 其中字符串只能为0~F,对于A-F不区分大小写
int SMGprintf(const char *fmstr, ...);
// 写数码管显示缓冲区,ASCII码,只允许写0~9;
// index: 修改缓冲区的起始地址,范围1~4;
// length: 修改的长度,范围1~4,根据索引值不同,取值范围不同;
// dp: 显示是否带小数点,0:不带小数点显示;1:带小数点显示;
// *dat: 为数据的首地址;
void SMGBuffWrite(unsigned char index,unsigned char length,bit dp,unsigned char *dat);
/*--------------------------------------------------------------------------
按键处理函数
--------------------------------------------------------------------------*/
// 外部中断0初始化程序,外部单独接一键
// 初始化为下降沿触发并允许INT0中断
// 库中没有包含INT0中断函数,需用户编写
void INT0_Init_KeyINT0(void);
// 外部中断1初始化程序,KEY1~KEY4共享
// 初始化为下降沿触发并允许INT0中断
// 调用此函数后,用户可查询变量keyVal来获得键值
// ::::KeyVal仅包含了KEY1~KEY4,并不包含INT0键和COUNT键
// ::::在中断函数中已经消抖.
void INT1_Init_KeyShare(void);
// 以下键值是包括INTO键和COUNT键的键值
// 调用函数GetKeyVal()返回键值
// 若无键按下,返回VAL_KEYNULL;
#define VAL_KEY1 0x3e
#define VAL_KEY2 0x3d
#define VAL_KEY3 0x3b
#define VAL_KEY4 0x37
#define VAL_KEYINT0 0x1f
#define VAL_KEYCOUNT 0x2f
#define VAL_KEYNULL 0x3f
// 查询读取键值函数
// 此返回的键值包含了INT0和COUNT按键,各个返回的键值的含义如上.
unsigned char GetKeyVal(void);
/*--------------------------------------------------------------------------
串行口操作函数
--------------------------------------------------------------------------*/
// 串行口初始化程序,T2,2400bps
void InitSerialPort(void);
// 中断方式接收字符串,以回车符['\r']结束接收;
// 在调用此函数前,应确保所接收字符串不会导致缓冲区溢出;
void GetStr_(char *pbuff );
// 中断方式发送字符串,以字符串结尾标志停止发送
// 在调用此函数前需判断前一字符串是否发送完毕;
// 在前一字符串未发送完毕的情况下调用此函数将引起放弃发送前一字符串,转而发送新的字符串;
void PutStr_( char *pstr );
// 中断方式接收数据
void GetData_(unsigned char length,char *pbuff);
// 中断方式发送一组数据
void PutData_(unsigned char length,char *pbuff);
// keil提供的库函数也可以实现以下四个函数的功能,并且功能比以下的函数强大
//
// 查询方式接收一字节数据数据
void PutChar( char txd);
// 查询方式接收一字节数据
char GetChar(void);
// 查询方式输出字符串
void PutStr(char *pstr);
// 查询方式接收字符串
void GetStr(char *pbuff);
/*--------------------------------------------------------------------------
IIC总线操作函数
--------------------------------------------------------------------------*/
// 操作结束
void I2c_Stop(void);
// 操作起始
void I2c_Start(void);
// IIC总线写一字节数据
void I2c_WrByte(unsigned char dat);
// IIC总线读一字节数据
unsigned char I2c_RdByte(void);
/*--------------------------------------------------------------------------
24CXX读写函数
--------------------------------------------------------------------------*/
// 24Cxx读一字节数据
// slave: 器件从地址
// addr: 片内字节地址
unsigned char EEPROM_RdOneByte(unsigned char slave,unsigned char addr);
// 24Cxx写一字节数据
// slave: 器件从地址
// addr: 片内字节地址
// dat: 需写到器件某地址的值
void EEPROM_WrOneByte(unsigned char slave,unsigned char addr,unsigned char dat);
#endif //__ES51_II_LIB_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -