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~9A~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>定义了设置数码管显示数据与控制显示的函数。

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

?

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

?

原文地址:https://www.cnblogs.com/jerry-fuyi/p/12242546.html

时间: 2024-10-05 04:05:53

AVR单片机教程——EasyElectronics Library v2.0手册的相关文章

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

索引: bit.h delay.h pin.h wave.h pwm.h led.h rgbw.h button.h switch.h 主要更新: 用枚举类型替换了大部分宏定义: 添加了wave.h.pwm.h.switch.h的文档. 头文件与静态库文件下载:release. 1. bit.h <bit.h>定义了用于位操作的宏函数,适用于8或16位整数. set_bit(r, b):将r的第b位置为1. reset_bit(r, b):将r的第b位置为0. read_bit(r, b):读

AVR单片机教程——定时器中断

本文隶属于AVR单片机教程系列. ? 中断,是单片机的精华. 中断基础 当一个事件发生时,CPU会停止当前执行的代码,转而处理这个事件,这就是一个中断.触发中断的事件成为中断源,处理事件的函数称为中断服务程序(ISR). 中断在单片机开发中有着举足轻重的地位--没有中断,很多功能就无法实现.比如,在程序干别的事时接受UART总线上的输入,而uart_scan_char等函数只会接收调用该函数后的输入,先前的则会被忽略.利用中断,我们可以在每次接受到一个字节输入时把数据存放到缓冲区中,程序可以从缓

AVR单片机教程——UART进阶

本文隶属于AVR单片机教程系列. ? 在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用.在这一篇教程中,我们将从硬件与软件等各方面更深入地了解UART. USART组件 一直在讲的UART其实是USART组件的一部分,USART比UART多了同步的一部分,但这一部分用得太少(我从来没用过),而且缺乏实例,所以就略过了.然而,单片机的设计者很机智地把这个鸡肋功能升华了一下,USART组件可以支持SPI模式.SPI是一种同步串行总线,

AVR单片机教程——矩阵键盘

本文隶属于AVR单片机教程系列. ? 开发板上有4个按键,我们可以把每一个按键连接到一个单片机引脚上,来实现按键状态的检测.但是常见的键盘有104键,是每一个键分别连接到一个引脚上的吗?我没有考证过,但我们确实有节省引脚的方法. 矩阵键盘 这是一个4*4的矩阵键盘,共有16个按键只需要8个引脚就可以驱动.我们先来看看它的原理. 每个按键有两个引脚,当按键按下时接通.每一行的一个引脚接在一起,分别连接到左边4个端口,称为"行引脚":每一列的另一个引脚接在一起,分别连接到右边的4个端口,称

AVR单片机教程——数字输入

我们已经学习了如何使用按键和拨动开关,不知你有没有好奇 button_down 和 switch_status 等函数是如何实现的.本篇教程带你一探究竟,让我们从按键的原理开始. 在原理图中,按键的符号如下图所示: 符号很简单,就是两个触点上方有一个动片,当按下时与两个触点接触.实际上按键内部的机械结构大体上就是这样,实现的功能是,没有按下时两端断路,按下时两端短路. 还有一种画法是这样的,即电键: 就按键内部的机械结构来说,第一种更加真实,但从电路角度来看,两者没什么区别. 但是我们的开发板上

AVR单片机教程——PWM调光

PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时,我们迫不得已使占空比为50%,因为不能让两位真正同时地显示不同的数字.但是,我们也可以有意地让LED的占空比不到100%,以降低其亮度. 占空比是可以用程序来调节的.下面的程序允许用户用按键调整蓝色LED的占空比,并通过数码管来显示. #include <ee1/ee.h> #define DUTY_MAX 9 int main()

AVR单片机教程——串口发送

到目前为止,我们的开发板只能处理很小量的数据:读取几个引脚电平,输出几个LED,顶多用数码管显示一个两位数字.至于输入一个指令.输出一条调试信息,甚至用scanf和printf来输入输出,在已经接触过的这些器件上是难以想象的.而本讲"串口发送"与下一讲"串口接收",将打开这一扇大门. 硬件 本讲的主题是UART(Universal Asynchronous Receiver-Transmitter,通用异步收发器),俗称串口.实际上串口是串行接口的统称,在单片机领域

AVR单片机教程——数码管

先解答之前一个思考题:如果不把引脚配置为输出而写高电平,连接LED会怎样? 实验结果是,LED会亮,但相比于输出高电平的情况,亮度很低.这是为什么呢? 通过上一篇教程我们知道,引脚输入输出模式是由寄存器DDRx中DDxn位控制的,可以推断出 pin_mode 函数会改变一个引脚对应的DDxn值,输入为0,输出为1,而其复位后的值为0,即输入,因此如果不把引脚配置为输出,它的模式就是输入.类似地 pin_write 函数会改变PORTxn,其值为函数的第二个参数. 所以不配置输出而写高电平的结果就

AVR单片机教程——串口接收

上一讲中,我们实现了单片机开发板向电脑传输数据.在这一讲中,我们将通过电脑向单片机发送指令,让单片机根据指令控制LED.这一次,两端的TX与RX需要交叉连接,单片机TX连接串口工具RX也是需要的,因为程序会根据指令反馈信息. 为了简单起见,我们的程序只需要控制4个板载LED.指令包含两个字节:第一个字节为r.y.g.b中的一个,分别表示红.黄.绿.蓝灯:第二个字节为0或1,表示灯不亮或亮. 然而,a2这样的指令是没有意义的,却是可能出现的.即使用户已经熟悉了这8条指令,也可能会不小心打错.我们应