AVR单片机教程——EasyElectronics Library v1.3手册
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
主要更新:
其实没有必要用新版本号,但我不想再用写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
参数,则不会执行任何动作,返回void
或0
。
PIN_x
:宏常量,x
为0
~9
或A
~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_x
:x
为0
~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_x
:x
为0
到3
,表示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_x
:x
为0
~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_x
:x
为0
~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_pin
:pin_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)
:打印一个字符。'\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()
:换行(如果光标位于第二行,显示内容上移)。
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。
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'
。
uart_align_t
、UART_ALIGN_OFF
、UART_ALIGN_LEFT
、UART_ALIGN_RIGHT
、void 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
字节(不包括终止符'\0'
)。
ptrdiff_t uart_scan_int()
:读取一个整数,可接受十进制数、0b
开头的二进制数、0x
开头的十六进制数(大小写均可)。
AVR单片机教程——EasyElectronics Library v1.3手册的更多相关文章
- AVR单片机教程——EasyElectronics Library v1.0手册
更新:EasyElectronics Library v1.1手册 索引: bit.h delay.h pin.h tone.h pwm.h uart.h adc.h led.h rgbw.h seg ...
- 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. ...
- AVR单片机教程——EasyElectronics Library v1.2手册
索引: bit.h delay.h pin.h wave.h pwm.h led.h rgbw.h button.h switch.h segment.h 主要更新: 添加了segment.h的文档: ...
- AVR单片机教程——开发环境配置
今天去交大密院参观了设计展,无外乎两个主题:Arduino.Python. 关于Python,我印象最深的是一位Python程序员的话:你要硬核的话,可以去那边看Java. 拜托,都9102年了,Ja ...
- AVR单片机教程——序言
我一直觉得现在的网络环境对电子技术的学习有一点问题,但始终无法确切地指出,更何况网络上相关资源已经那么丰富. 但我觉得是问题的,无论它到底是不是问题,对我来说总归是一个问题.我学习也不算深入,很多东西 ...
- AVR单片机教程——数码管
先解答之前一个思考题:如果不把引脚配置为输出而写高电平,连接LED会怎样? 实验结果是,LED会亮,但相比于输出高电平的情况,亮度很低.这是为什么呢? 通过上一篇教程我们知道,引脚输入输出模式是由寄存 ...
- AVR单片机教程——按键状态
好久没更新了,今天开始继续,争取日更. 今天我们来讲按键.开发板的右下角有4个按键,按下会有明显的“咔嗒”声.如何检测按键是否被按下呢?首先要把按键或直接或间接地连接到单片机上.与之前使用的4个LED ...
- AVR单片机教程——点亮第一个LED
做了这么多准备,我们终于可以开始用开发板做点事了. 单片机编程与计算机编程有一些不同点.程序都要有零个或多个输入.一个或多个输出,这是两者都有的,但是计算机编程的输入输出主要靠控制台,而单片机没有. ...
- AVR单片机教程——PWM调光
本文隶属于AVR单片机教程系列. PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时 ...
随机推荐
- Django 基础篇(一)
创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位 ...
- C++中list的用法总结
list简介 list 也是顺序容器的一种.只是list 是一个双向链表.使用 list 需要包含头文件 list.双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素,如下图所 ...
- java 中类初始化,构造方法,静态成员变量,静态块的加载顺序
1.编译和运行概念要搞清:编译即javac的过程,负责将.java文件compile成.class文件,主要是类型.格式检查与编译成字节码文件,而加载是指java *的过程,将.class文件加载到内 ...
- shell for循环输出目录下的文件名
test.sh文件: #!/bin/bash for file in `ls`;do echo $file done 输出 bogon:test macname$ chmod +x test.sh b ...
- 【CSP膜你赛】柠檬的密码(manacher 二分 单调性 st表)
题目描述 Lemon觉得他需要一个复杂的密码来保证他的帐号的安全.他经过多日思考,决定使用一个长度为奇数的回文串来作为他的密码. 但是这个回文串太长了,Lemon记不住,于是Lemon决定把它记在本 ...
- java并发编程(一)线程状态 & 线程中断 & 线程间的协作
参考文章: Java线程的5种状态及切换:http://blog.csdn.net/pange1991/article/details/53860651 线程的5种状态: 1. 新建(NEW):新创建 ...
- centos如何添加ftp目录
检查Centos服务器中是否安装了vsftpd rpm -qa |grep vsftpd 如果没有显示则没有安装 2.安装vsftpd yum -y install vsftpd 3.打开vsftpd ...
- LocalDate/LocalDateTime/LocalTime与Date的互转
// 01. java.util.Date --> java.time.LocalDateTime public void UDateToLocalDateTime() { java.util. ...
- SSL证书原理讲解
一直以来都对数字证书的签发,以及信任等事情一知半解.总算有个闲适的周末来总结和深入一下相关的知识. CA: CA(Certificate Authority)是证书的签发机构,它是负责管理和签发证书的 ...
- fragment原来的页面切换被重新实例化,无法继续保持上一次的内容。只让它执行一次
最好的方法是: 定义类.静态变量的方式 保存数据,从这里取. 用网上其他人的方法,fragment切换速度太快会报错 child view 没有从parent view 中移除: 只执行一次,定义一个 ...