随笔小屋 Logo
首页
瞬间
反馈
随笔小屋 Logo
首页 瞬间 反馈
  1. 首页
  2. 8051
  3. stc8a8k64d4函数库

stc8a8k64d4函数库

  • 8051
  • 发布于 2026-01-25
  • 205 次阅读
flor
flor

一. 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 数据满时, 程序会跳转到此函数

目录
湘ICP备2025147565号-1
gongan beian 湘公网安备43102602000213号
CPU --% | 内存 0.00G/0.00G (0%) | 网络 无活动网卡
服务器资源占用 更新时间 --:--:--