一. GPIO 模块
①. I/O 初始化函数: GPIO_init_pin();
void GPIO_init_pin(uchar pin, uchar mode);
参数:pin 选择要初始化的引脚。00-表示初始化 P0^0 引脚
mode:0-表示初始化成准双向 I/O 口
1-表示初始化成强推挽 I/O 口
2-表示初始化成高阻态 I/O 口
3-表示初始化成开漏 I/O 口
②. 整组 I/O 初始化函数: GPIO_init_8pin();
void GPIO_init_8pin(uchar pin,uchar mode);
参数:pin 选择要初始化的端口。0-表示初始化 P0 口引脚
mode:0-表示初始化成准双向 I/O 口
1-表示初始化成强推挽 I/O 口
2-表示初始化成高阻态 I/O 口
3-表示初始化成开漏 I/O 口
③. 所有 I/O 初始化函数: GPIO_init_allpin();
void GPIO_init_allpin(uchar mode);
参数:mode:0-表示初始化成准双向 I/O 口
1-表示初始化成强推挽 I/O 口
2-表示初始化成高阻态 I/O 口
3-表示初始化成开漏 I/O 口
④. I/O 中断初始化函数: GPIO_isr_init();
void GPIO_isr_init(uchar pin,uchar mode);
参数:pin 选择要初始化的端口。00-表示初始化 P0^0 引脚
mode:0-表示下降沿中断
1-表示上升沿中断
2-表示低电平中断
3-表示高电平中断
⑤. I/O 中断反初始化函数: GPIO_isr_deinit();
void GPIO_isr_deinit(uchar pin);
参数:pin 选择要初始化的引脚。00-表示初始化 P0^0 引脚
⑥. I/O 读取函数: Get_IO();
bit Get_IO(int IO);
参数:pin 选择要读取的引脚。00-表示初始化 P0^0 引脚
返回值:返回当前IO状态
⑦. I/O 输出函数: Out_IO();
bit Out_IO (uchar IO,bit status);
参数:IO 选择要读取的引脚。00-表示初始化 P0^0 引脚
status:
0-表示输出低电平
1-表示输出高电平
无返回值
二. Delay 模块
①. 秒延时函数: Delay_X_S();
void Delay_X_S(int x);
取值范围 1-1000
②. 毫秒延时函数: Delay_X_mS();
void Delay_X_mS(int x);
取值范围 1-1000
③. 微秒延时函数: Delay_X_uS();
void Delay_X_uS(int x);
取值范围 1-1000
三. INT 模块
①. 外部中断初始化函数: INT_init();
void INT_init(int n,int mode);
参数:n :选择要初始化的外部中断模块号
0-对应引脚 P32
1-对应引脚 P33
2-对应引脚 P36
3-对应引脚 P37
4-对应引脚 P30
mode:选择触发中断的方式
0-下降沿触发
1-跳变沿触发(仅 INT0、 INT1 支持)
②. 外部中断 0 响应函数: INT0_isr();
void INT0_isr(void);
③. 外部中断 1 响应函数: INT1_isr();
void INT1_isr(void);
④. 外部中断 2 响应函数: INT2_isr();
void INT2_isr(void);
⑤. 外部中断 3 响应函数: INT3_isr();
void INT3_isr(void);
⑥. 外部中断 4 响应函数: INT4_isr();
void INT4_isr(void);
四. PIT 模块
①. 定时器毫秒初始化函数: PIT_init_ms();
void PIT_init_ms(int n,int time);
参数:n 选择要初始化的定时器模块,取值范围:0-4
time 选择定时器周期触发的时长(单位:ms),取值范围:1-32(24MHZ)
②. 定时器微秒初始化函数: PIT_init_us();
void PIT_init_us(int n,int time);
参数:n 选择要初始化的定时器模块,取值范围:0-4
time:选择定时器周期触发的时长(单位:us),取值范围:1-2730(24MHZ)
③. 定时器 0 中断响应函数: TM0_isr();
void TM0_isr(void);
④. 定时器 1 中断响应函数: TM1_isr();
void TM1_isr(void);
⑤. 定时器 2 中断响应函数: TM2_isr();
void TM2_isr(void);
⑥. 定时器 3 中断响应函数: TM3_isr();
void TM3_isr(void);
⑦. 定时器 4 中断响应函数: TM4_isr();
void TM4_isr(void);
五. UART 模块
①. UART 串口初始化函数: UART_init();
void UART_init(uchar pin,ulong btl, uchar n,uchar isr);
参数:pin:1-初始化串口 1(占定时器 1)
2-初始化串口 2(占定时器 2)
3-初始化串口 3(占定时器 3)
4-初始化串口 4(占定时器 4)
btl:选择通信波特率(两方必须一致才能通信)
取值范围: 2400、 4800、 9600、 19200、 38400、 51200、 115200
n:选择引脚复用通道:
对于串口 1:n=1 -串口使用 RXD=P30,TXD=P31
n=2 -串口使用 RXD=P36,TXD=P37
n=3 -串口使用 RXD=P16,TXD=P17
n=4 -串口使用 RXD=P43,TXD=P44
对于串口 2:n=1 -串口使用 RXD=P10,TXD=P11
n=2 -串口使用 RXD=P40,TXD=P42
对于串口 3:n=1 -串口使用 RXD=P00,TXD=P01
n=2 -串口使用 RXD=P50,TXD=P51
对于串口 4:n=1 -串口使用 RXD=P02,TXD=P03
n=2 -串口使用 RXD=P52,TXD=P53
isr:是否允许中断(建议允许中断)
0-不允许串口中断
1-允许串口中断
②. 串口发送字符函数: UART_Send_byte();
void UART_Send_byte(int pin,unsigned char c);
参数:pin:选择要发送数据的串口模块
取值范围: 1-4
c:要发送的数据(8 位 char 型变量)。 'A' -将 A 转换成对应的 ASCII 码发送
③. 串口发送字符串函数: UART_Send_string();
void UART_Send_string(int pin,unsigned char *pt);
参数:pin:选择要发送数据的串口模块
取值范围: 1-4
*pt:要发送的数据串。"abc123" -将 abc123 转换成对应的 ASCII 码逐个发送
④. 串口发送整数函数: UART_Send_int();
void UART_Send_int (int pin,uchar *pa,long num,uchar *pb);
参数:pin:选择要发送数据的串口模块
取值范围: 1-4
*pa:要发送的前缀文本。"Data:" -将 Data:转换成对应的 ASCII 码逐个发送
num:要发送是整型数据
*pb:要发送的后缀文本。"\r\n" -将\r\n转换成对应的 ASCII 码逐个发送
⑤. 串口发送浮点数函数: UART_Send_float();
void UART_Send_float (int pin,uchar *pa,float num,uchar *pb);
参数:pin:选择要发送数据的串口模块
取值范围: 1-4
*pa:要发送的前缀文本。"Data:" -将 Data:转换成对应的 ASCII 码逐个发送
num:要发送是浮点型数据
*pb:要发送的后缀文本。"\r\n" -将\r\n:转换成对应的 ASCII 码逐个发送
⑥. 串口 1 中断响应函数: UART1_isr();
void UART1_isr(void);
无返回值(需要在此程序中读取 SBUF 寄存器获取数据)
举例:
UART1_isr(){
char data;
data = SBUF; //将串口 1 接收的数据读取到临时变量 data 中
}
⑦. 串口 2 中断响应函数: UART2_isr();
void UART2_isr(void);
无返回值(需要在此程序中读取 S2BUF 寄存器获取数据)
⑧. 串口 3 中断响应函数: UART3_isr();
void UART3_isr(void);
无返回值(需要在此程序中读取 S3BUF 寄存器获取数据)
⑨. 串口 4 中断响应函数: UART4_isr();
void UART4_isr(void);
无返回值(需要在此程序中读取 S4BUF 寄存器获取数据)
六. ADC 模块
①. ADC 初始化函数: ADC_init();
void ADC_init(uchar pin, uchar speed, uchar num);
参数:pin:选择要初始化的 ADC 模块
取值范围: 0-7 对应 P10-P17 引脚
Speed:选择 ADC 转换速度
取值范围: 1-16, 值越大转换速度越快, 最快 80 万次/每秒
num:选择 ADC 硬件平均次数
取值范围: (1、 2、 4、 8、 16)
②. ADC 读取函数:ADC_get();
int ADC_get(int pin);
参数:X:选择要获取的 ADC 模块
取值范围: 0-7 对应 P10-P17 引脚
返回值:ADC 转换 12 位结果, 范围 0-4095, 对应 0V-5V。
七. PWM 模块
①. PWM 初始化函数: PWM_init();
void PWM_init(int pin,long f,int pwm);
参数:pin:选择要初始化的 PWM 引脚
取值范围: P10-P17/P20-P27/P60-P67。(每个 PWM 通道在三组口内仅能选择一个)
f:选择 PWM 波的输出频率(单位:Hz)
取值范围: 50-100000 (所有 PWM 通道必须保证频率一致。 频率取值越大, PWM 精度越不准确, 100KHz 时 PWM 调节精度为 7.25%, 误差较大)
pwm:选择 PWM 初始占空比
取值范围: 0-10000 对应 0%-100%占空比
②. 改变 PWM 占空比函数: PWM_change();
void PWM_change(int pin,int pwm);
参数:pin:选择要改变的 PWM 引脚
取值范围: P10-P17/P20-P27/P60-P67。(每个 PWM 通道在三组口内仅能选择一个, 改变前对应I/O 必须已经初始化)
pwm:选择改变后的占空比
取值范围: 0-10000 对应 0%-100%占空比
八. EEPROM 模块
①. EEPROM 读取函数: EEPROM_Read();
char EEPROM_Read(int addr);
参数:addr:要读取的存储地址
取值范围: 0x0000-0x0200, 也可以十进制输入 0-512, 一个地址可以存储一个 char 型数据
返回值:返回对应地址中存储的数据, 数据类型为 char 型
②. EEPROM 更改函数: EEPROM_change();
void EEPROM_Change(int addr, char dat);
参数:addr:要更改的存储地址
取值范围: 0x0000-0x0200, 也可以十进制输入 0-512, 一个地址可以存储一个 char 型数据
dat:要更改的数据
取值范围: 0x00-0xff (char 型变量)
③. EEPROM 清除函数: EEPROM_Delete();
void EEPROM_Delete(int addr);
参数:addr:要清除的存储地址
取值范围: 0x0000-0x0200, 也可以十进制输入 0-512, 一个地址可以存储一个 char 型数据
清除后默认 0xff
九. PCA 模块
①. PCA 脉冲计数初始化函数: PCA_Count_init();
void PCA_Count_init(int pin,char dirIO);
参数:pin:选择要初始化的脉冲输入引脚( 只计下降沿)
P17-P14 对应通道 0-3
P23-P26 对应通道 0-3
P70-P73 对应通道 0-3
P33-P30 对应通道 0-3
dirIO:选择要初始化的方向输入引脚( 无方向填 99)。00-表示初始化 P0^0 引脚作为方向输入
②. 获取 PCA 计数值函数: PCA_Count_get();
int PCA_Count_get(int n);
参数:pin:选择要获取的 PCA 通道号
取值范围: 0-3
返回值:返回计数值整数, 符号代表方向
③. PCA 模块 PWM 输出初始化: PCA_Pwm_init();
void PCA_Pwm_init(int pin,int freq,int pwm);
参数:pin:选择要初始化的 PWM 引脚
P17-P14 对应通道 0-3
P23-P26 对应通道 0-3
P70-P73 对应通道 0-3
P33-P30 对应通道 0-3
freq:PWM 输出的频率(4 路通道需保持一致)
30-7800(单位: Hz)
pwm:PWM 的初始占空比
0-10000(对应 0%-100%占空比)
④. PCA 模块 PWM 改变占空比: PCA_Pwm_change();
void PCA_Pwm_change(int pin,int pwm);
参数:pin:选择要获取的 PCA 通道号
0-3
pwm:PWM 的占空比
0-10000(对应 0%-100%占空比)
⑤. PCA 高速脉冲输出初始化: PCA_Pulse_init();
void PCA_Pulse_init(int pin,unsigned long freq);
参数:pin:选择要初始化的脉冲输出引脚
P17-P14 对应通道 0-3
P23-P26 对应通道 0-3
P70-P73 对应通道 0-3
P33-P30 对应通道 0-3
freq:脉冲输出频率(不同通道可以不同)
200-12000000(单位: HZ, 越高越不准)
⑥. PCA 脉宽测量初始化函数: PCA_Width_init();
void PCA_Width_init(int pin);
参数:pin:选择要初始化的脉冲输入引脚。(只测高电平时间, 注意脉冲高电平时间在1us到32768us之间才能测量, 否则无法测量)
P17-P14 对应通道 0-3
P23-P26 对应通道 0-3
P70-P73 对应通道 0-3
P33-P30 对应通道 0-3
⑦. PCA 脉宽测量结果函数: PCA_Width_get();
unsigned int PCA_Width_get(int pin);
参数:pin:选择要获取的 PCA 通道号
0-3
返回值:当前通道的脉冲高电平时间(脉冲宽度)
十. DMA 模块
①. DMA 串口接收初始化: DMA_rxd_init();
void DMA_rxd_init(uchar pin,uchar length,int DAT);
参数:pin:选择要 DMA 初始化的串口号
1 -对应通道串口 1
2 -对应通道串口 2
3 -对应通道串口 3
4 -对应通道串口 4
length:选择自动存储的数据长度, 存满后会触发 DMA 中断
1-256
DAT:数据要存放的位置, 类型为数组
填写数据名称, 数组长度要大于等于参数 2
②. DMA 串口 1 中断接收响应: DMA_RXD1_isr();
void DMA_RXD1_isr (void);
当 DMA 接收串口 1 数据满时, 程序会跳转到此函数,无输入值(需前往 isr.c 打开对应注释)
③. DMA 串口 2 中断接收响应: DMA_RXD2_isr();
void DMA_RXD2_isr (void);
当 DMA 接收串口 2 数据满时, 程序会跳转到此函数
④. DMA 串口 3 中断接收响应: DMA_RXD3_isr();
void DMA_RXD3_isr (void);
当 DMA 接收串口 3 数据满时, 程序会跳转到此函数
⑤. DMA 串口 4 中断接收响应: DMA_RXD4_isr();
void DMA_RXD4_isr (void);
当 DMA 接收串口 4 数据满时, 程序会跳转到此函数