初始化仓库

This commit is contained in:
2025-08-31 21:43:17 +08:00
commit be600d0769
45 changed files with 22852 additions and 0 deletions

40
Header/PCA9685_driver.h Normal file
View File

@@ -0,0 +1,40 @@
#ifndef __PCA9685_DRIVER_H__
#define __PCA9685_DRIVER_H__
#include "common.h"
#define PCA9685_I2C_ADDR 0x40 // PCA9685 I2C地址
#define PCA9685_USE_SOFT_IIC 1 // 使用软件IIC
#if PCA9685_USE_SOFT_IIC == 1
#define PCA9685_SOFT_IIC_SCL_PIN P1_5
#define PCA9685_SOFT_IIC_SDA_PIN P1_4
#else
#define PCA9685_I2C_SCL_PIN IIC1_SCL_P15
#define PCA9685_I2C_SDA_PIN IIC1_SDA_P14
#endif
#define PCA9685_MODE1 0x00
#define PCA9685_PRESCALE 0xFE
#define PCA9685_LED0_ON_L 0x06
#define PCA9685_LED0_ON_H 0x07
#define PCA9685_LED0_OFF_L 0x08
#define PCA9685_LED0_OFF_H 0x09
#define PCA9685_ALL_LED_ON_L 0xFA
#define PCA9685_ALL_LED_ON_H 0xFB
#define PCA9685_ALL_LED_OFF_L 0xFC
#define PCA9685_ALL_LED_OFF_H 0xFD
#define PCA9685_DEF_FREQ 50 // 默认频率为50Hz
void pca9685_init();
void pca9685_deinit();
void pca9685_set_frequency(uint16 frequency);
void pca9685_set_pwm(uint8 channel, uint16 on, uint16 off);
#endif

1460
Header/STC32G.H Normal file

File diff suppressed because it is too large Load Diff

38
Header/button.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef __BUTTON_H__
#define __BUTTON_H__
#include "common.h"
#include "gpio.h"
#define BUTTON_NO_PIN P0_6 // 按钮引脚
#define BUTTON_NC_PIN P0_7 // 按钮引脚
#define BUTTON_SHORT_PRESS_TIME 100 // 短按时间阈值,单位为毫秒
#define BUTTON_LONG_PRESS_TIME 2000 // 长按时间阈值,单位为毫秒
typedef enum
{
BUTTON_LED_OFF = 0,
BUTTON_LED_R = P3_7,
BUTTON_LED_G = P3_6,
BUTTON_LED_O = P3_5,
} button_led_enum;
typedef enum
{
BUTTON_NO_PRESS = 0, // 空闲状态
BUTTON_SHORT_PRESS = 1, // 短按
BUTTON_SHORT_PRESS_HANDLED = 2, // 短按已处理
BUTTON_LONG_PRESS = 3, // 长按
} button_status_enum;
extern uint32 button_press_time;
void button_init();
void button_1ms_callback(); // 1ms定时器回调函数
button_status_enum button_get_status(); // 获取按钮状态
void button_led_set(button_led_enum led);
#endif

61
Header/clock_init.h Normal file
View File

@@ -0,0 +1,61 @@
#ifndef __CLOCK_INIT_H__
#define __CLOCK_INIT_H__
#include "common.h"
//FOSC可选值:35000000, 33177600, 30000000, 27000000. 24000000, 22118400
// #define FOSC 0 // FOSC的值设置为0则内核频率通过寄存器强制设置为33.1776Mhz
// 不管STC-ISP软件下载时候选择多少他都是33.1776Mhz。
#define FOSC 33177600 // FOSC的值设置为33.1776Mhz,
// 使用STC-ISP软件下载的时候
// 此频率需要跟STC-ISP软件中的 <输入用户程序运行时的IRC频率>选项的频率一致。
#define EXTERNAL_CRYSTA_ENABLE 0 // 使用外部晶振0为不使用1为使用建议使用内部晶振
#define PRINTF_ENABLE 1 // printf使能0为失能1为使能
#define ENABLE_IAP 1 // 使能软件一键下载功能0为失能1为使能
#define DEBUG_UART UART_1
#define DEBUG_UART_BAUD 115200
#define DEBUG_UART_RX_PIN UART1_RX_P30
#define DEBUG_UART_TX_PIN UART1_TX_P31
#define DEBUG_UART_TIM TIM_2
#define USE_USB_CDC 1
#if (1==PRINTF_ENABLE)
#if (1==USE_USB_CDC)
#include "stc32_stc8_usb.h"
#define printf printf_hid
#else
char putchar(char c);
#endif
#endif
#define SET_P54_RESRT (RSTCFG |= 1<<4) //设置P54为复位引脚
extern int32 sys_clk;
void board_init(void);
void DisableGlobalIRQ(void);
void EnableGlobalIRQ(void);
#define T22M_ADDR CHIPID11 //22.1184MHz
#define T24M_ADDR CHIPID12 //24MHz
#define T27M_ADDR CHIPID13 //27MHz
#define T30M_ADDR CHIPID14 //30MHz
#define T33M_ADDR CHIPID15 //33.1776MHz
#define T35M_ADDR CHIPID16 //35MHz
#define T36M_ADDR CHIPID17 //36.864MHz
#define T40M_ADDR CHIPID18 //40MHz
#define T44M_ADDR CHIPID19 //44.2368MHz
#define T48M_ADDR CHIPID20 //48MHz
#define VRT6M_ADDR CHIPID21 //VRTRIM_6M
#define VRT10M_ADDR CHIPID22 //VRTRIM_10M
#define VRT27M_ADDR CHIPID23 //VRTRIM_27M
#define VRT44M_ADDR CHIPID24 //VRTRIM_44M
#endif

12
Header/command.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef __COMMAND_H__
#define __COMMAND_H__
#include "common.h"
#define COMMAND_BUFFER_SIZE 64 // 命令缓冲区大小
void parseCommand();
void command_uart_callback(uint8 dat);
#endif

12
Header/common.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef __COMMON_H__
#define __COMMON_H__
#include <STC32G.H>
#include <string.h>
#include <stdio.h>
#include "intrins.h"
#include "types.h"
#include "clock_init.h"
#endif

10
Header/delay.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef __DELAY_H__
#define __DELAY_H__
#include "common.h"
void delay_init();
void delay_ms(uint16 x);
void delay_us(uint32 us);
#endif

36
Header/exti.h Normal file
View File

@@ -0,0 +1,36 @@
#ifndef __EXTI_H__
#define __EXTI_H__
#include "common.h"
//此枚举定义不允许用户修改
typedef enum // 枚举ADC通道
{
INT0_P32 = 0, //支持边沿,下降沿中断
INT1_P33, //支持边沿,下降沿中断
INT2_P36, //支持下降沿中断
INT3_P37, //支持下降沿中断
INT4_P30, //支持下降沿中断
}INTN_enum;
#define INT0_CLEAR_FLAG (TCON &= (~(0x01 << 1))) //外部中断 0 中断请求标志。中断服务程序中,硬件自动清零。
#define INT1_CLEAR_FLAG (TCON &= (~(0x01 << 3))) //外部中断 1 中断请求标志。中断服务程序中,硬件自动清零。
#define INT2_CLEAR_FLAG (AUXINTIF &= (~(0x10 << 0))) //外部中断 2 中断请求标志。中断服务程序中,硬件自动清零。
#define INT3_CLEAR_FLAG (AUXINTIF &= (~(0x10 << 1))) //外部中断 3 中断请求标志。中断服务程序中,硬件自动清零。
#define INT4_CLEAR_FLAG (AUXINTIF &= (~(0x10 << 2))) //外部中断 4 中断请求标志。中断服务程序中,硬件自动清零。
typedef enum // 枚举ADC通道
{
BOTH, //边沿
FALLING_EDGE, //下降沿
// RISING_EDGE, //不支持上升沿
}INT_MODE_enum;
void exit_init(INTN_enum int_n,INT_MODE_enum mode);
#endif

72
Header/fifo.h Normal file
View File

@@ -0,0 +1,72 @@
#ifndef __FIFO_H__
#define __FIFO_H__
#include "common.h"
typedef enum
{
FIFO_SUCCESS, // FIFO 操作成功
FIFO_RESET_UNDO, // FIFO 重置操作未执行
FIFO_CLEAR_UNDO, // FIFO 清空操作未执行
FIFO_BUFFER_NULL, // FIFO 用户缓冲区异常
FIFO_WRITE_UNDO, // FIFO 写入操作未执行
FIFO_SPACE_NO_ENOUGH, // FIFO 写入操作 缓冲区空间不足
FIFO_READ_UNDO, // FIFO 读取操作未执行
FIFO_DATA_NO_ENOUGH, // FIFO 读取操作 数据长度不足
}fifo_state_enum; // FIFO 操作结果
// 操作逻辑
// 整体重置操作 将会强制清空 FIFO 谨慎使用
// 数据写入操作 不能在重置以及写入操作时进行
// 顺序读取操作 不能在清空和重置操作时进行
// 尾部读取操作 不能在清空和重置以及写入操作时进行
// 读取清空操作 不能在清空和重置以及读取操作时进行
// 这是为了防止中断嵌套导致数据混乱
typedef enum
{
FIFO_IDLE = 0x00, // 空闲状态
FIFO_RESET = 0x01, // 正在执行重置缓冲区
FIFO_CLEAR = 0x02, // 正在执行清空缓冲区
FIFO_WRITE = 0x04, // 正在执行写入缓冲区
FIFO_READ = 0x08, // 正在执行读取缓冲区
}fifo_execution_enum; // FIFO 操作状态 为嵌套使用预留 无法完全避免误操作
typedef enum
{
FIFO_READ_AND_CLEAN, // FIFO 读操作模式 读取后清空释放对应缓冲区
FIFO_READ_ONLY, // FIFO 读操作模式 仅读取
}fifo_operation_enum;
typedef enum
{
FIFO_DATA_8BIT, // FIFO 数据位宽 8bit
FIFO_DATA_16BIT, // FIFO 数据位宽 16bit
FIFO_DATA_32BIT, // FIFO 数据位宽 32bit
}fifo_data_type_enum;
typedef struct
{
uint8 execution; // 执行步骤
fifo_data_type_enum type; // 数据类型
void *buffer; // 缓存指针
uint32 head; // 缓存头指针 总是指向空的缓存
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 reamin_size; // 缓存剩余大小
uint32 max; // 缓存总大小
}fifo_struct;
fifo_state_enum fifo_clear (fifo_struct *fifo);
uint32 fifo_used (fifo_struct *fifo);
fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 len);
#endif

41
Header/gpio.h Normal file
View File

@@ -0,0 +1,41 @@
#ifndef __GPIO_H__
#define __GPIO_H__
#include "common.h"
typedef enum
{
NOPULL = 0,
PULLUP = 1,
}PULL_enum;
typedef enum
{
P0_0 = 0x00, P0_1, P0_2, P0_3, P0_4, P0_5, P0_6, P0_7,
P1_0 = 0x10, P1_1, P1_2, P1_3, P1_4, P1_5, P1_6, P1_7,
P2_0 = 0x20, P2_1, P2_2, P2_3, P2_4, P2_5, P2_6, P2_7,
P3_0 = 0x30, P3_1, P3_2, P3_3, P3_4, P3_5, P3_6, P3_7,
P4_0 = 0x40, P4_1, P4_2, P4_3, P4_4, P4_5, P4_6, P4_7,
P5_0 = 0x50, P5_1, P5_2, P5_3, P5_4, P5_5, P5_6, P5_7,
P6_0 = 0x60, P6_1, P6_2, P6_3, P6_4, P6_5, P6_6, P6_7,
P7_0 = 0x70, P7_1, P7_2, P7_3, P7_4, P7_5, P7_6, P7_7,
}PIN_enum;
typedef enum
{
//pnm1 pnm0
GPIO = 0, //准双向口(弱上拉)
GPO_PP = 1, //推挽输出
GPI_IMPEDANCE = 2, //高阻输入
GPI_OD = 3, //开漏输出
}GPIOMODE_enum;
void gpio_set_level(PIN_enum pin, uint8 level);
uint8 gpio_get_level(PIN_enum pin);
void gpio_pull_set(PIN_enum pin, PULL_enum pull);
void gpio_mode(PIN_enum pin, GPIOMODE_enum mode);
#endif

23
Header/hx711.h Normal file
View File

@@ -0,0 +1,23 @@
#ifndef __HX711_H__
#define __HX711_H__
#include "common.h"
#define HX711_DT_PIN P3_3
#define HX711_SCK_PIN P3_4
typedef enum
{
HX711_A_128 = 1,
HX711_B_32 = 2,
HX711_A_64 = 3,
} HX711_ch_enum;
extern uint32 hx711_last_read_value[10]; // 用于存储最近读取的值
void hx711_init();
uint32 hx711_read_set(HX711_ch_enum next_ch,uint8 avg_times);
uint8 hx711_single_read_non_blocking(HX711_ch_enum next_ch); // 非阻塞读取HX711数据
#endif

34
Header/iic.h Normal file
View File

@@ -0,0 +1,34 @@
#ifndef __IIC_H__
#define __IIC_H__
#include "common.h"
typedef enum
{
IIC_1 = 0,
IIC_2 = 1,
IIC_3 = 2,
IIC_4 = 3,
} IICN_enum;
// IO口是绑定死的这里只是列出来
typedef enum
{
IIC1_SCL_P15 = 0x00, IIC1_SDA_P14,
IIC2_SCL_P25 = 0x10, IIC2_SDA_P24,
IIC3_SCL_P77 = 0x20, IIC3_SDA_P76,
IIC4_SCL_P32 = 0x30, IIC4_SDA_P33,
} IIC_PIN_enum;
#define IIC_SEND_OK 0
#define IIC_SEND_FAIL 1
void iic_init(IICN_enum iic_n, uint8 wait_time);
uint8 iic_write_reg(uint8 dev_add, uint8 reg, uint8 dat);
uint8 iic_read_reg(uint8 dev_add, uint8 reg, uint8 *dat);
uint8 iic_read_reg_bytes(uint8 dev_add, uint8 reg, uint8 *dat, uint8 num);
void iic_change_pin(IICN_enum iic_n);
#endif

20
Header/iic_soft.h Normal file
View File

@@ -0,0 +1,20 @@
#ifndef __IIC_SOFT_H__
#define __IIC_SOFT_H__
#include "common.h"
#include "gpio.h"
typedef struct
{
PIN_enum scl_pin; // SCL引脚
PIN_enum sda_pin; // SDA引脚
uint16 wait_time; // 等待时间用于I2C总线速度控制
} IIC_Soft_Config;
void soft_iic_init(IIC_Soft_Config *config);
uint8 soft_iic_read_reg(IIC_Soft_Config *config, uint8 dev_addr, uint8 reg_addr, uint8 *dat);
void soft_iic_write_reg(IIC_Soft_Config *config, uint8 dev_addr, uint8 reg_addr, uint8 dat);
#endif

9
Header/isr.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef __ISR_H__
#define __ISR_H__
#include "common.h"
#include "uart.h"
#include "exti.h"
#endif

69
Header/pwm.h Normal file
View File

@@ -0,0 +1,69 @@
#ifndef __PWM_H__
#define __PWM_H__
#include "common.h"
#define PWM_DUTY_MAX 10000
typedef enum
{
//PWMA和PWMB是两组不同的PWM
//以下是PWMA通道。
//同一组PWM同一时刻只能有同一个PWM输出。
//例如:PWMA_CH1P_P10 和 PWMA_CH1N_P11不能一起输出。
PWMA_CH1P_P10 = 0x00,PWMA_CH1N_P11,
PWMA_CH1P_P20, PWMA_CH1N_P21,
PWMA_CH1P_P60, PWMA_CH1N_P61,
PWMA_CH2P_P12 = 0x10,//该引脚已做 USB 内核电源稳压脚
PWMA_CH2N_P13,
PWMA_CH2P_P22, PWMA_CH2N_P23,
PWMA_CH2P_P62, PWMA_CH2N_P63,
PWMA_CH3P_P14 = 0x20,PWMA_CH3N_P15,
PWMA_CH3P_P24, PWMA_CH3N_P25,
PWMA_CH3P_P64, PWMA_CH3N_P65,
PWMA_CH4P_P16 = 0x30,PWMA_CH4N_P17,
PWMA_CH4P_P26, PWMA_CH4N_P27,
PWMA_CH4P_P66, PWMA_CH4N_P67,
PWMA_CH4P_P34, PWMA_CH4N_P33,
//以下是PWMB通道。
//同一组PWM同一时刻只能有同一个PWM输出。
//例如:PWMB_CH1_P20 和 PWMB_CH1_P17 不能同时输出
//但是不同的通道可以同一时刻输出。
//例如:PWMB_CH1_P20 和 PWMB_CH2_P21可以同时输出
PWMB_CH1_P20 = 0x40,
PWMB_CH1_P17,
PWMB_CH1_P00,
PWMB_CH1_P74,
PWMB_CH2_P21 = 0x50,
PWMB_CH2_P54, //该引脚为复位引脚
PWMB_CH2_P01,
PWMB_CH2_P75,
PWMB_CH3_P22 = 0x60,
PWMB_CH3_P33,
PWMB_CH3_P02,
PWMB_CH3_P76,
PWMB_CH4_P23 = 0x70,
PWMB_CH4_P34,
PWMB_CH4_P03,
PWMB_CH4_P77,
}PWMCH_enum;
void pwm_init(PWMCH_enum pwmch,uint32 freq, uint32 duty);
void pwm_duty(PWMCH_enum pwmch, uint32 duty);
void pwm_freq(PWMCH_enum pwmch, uint32 freq, uint32 duty);
#endif

89
Header/stc32_stc8_usb.h Normal file
View File

@@ -0,0 +1,89 @@
#ifndef __STC32_STC8_USB_H__
#define __STC32_STC8_USB_H__
#include "common.h"
//使用串口“printf”打印信息需屏蔽以下两个定义
//#define PRINTF_SEGLED //printf输出重定向到ISP下载软件中的7段数码管
//#define PRINTF_HID //printf输出直接重定向到USB HID接口
#ifndef NULL
#define NULL ((void *) 0)
#endif
#define DEVSTATE_ATTACHED 0
#define DEVSTATE_POWERED 1
#define DEVSTATE_DEFAULT 2
#define DEVSTATE_ADDRESS 3
#define DEVSTATE_CONFIGURED 4
#define DEVSTATE_SUSPENDED 5
void usb_init();
//void usb_IN(); //USB HID
//void usb_IN(uint16 size); //USB CDC
void usb_OUT_done();
void USB_SendData(uint8 *dat, int size);
BOOL usb_OUT_callback(); //包含中断模式的CDC库时需要编写此回调函数代码查询模式则不需要
int SEG7_ShowString(const char *fmt, ...);
void SEG7_ShowLong(long n, char radix);
void SEG7_ShowFloat(float f);
void SEG7_ShowCode(uint8 *cod);
void LED40_SendData(uint8 *dat, uint8 size);
void LED64_SendData(uint8 *dat, uint8 size);
void LCD12864_DisplayOff();
void LCD12864_DisplayOn();
void LCD12864_CursorOff();
void LCD12864_CursorOn();
void LCD12864_CursorMoveLeft();
void LCD12864_CursorMoveRight();
void LCD12864_CursorReturnHome();
void LCD12864_ScrollLeft();
void LCD12864_ScrollRight();
void LCD12864_ScrollUp(uint8 line);
void LCD12864_AutoWrapOff();
void LCD12864_AutoWrapOn();
void LCD12864_ReverseLine(uint8 line);
void LCD12864_DisplayClear();
void LCD12864_ShowString(uint8 x, uint8 y, char *str);
void LCD12864_ShowPicture(uint8 x, uint8 y, uint8 cx, uint8 cy, uint8 *dat);
void OLED12864_DisplayOff();
void OLED12864_DisplayOn();
void OLED12864_DisplayContent();
void OLED12864_DisplayEntire();
void OLED12864_HorizontalMirror();
void OLED12864_VerticalMirror();
void OLED12864_DisplayReverse();
void OLED12864_SetContrast(uint8 bContrast);
void OLED12864_SetAddressMode(uint8 bMode);
void OLED12864_ScrollLeft(uint8 bPageStart, uint8 bPageEnd, uint16 nInterval);
void OLED12864_ScrollRight(uint8 bPageStart, uint8 bPageEnd, uint16 nInterval);
void OLED12864_ScrollUp(uint8 bPageStart, uint8 bPageEnd, uint16 nInterval);
void OLED12864_ScrollStart();
void OLED12864_ScrollStop();
void OLED12864_ShowPicture(uint8 x, uint8 y, uint8 cx, uint8 cy, uint8 *dat);
int printf_hid (const char *fmt, ...);
#if defined PRINTF_SEGLED
#define printf SEG7_ShowString
#elif defined PRINTF_HID
#define printf printf_hid
#endif
extern uint8 xdata UsbFeatureBuffer[64];
extern uint8 xdata UsbInBuffer[64];
extern uint8 xdata UsbOutBuffer[64];
extern BOOL bUsbFeatureReady;
extern BOOL bUsbInBusy;
extern BOOL bUsbOutReady;
extern uint8 DeviceState;
extern uint8 OutNumber;
#endif

38
Header/tim.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef __TIM_H__
#define __TIM_H__
#include "common.h"
typedef enum
{
CTIM0_P34=0,
CTIM1_P35,
CTIM2_P12,
CTIM3_P04,
CTIM4_P06,
}CTIMN_enum;
typedef enum
{
TIM_0,
TIM_1,
TIM_2,
TIM_3,
TIM_4,
}TIMN_enum;
#define TIM2_CLEAR_FLAG AUXINTIF &= ~0x01;
#define TIM3_CLEAR_FLAG AUXINTIF &= ~0x02; // 清中断标志
#define TIM4_CLEAR_FLAG AUXINTIF &= ~0x04; // 清中断标志
void ctimer_count_init(CTIMN_enum tim_n);
void ctimer_count_clean(CTIMN_enum tim_n);
uint16 ctimer_count_read(CTIMN_enum tim_n);
void pit_timer_ms(TIMN_enum tim_n,uint16 time_ms);
#endif

26
Header/types.h Normal file
View File

@@ -0,0 +1,26 @@
#ifndef __TYPES_H__
#define __TYPES_H__
//数据类型声明
typedef unsigned char uint8 ; // 8 bits
typedef unsigned int uint16 ; // 16 bits
typedef unsigned long uint32 ; // 32 bits
typedef signed char int8 ; // 8 bits
typedef signed int int16 ; // 16 bits
typedef signed long int32 ; // 32 bits
typedef volatile int8 vint8 ; // 8 bits
typedef volatile int16 vint16 ; // 16 bits
typedef volatile int32 vint32 ; // 32 bits
typedef volatile uint8 vuint8 ; // 8 bits
typedef volatile uint16 vuint16; // 16 bits
typedef volatile uint32 vuint32; // 32 bits
typedef bit BOOL;
#endif

65
Header/uart.h Normal file
View File

@@ -0,0 +1,65 @@
#ifndef __UART_H__
#define __UART_H__
#include "common.h"
#include "tim.h"
#define UART1_CLEAR_RX_FLAG (SCON &= ~0x01)
#define UART2_CLEAR_RX_FLAG (S2CON &= ~0x01)
#define UART3_CLEAR_RX_FLAG (S3CON &= ~0x01)
#define UART4_CLEAR_RX_FLAG (S4CON &= ~0x01)
#define UART1_CLEAR_TX_FLAG (SCON &= ~0x02)
#define UART2_CLEAR_TX_FLAG (S2CON &= ~0x02)
#define UART3_CLEAR_TX_FLAG (S3CON &= ~0x02)
#define UART4_CLEAR_TX_FLAG (S4CON &= ~0x02)
#define UART1_GET_RX_FLAG (SCON & 0x01)
#define UART2_GET_RX_FLAG (S2CON & 0x01)
#define UART3_GET_RX_FLAG (S3CON & 0x01)
#define UART4_GET_RX_FLAG (S4CON & 0x01)
#define UART1_GET_TX_FLAG (SCON & 0x02)
#define UART2_GET_TX_FLAG (S2CON & 0x02)
#define UART3_GET_TX_FLAG (S3CON & 0x02)
#define UART4_GET_TX_FLAG (S4CON & 0x02)
typedef enum //枚举串口号
{
UART_1,
UART_2,
UART_3,
UART_4,
}UARTN_enum;
typedef enum //枚举串口引脚
{
UART1_RX_P30, UART1_TX_P31, //只能使用同一行的RX和TX引脚号。不允许混用
UART1_RX_P36, UART1_TX_P37, //例如:UART1_RX_P30,UART1_TX_P37。这样不行。
UART1_RX_P16, UART1_TX_P17,
UART1_RX_P43, UART1_TX_P44,
UART2_RX_P10, UART2_TX_P11,
UART2_RX_P46, UART2_TX_P47,
UART3_RX_P00, UART3_TX_P01,
UART3_RX_P50, UART3_TX_P51,
UART4_RX_P02, UART4_TX_P03,
UART4_RX_P52, UART4_TX_P53,
}UARTPIN_enum;
extern uint8 busy[5];
void uart_init(UARTN_enum uart_n, UARTPIN_enum uart_rx_pin, UARTPIN_enum uart_tx_pin, uint32 baud,TIMN_enum tim_n);
void uart_putchar(UARTN_enum uart_n,uint8 dat);
void uart_putstr(UARTN_enum uart_n,uint8 *str);
void uart_putbuff(UARTN_enum uart_n,uint8 *p,uint32 len);
#endif