• AVR单片机教程——EasyElectronics Library v1.3手册


    本文隶属于AVR单片机教程系列。

     

    bit.h delay.h

    pin.h wave.h pwm.h tone.h adc.h

    button.h switch.h rotary.h pot.h ldr.h

    led.h rgbw.h segment.h lcd.h buzzer.h

    uart.h

     

    主要更新:

    • 其实没有必要用新版本号,但我不想再用写v1.2的那个编辑器了;

    • 完成了所有板载器件的库(除OLED,并且不打算写);

    • 为所有头文件添加C++支持(#ifdef __cplusplus)。

    下载

     

    bit.h

    <bit.h>定义了用于位操作的宏函数,适用于8或16位整数。

    set_bit(r, b):将r的第b位置为1

    reset_bit(r, b):将r的第b位置为0

    read_bit(r, b):读取r的第b位,若为1则返回(1 << b),否则返回0

    cond_bit(c, r, b):若c为真,则将r的第b位置为1,否则置为0

    flip(r, b):将r的第b位翻转。

    clock(r, b):将r的第b位翻转2次。

     

    delay.h

    <delay.h>定义了延时函数。

    void delay(uint16_t _time):延时_time毫秒。

     

    pin.h

    <pin.h>定义了引脚操作的函数。

    pin_t:枚举类型,表示引脚。

    PIN_NULL:表示空引脚。所有接受pin_t参数的函数如果接受PIN_NULL参数,则不会执行任何动作,返回void0

    PIN_x:宏常量,x0~9A~F,表示开发板上引脚。

    pin_mode_t:枚举类型,表示引脚工作模式。

    • INPUT:表示输入;

    • OUTPUT:表示输出。

    void pin_mode(pin_t _pin, pin_mode_t _mode):将_pin引脚设为_mode模式。

    3个表示引脚电平的宏:

    • LOW:宏常量,输入模式下表示高阻态,输出模式下表示低电平;

    • HIGH:宏常量,输出模式下表示高电平;

    • PULLUP:宏常量,输入模式下表示上拉。

    void pin_write(pin_t _pin, bool _level)_level应为bool量或上述3个宏之一(推荐前者),将_pin引脚设为_level状态(根据先前调用pin_mode决定模式,默认为输入)。

    void pin_flip(pin_t _pin):将_pin引脚电平翻转。

    bool pin_read(pin_t _pin):返回_pin引脚电平是否为高。

     

    wave.h

    <wave.h>定义了波形输出相关函数。引脚4~7可用于波形输出。

    WAVE_COUNT:宏常量,波形输出引脚个数。

    wave_t:枚举类型,表示波形输出引脚。

    • WAVE_NULL:表示空引脚,当作为参数时,函数不进行任何操作;

    • WAVE_xx0~3,分别表示一个引脚。

    void wave_init():初始化波形输出(实际上什么都没有做,可以不调用)。

    wave_mode_t:枚举类型,表示波形输出模式。

    • WAVE_MODE_OFF:关闭波形输出;

    • WAVE_MODE_PWM:PWM输出;

    • WAVE_MODE_TONE:方波输出。

    void wave_mode(wave_t _channel, wate_mode_t _mode):将_channel波形输出通道设置为_mode模式。

     

    pwm.h

    <pwm.h>定义了输出PWM波形的函数。

    pwm_init():初始化PWM(实际上什么都没有做,可以不调用)。

    pwm_set(wave_t _channel, uint8_t _value):将_channel通道的占空比设置为_value(必须先调用wave_mode)。

     

    tone.h

    <tone.h>定义了输出方波的函数。

    void tone_init():初始化方波输出(实际上什么都没有做,可以不调用)。

    void tone_set(wave_t _channel, uint16_t _freq):使_channel通道输出频率为_freq的方波;若_freq为零,不输出(必须先调用wave_mode)。

     

    adc.h

    <adc.h>提供了使用ADC组件的函数。

    ADC_COUNT:ADC引脚个数。引脚0~3可用于ADC。

    adc_t:表示ADC引脚。

    • ADC_NULL:表示无ADC输入,当作为参数时,函数返回0;

    • ADC_xx03,表示ADC引脚。

    void adc_init():初始化ADC。

    uint8_t adc_read(adc_t _channel):从_channel引脚读取8位ADC值。

    uint16_t adc_read_10bit(adc_t _channel):从_channel引脚读取10位ADC值。

    uint8_t adc_read_fast(adc_t _channel):从_channel引脚读取8位ADC值。只能连续读取单一通道,并且前几次的返回值不准。

    adc_ref_t:表示ADC参考电压。

    • ADC_REF_AREF:AREF端口;

    • ADC_REF_AVCC:5V电源电压;

    • ADC_REF_1V1:内部1.1V参考电压;

    • ADC_REF_2V56:内部2.56V参考电压。

    void adc_reference(adc_ref_t _ref):设定ADC参考电压。

     

    button.h

    <button.h>定义了读取板载按键状态的函数。

    BUTTON_COUNT:宏常量,按键个数。

    button_t:枚举类型,表示按键。

    BUTTON_xx0~3,表示按键。

    pin_t button_pin[BUTTON_COUNT]:存储按键所连接的引脚。

    void button_init(pin_t _button2, pin_t _button3)_button2_button3分别为按键2和3连接的引脚,可以为PIN_NULL。初始化按键操作。

    bool button_down(button_t _which):返回_which按键是否被按下(调用时状态)。

    bool button_pressed(button_t _which):返回从上一次对_which调用开始,该按键是否被按下(只管两次调用时的状态,无法检测中间过程)。

     

    switch.h

    <switch.h>定义了读取板载拨动开关状态的函数。

    SWITCH_COUNT:宏常量,开关个数。

    switch_t:枚举类型,表示开关。

    SWITCH_xx0~3,表示开关。

    pin_t switch_pin[SWITCH_COUNT]:存储开关所连接的引脚。

    void switch_init(pin_t _switch2, pin_t _switch3)_switch2_switch3分别为开关2和3连接的引脚,可以为PIN_NULL。初始化开关操作。

    bool switch_status(switch_t _which):返回_which开关的状态。

    bool switch_changed(switch_t _which):返回从上一次对_which调用开始,该开关状态是否被改变(只管两次调用时的状态,无法检测中间过程)。

     

    rotary.h

    <rotary.h>提供了使用板载旋转编码器所需的函数。

    rotary_event_t:旋转编码器事件枚举类型。

    • ROTARY_NONE:未旋转;

    • ROTARY_CW:顺时针旋转;

    • ROTARY_ACW:逆时针旋转。

    pin_t rotary_pin[]:旋转编码器A、B端的引脚。

    void rotary_init(pin_t _pina, pin_t _pinb):初始化旋转编码器。

    uint8_t rotary_status():最低位为A端电平,次低位为B端电平。

    rotary_event_t rotary_rotated():两次调用之间编码器是否被旋转。

     

    pot.h

    <pot.h>提供了使用板载电位器所需的函数。

    void pot_init(adc_t _pin):初始化电位器。

    uint8_t pot_read():读取电位器位置(8位无符号整数)。

     

    ldr.h

    <ldr.h>提供了使用板载光敏电阻所需的函数。

    void ldr_init(adc_t _pin):初始化光敏电阻。

    uint8_t ldr_read():读取分压值(8位无符号整数,与光强正相关)。

     

    led.h

    <led.h>定义了板载LED操作的函数。

    LED_COUNT:宏常量,LED的个数。

    void led_init():初始化LED。

    led_t:枚举类型,表示LED。

    • LED_RED:表示红色LED;

    • LED_YELLOW:表示黄色LED;

    • LED_GREEN:表示绿色LED;

    • LED_BLUE:表示蓝色LED。

    2个表示LED状态的宏:

    • LED_OFF:宏常量,表示LED不亮;

    • LED_ON:宏常量,表示LED亮。

    void led_set(led_t _which, bool _on)_on应为bool量或上述表示LED状态的宏(推荐前者),将_which设为_on的状态。

    void led_flip(led_t _which):将_which的状态翻转。

    void led_on():点亮所有LED。

    void led_off():关闭所有LED。

     

    rgbw.h

    <rgbw.h>定义了驱动板载RGBW LED的函数。

    RGBW_COUNT:宏常量,RGBW LED的独立颜色数。

    rgbw_t:枚举类型,表示RGBW的颜色。

    • RGBW_RED:表示红色LED;

    • RGBW_GREEN:表示绿色LED;

    • RGBW_BLUE:表示蓝色LED;

    • RGBW_WHITE:表示白色LED。

    rgbw_pinpin_t类型数组,存储RGBW LED的颜色对应的引脚。

    void rgbw_init(pin_t _r, pin_t _g, pin_t _b, pin_t _w):初始化RGBW LED,4个参数分别为红、绿、蓝、白LED的引脚。

    void rgbw_set(rgbw_t _which, uint8_t _value)_value为亮度值。对于4~7号引脚,_value为亮度;对于其他引脚,_value>=128则LED亮。

    RGBW_COLOR(r, g, b, w):宏函数,接受4个0~3的数(取二进制最低两位),生成一个表示颜色的数。

    void rgbw_color(uint8_t _color)_color应为RGBW_COLOR生成的数,使RGBW LED显示相应的颜色。

    void rgbw_off():关闭RGBW LED。

     

    segment.h

    <segment.h>定义了设置数码管显示数据与控制显示的函数。

    数码管与LCD屏不能同时使用。

    SEGMENT_DIGIT_COUNT:宏常量,数码管位数

    segment_t:枚举类型,表示数码管的位。

    • SEGMENT_DIGIT_L:左边的位

    • SEGMENT_DIGIT_R:右边的位

    pin_t segment_pin[SEGMENT_DIGIT_COUNT]:存储数码管负极连接的引脚。

    void segment_init(pin_t _digit0, pin_t _digit1)_digit0_digit1分别为数码管左右两位负极连接的引脚,可以为PIN_NULL。初始化数码管操作。

    extern const uint8_t segment_digit[16]:0~9、A~F的段码。

    extern const uint8_t segment_dot:小数点的段码。与segment_digit中的元素位或的结果表示带小数点的数字段码。

    以下函数只设置显示数据,不控制显示,返回值均为是否设置成功:

    bool segment_raw(uint8_t _digit0, uint8_t _digit1):左位显示段码_digit0,右位显示段码_digit1

    bool segment_hex(uint8_t _value):按十六进制显示_value

    bool segment_dec(uint16_t _value):按十进制显示_value。如果是三位数,将四舍五入保留到十位,显示百位和十位,显示右位小数点。

    bool segment_frac(uint16_t _int, uint8_t _dec)_int为整数部分,_dec为十分位。如果_dec大于等于10,返回false。如果_int是一位数,显示_int._dec;否则按segment_dec显示,未显示出的位会四舍五入。

    以下函数根据数据控制显示:

    void segment_display(segment_t _digit):根据当前的数据显示_digit位,可用于动态扫描。

    void segment_off():关闭数码管,不显示任何位。

    void segment_auto():使用定时器2中断,自动进行动态扫描。当使用自动动态扫描时,6和7两引脚不能用于输出方波。

     

    lcd.h

    <lcd.h>提供了控制LCD1602显示屏的函数。显示屏从第一行开始显示,一行满自动换行,超过显示区域自动将所有内容上移一行。

    LCD屏与数码管不能同时使用。

    void lcd_init(pin_t _exout7):初始化LCD,需要将Ext Out 7连接到一个引脚上。

    void lcd_clear():清屏。

    void lcd_set_status(bool _on, bool _cursor, bool _blink):设置LCD开关、光标开关、光标模式(默认LCD开,光标开,闪烁),可用宏:

    • LCD_OFF:LCD关;

    • LCD_ON:LCD开。

    • LCD_CURSOR_OFF:光标关;

    • LCD_CURSOR_ON:光标开。

    • LCD_CURSOR_STEADY:光标常亮;

    • LCD_CURSOR_BLINK:光标闪烁。

    void lcd_print_char(char _c):打印一个字符。' '对齐到4格,' '换行(显示内容不上移,直到下次打印),' '回到行首。

    void lcd_print_string(const char* _s):打印字符串。

    void lcd_print_int(ptrdiff_t _i):以十进制打印数字,带符号。

    void lcd_print_hex(size_t _i):以十六进制打印数字,不包含0x。

    void lcd_print_line():换行(如果光标位于第二行,显示内容上移)。

    lcd_align_t:LCD打印对齐方式类型

    • LCD_ALIGN_OFF:取消对齐;

    • LCD_ALIGN_LEFT:左对齐;

    • LCD_ALIGN_RIGHT:右对齐。

    void lcd_set_align(lcd_align_t _dir, uint8_t _len, char _fill):设置对齐方式、对齐长度、填充字符。

     

    buzzer.h

    <buzzer.h>提供了控制板载蜂鸣器的函数。

    BUZZER_COUNT:蜂鸣器引脚数量。

    wave_t buzzer_pin[]:蜂鸣器连接引脚。

    void buzzer_init(wave_t _pos, wave_t _neg):初始化蜂鸣器。

    void buzzer_tone(uint16_t _freq0, uint16_t _freq1):播放两个频率的声音,0表示关闭。

    void buzzer_off():蜂鸣器静音。

     

    uart.h

    <uart.h>提供了UART读写函数。发送与接受都没有缓冲区。

    uart_mode_t:UART工作模式类型

    • UART_TX:发送;

    • UART_RX:接受;

    • UART_DUPLEX:双工。

    void uart_init(uart_mode_t _mode):初始化UART,波特率38400,8数据位,偶校验,1停止位。

    void uart_print_char(char _c):打印字符。

    void uart_print_string(const char* _s):打印字符串。

    void uart_print_int(ptrdiff_t _i):以十进制打印数字,带符号。

    void uart_print_hex(size_t _i):以十六进制打印数字,不包含0x。

    void uart_print_line():输出' '

    uart_align_tUART_ALIGN_OFFUART_ALIGN_LEFTUART_ALIGN_RIGHTvoid uart_set_align(uart_align_t _dir, uint8_t _len, char _fill):与LCD中的对齐相同。

    char uart_scan_char():读取字符。

    uint8_t uart_scan_string(char* _dst):读取字符串,直至空白字符。
    uint8_t uart_scan_string_n(char* _dst, uint8_t _count):读取字符串,至多_count字节(不包括终止符'')。

    ptrdiff_t uart_scan_int():读取一个整数,可接受十进制数、0b开头的二进制数、0x开头的十六进制数(大小写均可)。

  • 相关阅读:
    Windows常用命令
    路由器命令基础使用
    《计算机网络》-CCNA命令大全
    Cisco 2960交换机配置
    vscode使用技巧
    Luogu 3321 [SDOI2015]序列统计
    Luogu 3702 [SDOI2017]序列计数
    CF 990 Educational Codeforces Round 45
    Luogu 4705 玩游戏
    CF 438E The Child and Binary Tree
  • 原文地址:https://www.cnblogs.com/jerry-fuyi/p/12060013.html
Copyright © 2020-2023  润新知