1、AVR学习笔记之点亮LED
- 格式:pdf
- 大小:132.08 KB
- 文档页数:3
AVR学习笔记前言:学习一块单片机,我们要几项准备工作:1.开发软件(熟悉开发软件操作流程,基本上开发软件都差不多的,学会了一款,再学其它的就会很顺手了(新建工程、新建设计文件、把源文件加到工程里面、最后设置一些参数)2.编程语言(这个就不用说了,先学语法规则,能够熟练掌握到自己写的代码没有语法错误,然后再逐步把自己的想法驾驭到编程语言上)3.硬件(硬件包括的范围很广,不仅包括你所要学的单片机还有单片机的外围电路所用到的器件),最好要学一款仿真软件。
我们始终要记住学单片机绝对不可以纸上谈兵,一定要实践,就是把自己所写的代码下载到板上,看看实际效果。
开发板可以买,也可以自己做!我喜欢自己做。
实验一:点亮发光二极管1.avr单片机的i/o端口1)学习单片机的主要任务就是了解、掌握单片机i/o端口的功能,以及如何正确设计这些端口与外围电路的连接,从而能够组成一个嵌入式系统,并编程、管理和运用他们完成各种各样的任务。
2)atmega16有4个8位的双向i/o端口pa、pb、pc、pd,他们对外对应32个i/o引脚,每一位都可以独立地用于逻辑信号的输入和输出。
在5v工作电压下,输出高点平时,每个引脚可输出达20ma的驱动电流;而输出低电平时,每个引脚可吸收最大为40ma的电流,可以直接驱动发光二极管(一般的发光二极管的驱动电流为10ma)和小型继电器等小功率器件。
avr大部分的i/o端口都具备双重功能(有的还有第三功能)。
其中第一功能是作为数字通用i/o接口使用,而复用的功能可分别与片内的各种不同功能的外围接口电路组合成一些可以完成特殊功能的i/o口,如定时器、计数器、串行接口、模拟比较器、捕捉器、usart、spi等。
3)avr单片机的每组i/o口都搭载存有三个8为寄存器,分别就是:方向掌控寄存器ddrx、数据寄存器portx、输出插槽寄存器pinx(x=a/b/c/d).i/o口的工作方式和整体表现特征由这三个i/o寄存器掌控。
AN2387使用ATtiny1617上独立于内核的可配置定制逻辑实现夜灯特性•减少CPU使用•使用可配置定制逻辑(Configurable Custom Logic,CCL)模块实现独立于内核的操作•事件系统•TCA0——16位定时器/计数器类型A•SPI0——串行外设接口•AC0——模拟比较器•DAC——数模转换器•EEPROM数据存储器•被动红外探测器•环境光线传感器•16个智能可寻址RGB LED简介本应用笔记介绍了如何使用独立于内核的可配置定制逻辑(CCL)对不同传感器的输入进行滤波以及如何使用Microchip AVR®器件、被动红外(PIR)传感器、环境光线传感器和16个可寻址RGB LED创建特定通信协议。
许多外设被配置为可不依赖于CPU协同工作。
仅当环境足够暗并且PIR传感器前有运动时,灯才会点亮。
该实现使用AVR可配置定制逻辑模块来确定何时发生这种情况。
更新可寻址RGB LED可利用定时器/计数器PWM生成、SPI和CCL来生成特定的单行串行协议。
AN2387目录特性 (1)简介 (1)1.相关器件 (3)1.1.tinyAVR 1系列 (3)2.组件 (4)2.1.STK600 (4)2.2.被动红外探测器 (4)2.3.环境光线传感器 (5)2.4.智能控制LED (5)3.实现 (7)3.1.系统概览 (7)3.2.连接 (7)L配置 (9)3.3.1.LUT0配置 (9)3.3.2.LUT1配置 (10)3.4.程序流 (12)4.从Atmel START获取源代码 (14)5.版本历史 (15)Microchip网站 (16)变更通知客户服务 (16)客户支持 (16)Microchip器件代码保护功能 (16)法律声明 (17)商标 (17)DNV认证的质量管理体系 (18)全球销售及服务网点 (19)相关器件1.相关器件本章列出了本应用笔记的相关器件。
1.1 tinyAVR 1系列下图给出了tinyAVR® 1系列,绘制了不同引脚数型号与存储器大小的关系:•垂直向上移植无需修改代码,因为这些器件的引脚彼此兼容,可提供相同甚至更多的功能。
第02课、点亮一个发光二极管北方蓝芯科技()在这节课我们将做一个点亮一个发光二极管的实验,这个实验虽然简单,却完全包扩了51单片机的整个开发过程。
通过这个实验我们能学会下面三个知识点:1、Keil软件的使用。
2、STC下载软件的使用。
3、单片机C语言的基本框架。
4、单片机IO口的基本编程方法。
2.1 实验原理介绍我们想实现的是用单片机控制点亮一个发光二级管,由第01课的学习我们知道,单片机的IO 口只能输出高电平(大约5V)和低电平(大约0V),在单片机内部表示就是1和0。
由下面的原理图我们知道,只要p1.0输出一个‘0’就可以了。
那么用C语言怎么表示就是P1 = 0xFE,0x表示这是十六进制数,换算成二进制技术11111110。
由此我们可以看出这条语句使P1口中只有P1.0输出低电平,而从P1.1到P1.7都输出高电平。
结合我们学习的基本元器件知识,观察上图我们容易知道,当我们通过编写程序在P1.0口输出一个低电平“0”时,将点亮发光二极管。
参考程序如下:#include "reg51.h" //包含头文件void main() //主函数{P1 = 0xfe; //低电平驱动发光二极管while(1) //进入while死循环{}}上面这个程序虽然简单,但却能51单片机C员编程的基本结构。
首先必须用#includes”reg51.h”来包含51单片机的头文件,这个头文件里是单片机内部各种寄存器的定义,没有这个头文件,你写的C程序就无法和单片机硬件联系起来。
void main()是主函数,是整个程序开始执行的地方,没有主函数程序就无法执行。
现在我们知道了在基本的IO编程方法。
举一反三,我们也能写出P2=0xf0,P1=0xEA,P3=0x55这样的语句,我们可以随意控制IO口输出高低电平了。
下面我们一步一步按顺序来做这个实验。
2.1 用Keil建立一个C语言项目51单片机的编程语言常用的有二种,一种是汇编语言,一种是C语言。
51单片机(入门保姆级教程)——点亮一个LED灯一、为什么要学习单片机?作为一名工科学生,进入大学参加各种活动,例如:电子设计大赛、寻迹车比赛、LED电子灯比赛以及各种各样的微控、弱控强电路等,都离不开单片机的身影。
电路、c语言、数电、模电、计算机控制等知识的学习,给单片机的学习增添了软辅助,但我认为,学习单片机更多的是自己的兴趣、爱好,正如“程序虐我千百遍,我视程序为初恋”。
此外,学习单片机知识,从最基础的51单片机入门学习,可以为我们后面学习STM32、ARM微控器等其微控制器的学习奠定知识基础和积攒一定的经验,给自己的大学及以后的职业道路增加一丝色彩。
二、首先了解什么是单片机?单片机又称单片微控制器,把一整个计算机系统集成到一个芯片上,当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
一块芯片就成了一台计算机。
体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单片机属于一种集成式电路芯片。
主要包含CPU、只读存储器ROM和随机存储器RAM、时钟电路、中断系统和定时/计数器及各种输入输出IO 口构成,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
三、如何快速、高效学习单片机?多学习;查阅原始资料,即单片机手册和各个模块手册。
多动手;代码的学习主要是自己多动手进行练习,孰能生巧。
多思考;一个程序的实现往往有多种不同的方式,但最基本的原理保持不变,只是每个程序员的习惯和书写形式不一,复杂程度和代码的可移植性不一样,万变不离其原理。
四、准备资料和软件(提前了解,间接性、针对性学习印象比较深刻)4.1相关基础知识单板的基本知识、电路的基本电路知识、数字电子技术基础知识、模拟电子技术基础知识、选用模块的逻辑知识、电力电子知识(模块化弱控强应用电路后buck、boost电路等)4.2基础软件推荐keil5:编写程序代码proteus模拟仿真:可以进行模型构建及仿真演示,为实物排除问题Altium Designer:进行原理图绘制,设计自己专属的pcb板STC-ISP:将keil5生成的He某文件烧录进单片机内B站:可以在上面进行部分程序的学习5.1LED原理和知识5.2点亮一个LED灯具体代码#include <reg52.h> //此文件定义单片机的一些特殊功能寄存器sbit led=P2^0; //将单片机的P2.0端口定义为led(当然也可以定义其他端口,欢迎尝试)void main( //每一个main.c中必须包含一个主函数,程序从这里开始执行{while(1) //while死循环,程序将在这里进行不断重读执行 {led=0; //P2.0端口设置为低电平,根据二极管原理点亮LED灯}}注:其中对应行都有注释,大家移植后可以删除5.3包含/区分/学习知识点int main和void main的区别(掌握)有一定c语言知识的同学应该知道int是需要返回的,在单片机里也一样。
小梅哥和你一起深入学习FPGA之点亮LED灯(上)关键词: FPGA , LED在之前更新的目录里面,并没有安排这个实验,第一个实验应该是独立按键的检测与消抖。
可是,当小梅哥来做按键消抖的实验时,才发现没有做基本的输出设备,因此按键检测的结果无法直观的展示出来。
也算是为后续实验做铺垫吧,第一个实验就安排成了点亮LED灯。
一、实验目的实现4个LED灯的亮灭控制二、实验原理LED灯的典型电路如下2-1所示,我们控制led灯的亮灭,实质就是去控制FPGA的IO输给LED负极一个低电平或者高电平。
从图中可知,我们给对应的led负极上一个低电平,就会有对应的电流通过电阻,流过led灯,于是LED灯就会被点亮;当给led负极一个高电平时,led两端电压相等,因此没有电流流过,led则呈熄灭状态。
图2-1 led灯典型电路三、硬件设计本实验的硬件电路即如图2-1所示,读者一看即懂,因此本节内容略。
四、架构设计虽然本实验只是一个简单的点亮led灯实验,整个实验代码不过四五行,但是为了遵循小梅哥一直喜欢的那种模块化的设计理念,因此本设计还是将led的驱动做成子模块的形式。
本实验由两个模块组成,分别为led驱动模块和顶层例化模块,可能看过其它开发板资料的同学会觉得这样反而增加了系统的复杂程度,但是,小梅哥如此设计必定有我的道理,图4-1为本实验的模块组织结构图4-1 led实验模块组织结构图由图可知本实验仅有n个输出端口,对应了n个led灯(为了代码的可移植性,这里并没有将led的个数限定死,而是采用了参数化的设计,因此,在实际使用过程中,就可根据实际不同的需要,自由的调整led的个数)。
在modelsim仿真过程中,所有信号必须要有复位初始值,因此复位信号(Rst_n)必不可少。
可能读者这里会发现,与我昨天所写的端口命名规范有出入。
如果按照我所出的规范中来命名的话,则应该将复位信号命名为Global_Rst,对于这个问题,暂时小梅哥不做深入解说,其实严格意义上来说,这里的这个Rst_n应该只能算是一个内部信号,该信号在实际工程应用中往往由锁相环产生。
#include <iom16v.h>#include <macros.h>int i,j,k,m,n,b,ms;void delay(ms) //延时子程序{for(i=0;i<ms;i++)for(j=0;j<1000;j++);}void led_on(void) //LED全部点亮子程序{DDRA=0xFF;PORTA=0xFF;delay(150);}void led_off(void) //LED全部熄灭子程序{DDRA=0xFF;PORTA=0x00;delay(150);}void led_01(m) //LED_01:左右依次逐个点亮LED子程序{PORTA=BIT(m);delay(100);}void led_02(m) //LED_02:左右依次逐个点亮LED子程序{PORTA=BIT(m)|BIT(m-1);delay(100);}void led_03(m) //led_03:左右依次间隔点亮LED子程序{PORTA=BIT(m)|BIT(m-2);delay(100);}void led_04(m) //led_04:左右连续点亮LED子程序{PORTA|=BIT(m);delay(100);}void led_05(m) //led_05:左右连续熄灭LED子程序{PORTA&=~BIT(m);delay(100);}void led_06(m) //led_06:左右散开/收拢LED子程序{switch(m){case 0:PORTA=0x18;delay(100);break;case 1:PORTA=0x24;delay(100);break;case 2:PORTA=0x42;delay(100);break;case 3:PORTA=0x81;delay(100);break;default:break;}}void main(void){//端口设置DDRA=0xFF; //PA设置为输出PORTA=0x00; //PA清0DDRB=0x00; //PB、PC、PD端口不用时,设置为上拉PORTB=0xFF;DDRC=0x00;PORTC=0xFF;DDRD=0x00;PORTD=0xFF;//程序自检,全部LED闪烁1次led_on();led_off();while(1){//led_01:左右依次逐个点亮LED,共做2次for(k=0;k<2;k++){for(m=0;m<8;m++)led_01(m);for(m=6;m>0;m--)led_01(m);}//led_02:左右依次两个点亮LED,共做2次for(k=0;k<2;k++){for(m=1;m<8;m++)led_02(m);for(m=6;m>1;m--)led_02(m);}//led_03:左右依次间隔点亮LED,共做2次for(k=0;k<2;k++){for(m=2;m<8;m++)led_03(m);for(m=5;m>2;m--)led_03(m);}//led_04:左右连续点亮/熄灭LED,共做2次for(k=0;k<2;k++){led_off();for(m=0;m<8;m++)led_04(m);for(m=7;m>0;m--)led_05(m);led_off();led_on();led_off();for(m=7;m>=0;m--)led_04(m);for(m=0;m<8;m++)led_05(m);led_off();led_on();led_off();}//led_06:左右散开/收拢点亮LED,共做8次for(k=0;k<8;k++){for(m=0;m<4;m++)led_06(m);for(m=2;m>0;m--)led_06(m);}} }。
基于AVR单片机的LED自适应调光传感系统随着LED照明技术的发展,对LED自适应调光技术的需求更加强烈。
本文以AVR单片机中的ATmeage16作为控制器,利用基于I2C(Inter Integrated Circuit)总线的光传感芯片TSL2561采集室内环境光照度,采用脉宽调制(Pulse Width Modulation-PWM)方式调节LED恒流驱动IC(BP2808、LM3404HV、LM3402HV 等可根据功率需要选择),进而调节LED的发光亮度,最终维持室内环境光照度在一个设定的水平。
同时利用红外人体感应模块采集室内人体信号,实现LED 灯开启和关断的智能控制。
使用LCD1602液晶屏实现室内照度,再加按键实现LED亮度的手动控制,最后使用串口通信实现与上位PC的实时通信与控制。
本文完成了整套系统的硬件设计和软件编程,重点介绍了ATmeage16通过I2C总线读取光传感器芯片TSL2561数据、传感器数据转换为实际的室内环境照度、PWM信号生成和输出。
目录1 引言 (2)1.1 LED的国内外研究现状 (2)1.2系统流程图 (3)2 LED自适应调光传感系统的硬件设计 (4)2.1 自适应调光系统硬件设计 (4)2.2 TSL2561光强传感器的硬件连接及介绍 (5)2.3 PWM波形的发生及恒流IC的输出 (6)2.3.1PWM波形发生 (7)2.3.2恒流IC—BP2808 (9)2.4 LCD1602液晶显示的链接及介绍 (10)2.5 红外人体感应模块介绍 (13)2.6 串口通讯及外部控制中断 (15)3 LED自适应调光传感系统的软件设计 (18)3.1 TSL2561的I2C通讯及照度的计算 (18)3.2 LCD1602的通讯及显示 (21)3.3 系统条件判断软件编写 (23)4 系统总体设计介绍 (24)4.1 系统性能特点说明 (24)4.2 系统总体电路图 (24)错误!未找到引用源。
21IC-AVR 学习笔记,AVR 单片机教程AVR 学习笔记一、基本输出实验(电路原理图)
本实验包括七个例程:1、点亮LED 试验,2、流水灯试验,3、蜂鸣器试验,4、1 位数码管显示试验,5、四位数码管显示试验,6、1602 液晶显示试验,7、12864 液晶显示实验。
AVR 学习笔记二、基本输入和外部中断实验
本实验包括二个例程:1、检测按键,实现按键控制LED 的亮灭,2、外部中断实验,利用中断检测按键,并在数码管上显示。
AVR 学习笔记三、定时记数器0 实验
本实验包括五个例程:1、定时/计数器0 的计数实验,2、定时/计数器0 的定时实验,3、定时/计数器0 的比较匹配(CTC)实验,4、定时/计数器0 的快速PWM 实验,5、定时/计数器0 的相位修正PWM 实验。
AVR 学习笔记四、定时记数器1 实验
由于在定时/计数器0 的实验中我们已经学会了定时/计数器的定时、计数、PWM 等基本功能的使用方法。
而单片机中的定时/计数器的基本功能大致上是一样的。
主要区别只是在于对不同寄存器的设置。
所以在定时/计数器1 的。