Jerry @DOA&INPAC, SJTU

Working out everything from the first principles.

导航

AVR单片机教程——EasyElectronics Library v2.0手册

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

 

adc.h

bit.h

button.h

buzzer.h

dac.h

delay.h

ee.h

exin.h

exout.h

lcd.h

ldr.h

led.h

pin.h

pot.h

print.h

pwm.h

rgbw.h

rotary.h

segment.h

switch.h

timer.h

tone.h

uart.h

wave.h

 

主要更新:

  • 由于修改了一些接口,与之前版本不完全兼容,主版本号更新为2

  • 正式支持中断,初步使用回调;

  • UART支持同步与异步IO,缓冲区大小64字节或256字节;

  • 完成了所有板载资源的库,包括扩展输入输出和DAC;

  • 终于开源了,你可以随意修改与使用;

  • 不出意外的话,不会再更新了。

下载

 

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值。

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参考电压。

 

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次。

nop():不执行任何操作的汇编语句。

 

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调用开始,该按键是否被按下(只管两次调用时的状态,无法检测中间过程)。

 

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():蜂鸣器静音。

 

dac.h

<dac.h>提供了控制板载10位DAC的函数。

void dac_init():初始化DAC,输出0V。

void dac_write_10bit(uint16_t _value):输出10位精度的模拟电压。

void dac_write(uint8_t _value):输出8位精度的模拟电压。

 

delay.h

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

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

 

ee.h

<ee.h>包含了此库中的所有头文件。

 

exin.h

<exin.h>用于从板载74HC165读取8个扩展输入的电平。

void exin_init():初始化74HC165读取。

uint8_t exin_read():从8个扩展输入引脚读取电平并返回。

 

exout.h

<exout.h>用于向板载74HC595写入8个扩展输出的电平。

void exout_init():初始化74HC595写入。

void exout_write(uint8_t _data):向8个扩展输出写入电平。

 

lcd.h

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

LCD屏占用了8个扩展输出和3个显示控制引脚。

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

void lcd_clear():清屏。

lcd_status_t:枚举类型,表示3类LCD状态,可通过|运算符连接。

  • LCD_OFF:LCD关;

  • LCD_ON:LCD开。

  • LCD_CURSOR_OFF:光标关;

  • LCD_CURSOR_ON:光标开。

  • LCD_CURSOR_STEADY:光标常亮;

  • LCD_CURSOR_BLINK:光标闪烁。

void lcd_set_status(lcd_status_t _status):设置LCD开关、光标开关、光标模式(默认LCD开,光标开,闪烁)。

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

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():换行(如果光标位于第二行,显示内容上移)。

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

 

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。

 

pin.h

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

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

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

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

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

  • INPUT:表示输入;

  • OUTPUT:表示输出。

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

pin_level_t:枚举类型,表示引脚电平。

  • 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引脚电平是否为高。

 

pot.h

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

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

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

 

print.h

<print.h>提供了格式化输出的工具。

align_dir_t:打印对齐方式类型。

  • ALIGN_OFF:取消对齐;

  • ALIGN_LEFT:左对齐;

  • ALIGN_RIGHT:右对齐。

 

pwm.h

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

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

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

 

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。

 

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():两次调用之间编码器是否被旋转。

 

segment.h

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

数码管占用了8个扩展输出。

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]:09、AF的段码。

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():关闭数码管,不显示任何位。

 

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调用开始,该开关状态是否被改变(只管两次调用时的状态,无法检测中间过程)。

 

timer.h

timer.h可用于快速地配置一个1ms间隔的定时器中断。使用定时器1。

timer_callback_t:函数指针类型,用于回调。

void timer_init():初始化定时器1中断。

void timer_register(timer_callback_t _func):设置定时器中断的回调函数。

 

tone.h

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

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

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

 

uart.h

<uart.h>提供了UART读写函数,可配置为同步或异步。

uart_mode_t:UART收发工作模式类型,可用|运算符连接。

  • UART_TX:发送,同步;

  • UART_TX_64:发送,异步,64字节缓冲区;

  • UART_TX_256:发送,异步,256字节缓冲区;

  • UART_RX:接收,同步,1字节缓冲区;

  • UART_RX_64:接收,异步,64字节缓冲区;

  • UART_RX_256:接收,异步,256字节缓冲区。

void uart_init(uart_mode_t _mode, uint16_t _baud):初始化UART,8数据位,偶校验,1停止位,波特率为_baud * 100

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():输出'\n'

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

char uart_scan_char():等待缓冲区非空并读(但不取出)一个字符。

void uart_pop_char():从缓冲区中取出一个字符。

uint8_t uart_scan_string(char* _dst):读取字符串,直至空白字符。

uint8_t uart_scan_string_n(char* _dst, uint8_t _count):读取字符串,至多_count字节(不包括终止符'\0'),行为与strncpy类似。

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

uart_predicate_t:谓词函数指针类型。

uart_callback_t:回调函数指针类型。

void uart_register(uart_predicate_t _pred, uart_callback_t _callback):注册回调(仅异步)。当总线接收到字符时,若谓词不存在或返回true,则调用回调函数。

 

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模式。

 

posted on 2020-01-30 21:04  Jerry_SJTU  阅读(803)  评论(1编辑  收藏  举报