AVR学习笔记

AVR学习笔记
AVR学习笔记

A VR学习笔记(基于LT_Mini_M16)

一、点亮发光二极管

一、实验内容和目的

本实验通过硬件电路和软件程序,利用A TMega16单片机来控制发光二极管的点亮和熄灭。通过此实验初步掌握单片机的I/O口功能。

二、硬件电路

1、电路分析(对照LT_Mini_M16原理图)

1)电源电路:外接稳压直流电源(最好是DC9V)加到电路的U1处,经过电容C16稳压滤波后加到稳压模块AMS1117-5.0上,然后连接到电源开关按钮S1,从开关按钮出来后经过发光二极管D9和电阻R7,再经过电容C1、C2、C3、C4、C5、C7稳压滤波后加到单片机以及各个模块的电源端。

分析:a) 电容的作用是稳压滤波,其中C1、C2、C3、C4、C5这5电容为0.1PF (俗称104电容,一般为瓷片电容)。主要作用为滤出电源电路中的高频成分;而C16、C7是电解电容,主要作用是稳压,即把电源电路中的尖峰电压拉低到正常电压水平;C16是稳定外接直流电源的电压(9V),C7是稳定AMS1117-5.0输出的5V电压。

b)稳压芯片采用ASM1117-5.0,该稳压芯片输入电压范围为6.5V-15V,输出电压稳定在5.0+0.1V,最大输出电流可达1A,可以满足一般电路需要。

c) 电源开关按钮S1的作用当然是接通和断开电源了。在此电路中S1采用的是单刀双掷开关,一旦断开电源,则电源的正负极都断开了。

d)发光二极管D9的作用是指示电源是否连接成功,如果外部电源成功的连接上,则发光二极管发光指示电源连接成功;电阻R7的作用是对发光二极管进行限流,一般发光二极管只能通过10mA左右的电流,且发光二极管上面的压降只需要1.5V左右,加到发光二极管上面的电流如果超出额定值,则会烧毁。而系统工作的电压是5V,如果全部加在发光二极管上,则发光二极管很容易就会被烧毁。所以要在电源和发光二极管之间串接一个限流电阻。该限流电阻阻值的计算:(VCC-发光二极管上的电压)/流过发光二极管的电流。一般发光二极管的压降是1.5V左右,电流为10mA左右,则可计算如下:限流电阻的阻值=(5.0-1.5)/0.01=350欧姆,一般这个阻值可以取得稍微大一些。

2)复位电路:单片机的第9脚(RESET,复位管脚)经过按钮K5连接到地。

分析:a)A VR单片机是低电平复位(51单片机是高电平复位,刚好相反)。需要单片机复位时,最少要在复位管脚加上1.5微秒的低电平,才能确保单片机正确复位。

b)按下按钮K5,复位管脚被直接拉到电源地,这样复位管脚的电平就被拉低,从而使单片机复位;一般情况下按钮按下的时间超过毫秒级别,这样就能确保单片机正确复位。

3)ISP电路(程序下载电路):ISP下载接口不需要任何的外围零件。使用双排2*5排针。

分析:a)由于没有外围零件,故PB5(MOSI)、PB6(MISO)、PB7(SCK)、复位脚仍可以正常使用,不受ISP的干扰。

b)ISP下载接口的1、3、5、7、9脚分别接单片机的PB5(MOSI)、PB6(MISO)、PB7(SCK)、复位脚;2接VCC,4、6、8、10都接在GND上。

4)晶振电路:晶体的两脚分别接单片机的12、13脚(晶体的管脚没有正负和顺序,可以随意连接),电容C11、C12分别于晶体的两脚和地连接。

分析:a)单片机的正常工作离不开稳定的时钟信号。晶体就是提供稳定时钟信号的器件。

b)A VR单片机内部集成有RC振荡器,可以为系统提供用以精度要求不高的时钟信号,这是可以不接外部晶体,利用熔丝配置,设置单片机工作与内部RC振荡器模式。这个时候可以不用连接警惕和C11、C12两个电容。

c)电容C11、C12的作用是让晶体工作的更稳定。

5)发光二极管驱动电路:单片机的PB0-PB7口分别连接到排阻的八个电阻脚,排阻的公共脚接地。

分析:a)单片机的PB0-PB7口中的任一个输出高电平(5V),则5V电压通过这个口输出到发光二极管的正极,然后通过电阻连接到地,从而构成一个放电电路。发光二极管正极加上超过1.5V的电压后,就能够点亮发光。

b)排阻的作用同样是为八个发光二极管分压限流。

2、A VR单片机的I/O端口

1)学习单片机的主要任务就是了解、掌握单片机I/O端口的功能,以及如何正确设计这些端口与外围电路的连接,从而能够组成一个嵌入式系统,并编程、管理和运用他们完成各种各样的任务。

2)A Tmega16有4个8位的双向I/O端口PA、PB、PC、PD,他们对外对应32个I/O 引脚,每一位都可以独立地用于逻辑信号的输入和输出。在5V工作电压下,输出高点平时,每个引脚可输出达20mA的驱动电流;而输出低电平时,每个引脚可吸收最大为40mA的电流,可以直接驱动发光二极管(一般的发光二极管的驱动电流为10mA)和小型继电器等小功率器件。

A VR大部分的I/O端口都具备双重功能(有的还有第三功能)。其中第一功能是作为数字通用I/O接口使用,而复用的功能可分别与片内的各种不同功能的外围接口电路组合成一些可以完成特殊功能的I/O口,如定时器、计数器、串行接口、模拟比较器、捕捉器、USART、SPI等。

3)A VR单片机的每组I/O口都配备有三个8为寄存器,分别是:方向控制寄存器DDRx、数据寄存器PORTx、输入引脚寄存器PINx(x=A/B/C/D).I/O口的工作方式和表现特征由这三个I/O寄存器控制。

方向控制寄存器DDRx用于控制I/O口的输入输出方向,及控制I/O口的工作方式为输出方式还是输入方式。

DDRx=1时,I/O口处于输出工作方式;此时数据寄存器PORTx中的数据输出到外部引脚。

DDRx=0时,I/O口处于输入工作方式;此时输入引脚寄存器PINx中的数据就是外部引脚的实际电平,通过读I/O指令可将物理引脚的真实数据读入MCU。

此外,当I/O口定义为输入时(DDRx=0),通过PORTx的控制,可使用或不使用内部的上拉电阻。(关于上拉电阻的解释请看后面附录2)

4)A VR 通用I/O端口的主要特点为:

a)双向可独立位控的I/O口

A Tmega16的PA、PB、PC、PD 四个端口都是8 位双向I/O 口,每一位引脚都可以单独的进行定义,相互不受影响。如用户可以在定义PA口第0、2、3、4、5、6 位用于输入的同时定义第1、7位用于输出,互不影响。

b)Push-Pull 大电流驱动(最大40mA)

每个I/O 口输出方式均采用推挽(关于推挽电路,请参阅附录3)式缓冲器输出,提供大电流的驱动,可以输出(吸入)

20mA的电流,因而能直接驱动LED显示器。

c)可控制的引脚内部上拉电阻

每一位引脚内部都有独立的,可通过编程设置的,设定为上拉有效或无效的内部上拉电阻。当I/O口被用于输入状态,且内部上拉电阻被激活(有效)时,如果外部引脚被拉低,则构成电流源输出电流(uA量级)。

d)DDRx 可控的方向寄存器。

A VR 的I/O 端口结构同其它类型单片机的明显区别是,A VR 采用 3 个寄存器来控制I/O端口。一般单片机的I/O 仅有数据寄存器和控制寄存器,而A VR 还多了一个方向控制器,用于控制I/O 的输入输出方向。由于输入寄存器PINx 实际不是一个寄存器,而是一个可选通的三态缓冲器,外部引脚通过该三态缓冲器与MCU 的内部总线连接,因此,读PINx 时是读取外部引脚上的真实和实际逻辑值,实现了外部信号的同步输入。

3、电路工作过程:

本实验的整个电路工作过程是:

1)将外接稳压电源连接到电路板的电源插孔P1处,按下电源开关按钮S1,将电源加到单片机上。

2)将下载器的ISP插口插到电路板的ISP插座处。下载软件到单片机内。

3)软件下载成功后,电路板上所要点亮的那个发光二极管就会点亮。

4)按下复位按钮,电路板上点亮的那个发光二极管就会熄灭,当复位按钮松开后,发光二极管再次点亮。

三、软件编写

1、使用WinA VR(GCC)开发环境。

2、文件包含:用C语言编写A VR单片机程序时,一般都要在程序的开头加上文件包含预编译指令。文件包含是将一些已经定义好的寄存器、变量、函数等添加到所要编写的程

序中,那么所要编写的程序中就可以直接使用这些定义好的寄存器、变量、函数等就可以在程序中直接使用,省去了重复定义大量经常使用的寄存器、变量、函数等的麻烦。

3、makefile文件:一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell 脚本一样,其中也可以执行操作系统的命令。

A VR单片机中的makefile文件可以使用WINA VR中的mfile工具生成。makefile文件中需要注意并修改的几点是:[单片机类型]、[目标文件名]、[C源文件名]、[系统时钟频率]。

4、A VR单片机中的端口配置寄存器:A VR单片机的I/O口是标准的三态口(高电平、低电平、高阻态这三种状态)。

1)使用A VR 的I/O 口,首先要正确设置其工作方式,确定其工作在输出方式还是输入方式。

2)当I/O 工作在输入方式,要读取外部引脚上的电平时,应读取PINxn 的值,而不是PORTxn 的值。

3)当I/O 工作在输入方式,要根据实际情况使用或不使用内部的上拉电阻。

4)一旦将I/O口的工作方式由输出设置成输入方式后,必须等待一个时钟周期后才能正确的读到外部引脚PINxn 的值。

5、程序的编写:Programmers Notepad [WinA VR],新建一个空白文档,开始编写程序。

1)首先要在程序中加入A Tmega16的I/O寄存器配置头文件:#include ,加上这个文件后,程序就可以直接使用各个寄存器的名称进行相应设置。

2)然后编写主函数程序,GCC中规定main函数必须是有整形返回值的函数,定义为int main(void)

{

此处加入具体代码

return 0;(这句话可以不要)

}

在这个例子中是用PORTA口控制发光二极管的亮灭,所以在主函数里,首先设置PORTA口相应位为输出方式,然后使端口输出低电平,先使发光二极管不亮。

我们可以直接使用C的语句对I/O 口寄存器进行操作,如:

// 定义PortA口的工作方式

PORTA = 0x00; // PA口的第0位输出“1”,LED不亮

DDRA = 0x01; // 定义PA口的第0位为输出方式

PORTA|= ~(1 << PA0); // PA口第0位输出取反

其中PA0 是GCC 中对C的扩展语句,它实现了对寄存器的位操作。这种语句在标准C 中是没有的,该扩展更加适合编写单片机的系统程序,因为在单片机的系统程序中,是经常需要直接对位进行操作的。

更加标准的C 程序可以采用以下的写法:

PORTA = 1<<(PA0) | 1<<(PA3); // PA口的第0位和第3位输出“1”,其它为“0”

这里,1<<(PA0)表示逻辑1左移0位,结果为0b00000001;而1<<(PA3) 表示逻辑1左移3位,结果为0b00001000。0b00000001在同0b00001000相与,结果为0b00001001。以上的逻辑运算不产生具体的操作指令,是由GCC在编译时运算完成,得到结果,最后只是

产生将结果赋值到PORTA寄存器的操作指令。

这种表示方式,比直接赋值0b00001001更容易理解程序的作用,在以后对外围模块功能的设置中,这种优势更加明显。

3)接着编写主循环while(1){}中的内容;while(1){}的主要作用是使程序一直在这里循环执行。因为单片机执行程序是一条一条的逐行向下执行的,执行到程序的结尾就停止了,如果想要程序能够循环执行(让程序不停的走下去),就需要在程序中加入while(1){},while(1){}是一个死循环程序,在循环体内的程序将一直执行,直到系统断电为止。

在while(1){}中把PORTA端口的相应位输出高电平,则对应的发光二极管就会点亮。

6、配置makefile文件将makefile文件和编写的程序文件放置在同一个文件夹下,在winavr中打开makefile文件。

修改makefile文件中的[单片机类型]、[目标文件名]、[C源文件名]、[系统时钟频率]为实际系统的值。在本程序中

[单片机类型]为A Tmega16(MCU = atmega16)

[目标文件名]为main(TARGET = main)

[C源文件名]SRC = $(TARGET).c

[系统时钟频率]为内部1MHz(F_CPU = 1000000)

Makefile中的其他内容不用修改。然后保存。

7、编译文件(点击tools菜单下的make all进行编译)。

8、下载程序到单片机(使用下载工具和下载软件)。

9、具体程序和makefile文件见附件。

附录1、关于复位电路的典型电路这个学习板上的复位电路非常简单,很不错。但是存在一些缺点:平时复位端口处于悬空状态,这样容易受到外界的干扰。

经典的复位电路设计如下:

R0和C0构成RC复位电路,D3(1N4148)的作用有两个:作用一是将复位输入的最高电压钳在Vcc+0.5V 左右,另一作用是系统断电时,将R0(10K)电阻短路,让C0快速放电,让下一次来电时,能产生有效的复位。

A VR处在工作状态时,按下S0按钮,复位脚拉为低电平,触发A VR单片机复位

当然,Mega16已经内置了上电复位设计。并且在熔丝位里,可以控制复位时的额外时间,故A VR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的电阻到VCC即可(R0)。为了可靠,再加上一只0.1uF的电容(C0)以消除干扰、杂波。

附录2、关于上拉电阻

一、定义:上拉电阻就是通过端口一个电阻连到电源正极,从而将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!

同理有上拉电阻也就有下拉电阻,下拉电阻的作用刚好和上拉电阻相反。

上拉是对器件注入(输入)电流,下拉是拉出(输出)电流。

二、为什么要使用上拉(下拉)电阻

数字电路一般有三种状态:高电平、低电平、高阻态。有些场何不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使端口的状态处于一个稳定的方式。

上拉电阻、下拉电阻起着稳定电路工作状态的作用:

通过上拉(下拉)电阻接电源,使端口稳定的处于高(低)电平状态,直到有低(高)电平输入使,才改变端口的电平状态;

三、上拉(下拉电阻阻值的选择)

电源电压在5V时,上拉电阻一般取值4.7K-10KΩ,下拉电阻一般取值100-470Ω。

上拉电阻阻值的选择原则包括:

1、从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。

2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。

3、对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑

以上三点,通常在4.7k到10k之间选取。对下拉电阻也有类似道理

附录3

推挽电路适用于低电压大电流的场合,广泛应用于功放电路和开关电源中。

优点是:结构简单,开关变压器磁芯利用率高,推挽电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小。

缺点是:变压器带有中心抽头,而且开关管的承受电压较高;由于变压器原边漏感的存在,功率开关管关断的瞬间,漏源极会产生较大的电压尖峰,另外输入电流的纹波较大,因而输入滤波器的体积较大。

OTL推挽输出

这是一个输出电路

按功放输出级放大元件的数量,可以分为单端放大器和推挽放大器。

单端放大器的输出级由一只放大元件(或多只元件但并联成一组)完成对信号正负两个半周的放大。单端放大机器只能采取甲类工作状态。

推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。尽管甲类放大器可以采用推挽式放大,但更常见的是用推挽放大构成乙类或甲乙类放大器。

当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。这样一来,输出高低电平时,VT3 一路和VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。供你参考。

如果输出级的有两个三极管,始终处于一个导通、一个截止的状态,也就是两个三级管推挽相连,这样的电路结构称为推拉式电路或图腾柱(Totem- pole)输出电路。当输出低电平时,也就是下级负载门输入低电平时,输出端的电流将是下级门灌入VT5。

二、让发光二极管动起来

一、实验内容和目的

本实验通过硬件电路和软件程序,利用A TMega16单片机来控制8个发光二极管轮流点

亮,实现跑马灯的功能的点亮和熄灭。通过此实验进一步掌握单片机的I/O口功能。

二、硬件电路

硬件电路和上一个实验完全相同,在此不再赘述。

排阻的作用同样是对发光二极管分压限流。

三、软件编写

1)软件编写仍然用WINA VR(GCC),makefile文件参照上一个实验,不用进行任何修改。

2)这个程序中需要用到延时程序,调用了GCC库函数中的延时函数头文件(#include )。

具体程序在附件里面。

三、让蜂鸣器发出声音

一、实验内容和目的

本实验通过硬件电路和软件程序,利用A TMega16单片机来控制蜂鸣器鸣叫。通过此实验体会A VR单片机的I/O口驱动小功率器件的功能。

二、硬件电路

硬件电路如图,I/O口连接到蜂鸣器的正极,蜂鸣器负极接地,当蜂鸣器正极加上高电平后,蜂鸣器就会鸣叫。

三、软件编写

1)软件编写仍然用WINA VR(GCC),makefile文件参照上一个实验,不用进行任何修改。

2)这个程序中需要用到延时程序,调用了GCC库函数中的延时函数头文件(#include )。

具体程序在附件里面

四、让数码管显示数字

一、实验内容和目的

本实验通过硬件电路和软件程序,利用A TMega16单片机来控制数码管显示不同的数字。通过此实验掌握单片机I/O口较为复杂的控制。

二、硬件电路

数码管的结构如下图:

一个“8”字型的显示模块用“a、b、c、d、e、f、g、p”8 个发光二极管组合而成。每个发光二极管称为一字段。LED 数码显示器有共阳极和共阴极两种结构形式,其内部电原理图如下图,在硬件电路设计和软件编写时不要混淆。

以共阴极数码管为例,由图中可以看出:如果要点亮数码管的某一段,只需将该段加上高电平,然后使数码管的COM端为低电平,那么该段就会点亮。

LED 数码管显示的基本控制原理同发光二极管的控制相同,但在具体使用时则要复杂得多。与发光二极管的控制电路相比,数码管有不同的设计和应用电路,软件的设计也各不相同,有许多技巧和变化。

本例中数码管管脚连接如下图,选用的是共阴极数码管。

单片机控制数码管位驱动电路如下图,在这个电路中三极管9013的作用有两个:1)数码管位选通开关,当三极管的基极加上高电平的时候,三极管导通,从而使数码管的位选通端口连接到地,使该位数码管选通。2)电流放大,因为一个数码管相当于由8个发光二极管构成,在第一个例子中已经讲到,一个发光二极管的导通电流为10mA,则8个数码管全部导通就需要约80mA的电流,而单片机的输出电流只有20mA左右,不足以让数码管的所有段都正常点亮,所以就需要将单片机输出端口的电流放大,三极管9013的作用就在于此。

三、单个数码管(共阴极)的显示

单个数码管的控制相对简单,将数码管的公共端接地,用单片机的一个I/O口的8位分别连接到数码管的8个段端口,分别将某一位或某几位置位或清零,就可以显示不同的字符和符号。

为了获得“0”-“F”16 个不同的字型符号,数码管各段所加的电平不同,因此I/O 输出的编码也不同。因此首先要建立一个字型与字段7段码的编码表,见下表。有了字型码对照表,就可以用软件的方式进行8段码的译码,例如要显示字符1,数码管的段b,c要加上高电平,其余a,d,e,f,g,dp要加上低电平,同时数码管的位选通端要接低电平。对照编码

表可以知道,此时只需向PA端口输出0Xa0.然后将PC口的第6位置为高电平,使三极管导通,从而将数码管0的位选通端口拉为低电平,那么数码管上就显示出字符“1”了。

三:软件编写

1)软件编写仍然用WINA VR(GCC),makefile文件参照上一个实验,不用进行任何修改。

2)这个程序中需要用到延时程序,调用了GCC库函数中的延时函数头文件(#include )。

本例中仍然是对A VR单片机的I/O口进行输出操作,比前几个例子操作稍微复杂一些。程序的基本框架是一样的。具体程序见附件。

附录:关于数制

在单片机嵌入式系统软件设计中,经常要考虑二进制、十六进制、十进制、BCD码、压缩BCD 码、八段码、ASCII 码之间的相互转换问题。人们计数习惯采用十进制,而单片机的计算、存储则为二进制形式最方便。此外传送字符用ASCII码,LED数码显示要转化成相应的7 段码等等。因此对与各种不同数制的使用和相互转换在软件设计中尤其重要,设计使用得当,可以简化程序设计和优化程序代码。

五、多位数码管的显示

一、实验内容和目的

本实验通过硬件电路和软件程序,利用A TMega16单片机来控制四位数码管显示多位数字,通过本实验掌握多位数码管的动态显示控制。

二、硬件电路

硬件电路与上个实验的电路一致,在此不再说明。

一个LED 数码管只能显示一位数字,一般在系统经常要使用多个LED 数码管,如要显示时间、温度、转速等等,在上面一位数码管控制显示的简单例子中,我们看到,一个数码管要使用A VR 的8 个I/O 口线输出段码(公共端接GND)。当使用多个数码管时,显然采用这样的控制方式有些问题,因为A VR 是不能提供太多的I/O 控制引脚的。比如系统要使用4个数码管,按上面例子中的控制方式,A Tmega16 的全部I/O 口将占用,这样其它的外围设备和电路就无法连接了。

多个数码管的显示驱动系统的实现,有多种不同的方式可以采用,而且在硬件和软件的设计上也是不同的。

多位LED 数码管显示电路按驱动方式可分为静态显示和动态显示两种方法。

采用静态显示方式时,除了在改变显示数据的时间外,所有的数码管都处于通电发光状态,每个数码管通电占空比为100%(上例中的显示方式既为静态显示)。静态显示的优点有:显示稳定,亮度高,程序设计相对简单,MCU 负担小。缺点是:占用硬件资源多(如I/O 口、驱动锁存电路等),耗电量大。

而所谓动态显示方式,就是一位一位地轮流点亮各个数码管(动态扫描方式)。对于每一位数码管来说,每隔一定时间点亮一次,所以当扫描的时间间隔足够小时,观察者就不会感到数码管的闪烁,看到的现象是所有的数码管一起发光(同看电影的道理一样)。在动态扫描显示方式中,数码管的亮度同LED点亮导通时的电流大小,每一位点亮的时间和扫描间隔时间三个因素有关。动态显示的优点有:占用硬件资源少(如I/O 口、驱动锁存电路等),耗电量小。缺点是:显示稳定性不易控制,程序设计相对复杂,MCU 负担重。

为了减轻MCU 的负担和编程的复杂性,同时简化外围电路,还可以使用专用的数码管控制器件。

在本例中采用动态显示方法实现4位数码管的显示。

具体电路连接说明如下:4个数码管的8个段都连接到单片机的PB口上,单片机的PC6、PC7、PD4、PD5分别通过三极管9013控制4个数码管的位选通端。

显示原理:将需要显示的字符的编码通过PB口输出到数码管的8个段上,然后通过控制数码管的位选通端口选择让对应位的数码管显示字符。

三:软件编写

1)软件编写仍然用WINA VR(GCC),makefile文件参照上一个实验,不用进行任何修改。

2)这个程序中需要用到延时程序,调用了GCC库函数中的延时函数头文件(#include )。

本例实现在四位数码管上显示1234四个数字。

具体程序见附件。

六、1602液晶的显示

一、实验内容和目的

本实验通过硬件电路和软件程序,利用A TMega16单片机来让1602液晶显示字符。通过此实验掌握:通过设置单片机相关I/O口的高低电平变化,从而以一定的时序来控制1602液晶的显示。

二、硬件电路

硬件电路如图,单片机的PA4、PA5、PA6分别连接液晶的寄存器选择、读写选择、输入允许这三个端口。单片机的PB口的8位连接液晶的8个数据端口。

液晶的第三个端口(VEE)是负压输出端口,在电路中通过一个可调电阻连接到地,通

过调节可调电阻的阻值变化,可以调节液晶的对比度(即字符显示的亮度)。

关于液晶的简单说明

(一)LCD的特点与分类

1.LCD 的特点

★低电压微功耗。工作电压3-5V,每平方厘米液晶显示屏的耗电量在uA级。

★平板结构。易大量生产,物理体积小,占用空间少。

★寿命长。

★光线柔和。液晶显示器是被动发光器件,90%以上是外部物体对光的反射。被动显示适合人的视觉习惯,不会引起疲劳。

★无电磁辐射。液晶显示器不会产生电磁辐射,是绿色器件。

2.LCD 显示器的分类

从液晶显示器的使用和显示内容来分,LCD 可分为字段式(笔划式),点阵字符式,点阵图形式三种。

字段式液晶显示器同LED 数码显示器有些相同点,它是以长条笔划状或一些特殊固定图形与汉字显示象素组成的液晶显示器件,简称段型显示器。段型显示器以七段显示器为常见,特殊图形与字符类的段型液晶显示器一般要到生产厂家定做。段型液晶显示器在数字仪表、计数器,家电产品中应用较多。

点阵字符式液晶显示器一般是一个功能模块,它由小面积的液晶显示屏和驱动电路组合而成。模块中内置有192 种字符、数字、字母、标点符号等可显示的字型点阵图形库,并提供可控制的并行或串行接口以及通信协议。市场上常见的有 1 行、2 行、4 行,每行可显示8、12、16、24、32个5x7 点阵字符的通用液晶显示器。

点阵图形式液晶显示器一般显示面积大于点阵式液晶显示器,点阵从80x32到1024x768不等。点阵图形式液晶显示器的显示灵活性好,自由度大,可以显示各种图形、字符和汉字等。但点阵图形式液晶显示器的控制最复杂,硬件连接线多,占用MCU 的资源也多。为了适应越来越多的液晶显示器应用,一些高性能的单片机已经将液晶显示器驱动功能集成在片内。目前国内一些厂商将驱动电路、汉字库和点阵液晶显示器屏做成一个组件模块,模块带有与MCU 通信的并行或串行接口,使用时,只要MCU 通过通信口下发相

应的控制指令就能显

示各种信息,方便了使用。

3、通用点阵字符LCD显示器应用

通用点阵字符液晶显示器是专用于显示数字、字母、图形符号和一些自定义符号的显示器。这类显示器把LCD控制器、点阵驱动器、字符存储器全做在一块PCB 板上,构成便于应用的显示器模块。这类点阵字符液晶显示器模块在国际上已经规范化,一般都采用日立公司的HD44780极其兼容电路,如SED1278、KS0066等,作为LCD 的控制器。

HD44780 具有简单而功能较强的指令集,可实现字符移动、闪烁等功能。与MCU 的数据传输可采用8 位并行或4位并行传输两种方式。可用于驱动40 * 4,16 * 1,16 * 2,16 * 4,20 * 2,20 * 4,等多种点阵字符液晶显示器。HD44780对外有14 根引脚,与MCU 的接口信号及定义见表。

本实验采用深圳锦昌电子公司的JCM1602C液晶,这种液晶是HD44780的兼容电路,管脚和指令系统与HD44780完全一致。具体的使用手册可到该公司网站下载。也可以采用其他兼容HD44780的其他液晶,控制方式和程序一样。

控制液晶显示主要原理是:将液晶的三个控制端口分别设置为不同的电平。从而将数据或命令发送到液晶的数据端口,控制液晶执行不同的操作。

本实例主要用以下几条指令控制液晶的显示:

读写检测指令、清屏指令、显示模式设置指令、显示开关控制指令、光标设置指令、光标及显示移动指令。

三、软件编写

1)软件编写用WINA VR(GCC),makefile文件参照上一个实验,不用进行任何修改。

2)这个程序中调用了GCC库函数中的延时函数头文件(#include )。

3)这个程序中涉及到了函数调用的方法。C语言中如果用到函数调用功能,被调用的函数需要先进行声明(或者将被调用函数放在调用它的函数的前面)。

4)C语言中的函数有多种形式,主要有涉及到参数调用及返回值等。经常用到的有四种:

不带参数,没有返回值的函数,声明为“void 函数名(void)”;

带参数,没有返回值的函数,声明为“void 函数名(数据类型参数列表)”;

不带参数,有返回值的函数,声明为“数据类型函数名(void)”;

带参数,有返回值的函数,声明为“数据类型函数名(数据类型参数列表)”;

5)本实验的主要流程为:

a)端口初始化:设置单片机的各个端口的输入输出状态以及电平状态。

b)液晶(LCD)初始化:设置液晶显示字符前需要进行的操作,依次为:清屏、显示模式设置、显示开关控制、光标设置。主要目的是首先清除液晶屏上原来保存的数据,使液晶屏显示内容为空,然后设置液晶显示模式,接着选择是否打开液晶显示(当然要打开显示了)以及设定光标是否显示和闪烁,最后要设置每当显示一个字符后字符地址指针加一还是减一(也就是下一个字符要显示在这个字符的左边还是右边)。

c)液晶显示字符:本实验让液晶实现三种显示效果,分别是:

●在液晶的任意位置处显示一个字符;

●在液晶上显示两行字符;

●在液晶上显示两行字符,这两行字符的显示效果是从右向左逐步移动的

6)程序中用到的函数功能都有详细的注释,请认真揣摩。

具体程序见附件。

七、12864液晶的显示

一、实验内容和目的

本实验通过硬件电路和软件程序,利用A TMega16单片机来让12864液晶显示字符和汉字。通过此实验掌握:通过设置单片机相关I/O口的高低电平变化,从而以一定的时序来控制12864液晶的显示。

二、硬件电路

硬件电路如图,单片机的PA4、PA5、PA6、PA7分别连接液晶的寄存器选择、读写选择、输入允许、工作方式选择这四个端口。单片机的PB口的8位连接液晶的8个数据端口。

液晶的第三个端口(VEE)是负压输出端口,在电路中通过一个可调电阻连接到地,通过调节可调电阻的阻值变化,可以调节液晶的对比度(即字符显示的亮度)。

液晶的第三个端口(VEE)是液晶复位端口,低电平的时候液晶复位。图中相当于直接连接到高电平,这时只能采用并口方式控制液晶显示。

本实验采用TS12864-3型液晶,这种液晶自带汉字库,可直接显示汉字,采用的驱动电路是ST7290。其他兼容ST7290电路的12864液晶都可利用此方法进行控制。

液晶使用手册见附件。

12864液晶的初始化设置与1602相似,在本实验中用到的1602和12864两种液晶的时序图是一致的,所以他们的清屏,显示设置操作是完全一样的。

12864液晶是指这种液晶有64行,每行有128个点。要显示一个完整的汉字,需要16*16的点阵,即要显示一个汉字需要16行,每行有16个点.而显示一个字符只需要8*8点阵(或者5*7点阵等)。这样12864液晶可以显示4行汉字,每行能显示8个汉字。如果显示字符的话,每行能显示16个字符。再上一个例子中,每显示一个字符需要向液晶数据端口发送一个8位的单字节字符,而一个汉字的字码有两个字节;也就是说显示一个汉字要比显示一个字符传送一个字节。

三、软件编写

1)软件编写用WINA VR(GCC),makefile文件参照上一个实验,不用进行任何修改。

2)这个程序与1602液晶的现实程序相比,基本思路和主要程序结构是相同的,所不同的只是显示的内容变多了,所以编写的显示函数稍微复杂了一些。

3)这个程序实现显示的效果是在液晶屏幕上显示4行汉字和字符:第一行显示" A VR 单片机学习板";第二行显示" 12864液晶显示";第三行显示"程序设计: 马伟力";第四行显示" https://www.360docs.net/doc/112856367.html,";

4)需要特别注意的是12864液晶的第一二三四行的地址是不连续的,实际连续顺序是1、3、2、4,第一行起始地址是0X80,结束地址是0X87,第二行起始地址是0X88,结束地址是0X8F,第三行起始地址是0X90,结束地址是0X97,第四行起始地址是0X98,结束地址是0X9F,编写程序的时候一定要弄清楚。

5)程序中用到的函数功能都有详细的注释,请认真揣摩。

具体程序见附件。

AVR单片机实验报告PCF8563

南京邮电大学 2011 /2012 学年第一学期 课程设计实验报告 模块名称A VR单片机课程设计 专业 学生班级 学生学号 学生姓名 指导教师李虹戴海鸿杨洁王明伟 日期: 2011年9月26日至 2011年10月20日

A VR单片机课程设计报告 一.课程设计目的 1.学习ATmega128单片机的仿真环境(A VR Studio)及C语言编程环境 (ICC A VR)。 2.学习ATmega128单片机的C语言编程,熟悉使用板载JTAG进行仿 真调试。 二.课程设计内容 1.基本要求: 1) 访问时钟芯片PCF8563,在LCD1602上显示年、月、日、时、分、秒,或通 过串口将时间传至PC。 2) 合理定义板上按键功能,随机设定、调整时间和日期。 2.扩展要求: 1) 闹钟功能,启动蜂鸣器鸣叫。 2)有闰年功能 三.课程设计过程 1. 设计原理: 利用A Tmega128内部的IIC,读写实时时钟芯片PCF8563内部的寄存器,通过PC显示出来,可通过按键,设置当前时间。 2. 实验原理图: 按键部分 4个独立按键,接在PD4~PD7,通过一个电阻到地,键盘按下时为低电平,释放为高电平。

实时时钟芯片PCF8563部分 实时时钟芯片PCF8563通过IIC总线连接到A Tmega128的SDA和SCL 总线上。 3.软件设计 1)思路如下:使用ATmega128内部TWI通过IIC总线读写实时时钟 芯片PCF8563内部的寄存器实现实时时钟功能,使用四个按键设置时 钟的年,月,日,时,分,秒,并把时钟显示到PC上。 2)程序流程图 3)关键代码: void PowerOnInitial(void) {

AVR studio 中断、计时器程序

本程序应用了外部中断1、0,定时器中断0, 初始显示变量uname(100000), 按下中断1显示内容减1,中断0加1,定时器每隔一秒加1 显示子函数A VR_display; 频率1M A口接数码管段选 B口接数码管位选 */ #include #include volatile unsigned long Ex_i; //定时器用的变量 volatile unsigned long uname=100000;//初始显示内容 /*=====0-9=====A-G=====*/ unsigned char table[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F /*0-7*/ unsigned char num[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //共阳极数码管的wei码0 1 2 3 4 5 6 7 8 void init_avrinter();//外部中断初始化 void init_avrtimer0();//计数器0初始化 void delay(unsigned int x);//延时函数 void AVR_display(unsigned long nnn);//显示函数 int main() //主程序 { DDRA=0xff; //设置方向寄存器为输出 DDRB=0xff; DDRD=0xff; PORTD=0xff; init_avrinter(); init_avrtimer0(); while(1) { A VR_display(uname); } } void init_avrinter()//外部中断初始化 { sei(); //开总中断

avr实验报告

通达学院 2014 /2015 学年第一学期 课程设计实验报告 模块名称A VR单片机课程设计(proteus)专业通信工程 学生班级 学生学号 学生姓名 指导教师李虹戴海鸿杨洁王明伟

AVR单片机软件设计(proteus)报告 基本内容包括: 1)总体设计原理、思路; 根据题目的要求,我们需要事先得到3种波形的信号源,并将其在程序存储器中,然后取出程序存储器里的信号源存放在atmega128的外部RAM中,并通过DAC0832输出到示波器上显示图形。采用按键方式控制输出波形,并且通过DS18B20上的温度来控制信号的频率,温度在1~10时显示2Hz,温度为11~20时显示4Hz,温度为21~30时为8Hz,温度为31~40时为15Hz,温度大于40时为19Hz。最后在LM016L上显示出输出的波形名称和温度以及频率。 2)硬件方面原理图的设计:包括使用的元器件、典型芯片的介绍;原理图的说明等 1、ATmega128 ATmega128为基于AVR RISC结构的8位低功耗CMOS微处理器。由于其先进的指令集以及单周期指令执行时间,ATmega128 的数据吞吐率高达1 MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。 2、DS18B20 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发

的温度报警触发器TH和TL、配置寄存器。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的,也就是你要做的是配置寄存器。 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 3、DAC0832 DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。DAC0832是8分辨率的D/A 转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。 3)软件方面程序流程图的设计、关键代码的说明

AVR单片机教程13—第十三课 ATMEAG16L的外部中断编程实践

—————————————————————————— 第十三课ATMEAG16L的外部中断编程实践 本教程节选自周兴华老师《手把手教你学AVR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书 实验器材,可登陆周兴华单片机培训中心网购部自助购买! Atmega16L具有多达20个中断源,这里我们进行外部中断的实验,其它的等到介绍到相关内容时可进行适当的实验。 1.外部中断0 外部中断0由引脚INT0(PIND2)触发。如果INT0引脚按照MCUCR寄存器中的ISC01、ISC00设置的方式发生跳变,则不管是否lNT0中断使能,INT0中断标志位INTF0都将置位。如果SREG 寄存 器的全局中断位I和通用中断控制寄存器GICR中的INT0中断使能位INT0置位,则单片机培训开始 执行中断程序。在进入中断服务程序时,INTF0被硬件清零。必须指出,不管INT0(PIND2)引脚 方向位设置如何,只要INT0引脚发生规定的跳变,都会触发中断。中断标志位INTF0只在满足发生 中断的条件时置位,一旦条件变化,INTF0被硬件清零。向INTF0位写“1”也会对其清零。 2.外部中断1 外部中断0由引脚INT1(PIND3)触发。如果INT1引脚按照MCUCR寄存器中的ISC11、ISC10设置的方式发生跳变,则不管是否lNT1中断使能,INT1中断标志位INTF1都将置位。如果SREG 寄存 器的全局中断位I和通用中断控制寄存器GICR中的INT1中断使能位INT1置位,则开始执行中断程 序。在进入中断服务程序时,INTF1被硬件清零。必须指出,不管INT1(PIND3)引脚方向位设置 如何,只要INT1引脚发生规定的跳变,FPGA培训都会触发中断。中断标志位INTF1只在满足发生 中断的条件时置位,一旦条件变化,INTF1被硬件清零。向INTF1位写“1”也会对其清零。 3.外部中断2 外部中断2由引脚INT2(PINB2)触发。如果INT2引脚按照MCUCR寄存器中的ISC2设置的方式发生跳变,则不管是否lNT2中断使能,INT2中断标志位INTF2都将置位。如果SREG 寄存器的全局 中断位I和通用中断控制寄存器GICR中的INT2中断使能位INT2置位,则开始执行中断程序。在进 入中断服务程序时,INTF2被硬件清零。必须指出,不管INT2(PINB2)引脚方向位设置如何,只 要INT2引脚发生规定的跳变,都会触发中断。中断标志位INTF2只在满足发生中断的条件时置位, 一旦条件变化,INTF2被硬件清零。向INTF1位写“1”也会对其清零。 8.2.1 INT1中断实验

软件维护实验报告yxx

实验一检查程序的可维护性 一.实验内容 a、认真分析程序代码,了解程序的功能; b、找出程序中的错误,对其进行修改; c、找出程序中不符合规范的地方,进行修改; d、对输入的分数进行检测,要求不小于零,不大于100; e、为了检测程序输出的对错,要求通过在输入结束后,显示输入的学生数据; f、如果学生人数为6,每个同学有4门课,请在源程序上修改。 程序代码: struct student { char num[6]; char name[8]; int fenshu[3]; float avr; } stu[5]; int main() { int i,j,sum; FILE *fp; /*input*/ for(i=0,i<5,i++) {printf("\n please input No. %d fenshu:\n",i); printf("stuNo:"); scanf("%s",stu[i].num); printf("name:"); scanf("%s",stu[i].name);sum=0; for(j=0,j<3,j++) {printf("fenshu %d.",j+1); scanf("%d",&stu[i].fenshu[j]); sum+=stu[i].fenshu[j]; } stu[i].avr=sum/3.0; } fp=fopen("stud","w"); for(i=0,i<5,i++) fprintf(fp,"%s\t%s\t%d\t%d\t%d\t%f\n", stu[i].num, stu[i].name, stu[i].fenshu[0], stu[i].fenshu[1], stu[i].fenshu[2],stu[i].avr); fclose(fp); }

AVR单片机WinAVR及Proteus仿真外部中断

本文主要以AVR单片机atmega48的外部中断的在Proteus上仿真的例子介绍AVR单片机C 语言开发环境WinAVR的使用(如何包含头文件,如何写中断服务程序,如何配置编译产生hex文件),及其在Proteus上的仿真实现(如何建立仿真图,载入hex文件进行仿真) 本例子完全为PC上软件仿真所以不涉及硬件,其全部所需软件清单如下: WinAVR、Proteus、atmega48_Datasheet 软件的下载安装,请参考网上其他教程,有很多,很容易的。 atmega48单片机的数据手册网上中英文的版本也都可以下载到。 下图是笔者所使用的软件截图,不同版本可能稍有差异,但基本不影响使用。 下面我将在假设您已经安装好2个软件(当然目前您不需要知道它们是怎么用的),并且对单片机和C语言有基本了解的基础上进行例程的演示。 let's begin。 首先要明确我们要完成的功能:单片机开始工作后,点亮LED灯1S,灭掉LED灯1S,如此循环3次,然后单片机进入无限循环,等待外部按键button按下,LED等再次点亮,当再次按下button时,LED等灭掉,如此循环。

接着画出要实现这个功能的电路,以便后续仿真。 先在桌面建一个文件夹Hello_AVR,如图。 打开软件,这个图标。 在软件界面上,右键Place->Component->From Libraries 在Keywords里面输入atmega48,选择一个32PIN管脚的单片机放到图上

同样的方法,放置一个LED灯,一个button,电阻,电容。

放置POWER和GND

图完成,在文件夹Hello_AVR下新建文件夹Sim,保存在这里 这里用PB0管脚来驱动LED灯,查阅芯片的数据手册或直接从图中可以知道,外部中断0(INT0)在PD2管脚。而且Proteus的好处是,这里我们给单片机画电源的麻烦也可以省去。 接下来要做的就是看数据手册和建立工程,编程,编译的事了。 打开Programmers Notepad File->New->Project新建工程Hello_AVR,保存到Hello_AVR文件夹

实验三实验报告

[实验三]定时器的应用 [实验目的] 1.结合定时/计数器的应用,更深入的了解AVR中断系统原理,响应过程,以及中断服务 程序的编写。 2.掌握定时器的基本应用,了解定时器的各种用途 [基本实验内容]: 根据需要给出电原理图和程序清单。 1.了解CTC的用途,通过定时器的CTC实现LED的定时闪烁,定时时间1S。 /***************************************************** Chip type : ATmega16 Program type : Application Clock frequency : 4.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/ #include bit time_1s_ok=0; int time_counter=0; interrupt [TIM0_COMP] void timer0_comp_isr(void) { if(time_counter>=500)

{time_counter=0; time_1s_ok=1; } } void main(void) { PORTC=0x01; // 显示控制I/O口初始化 DDRC=0x01; TCCR0=0x0B; //内部时钟,64分频 TCNT0=0x00; OCR0=0x7C; //OCR0=0x7c(124),(124+1)/62.5KHz=2ms TIMSK=0x01; //允许T/C0比较比配中断 #asm("sei") while (1) { if(time_1s_ok){ time_1s_ok=0; PORTC=~PORTC; } }; } 2.阅读器件手册,查阅定时器相关寄存器,通过使用定时器改写P188页的例6.7中的点阵LED箭头移动程序。箭头运动速度保持与原来相同。 /********************************************* Chip type : ATmega16 Program type : Application Clock frequency : 4.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *********************************************/ #include #define row 12 #define speed 25*8 //移动速度调节 flash unsigned char char_7[row]={0x10,0x38,0x7C,0xFE,0x38,0x38,0x38,0x38,0x 00,0x00,0x00,0x00}; bit time_1ms_ok; unsigned char dis_buff[8]; interrupt [TIM0_COMP] void timer0_comp_isr(void) // 1ms 中断一次 { time_1ms_ok = 1;

avr睡眠模式(包涵源程序)

AVR单片机电源管理及睡眠模式应用实例(含源代码) AVR单片机电源管理及睡眠模式应用实例(含源代码) /*********************************************** **** AVR 电源管理_睡眠模式范例 *** **** *** **** 作者: HJJourAVR *** **** 编译器:WINAVR20050214 *** **** *** ***********************************************/ /* 本程序简单的示范了如何令AVR ATMEGA16进入睡眠状态及唤醒 电源管理及睡眠模式的介绍 进入最低耗电的掉电模式 关闭各种模块 外部中断唤醒 M16掉电模式的耗电情况(看门狗关闭),时钟为内部RC 1MHz 0.9uA@Vcc=5.0V [手册的图表约为1.1uA] 0.3uA@Vcc=3.3V [手册的图表约为0.4uA] //测量的数字万用表是FLUKE 15B,分辨率0.1uA 这个程序需要MCU进入休眠状态,为实现最低功耗,JTAG接口会被关闭,只能通过LED的变化来观察程序的运行。 这个实验里面,用STK500(AVRISP) ISP下载线来烧录更方便。 熔丝位设置 1 关断BOD功能 BODEN=1 2 如果用ISP方式烧录,就可以完全关闭JTAG口了 OCEEN=1,JTAGEN=1 */ #include #include #include #include //时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟 #include /* sleep.h里面定义的常数,对应各种睡眠模式 #define SLEEP_MODE_IDLE 0 空闲模式 #define SLEEP_MODE_ADC _BV(SM0) ADC 噪声抑制模式

单片机mega16实验报告——二十四小时倒计时程序

单片机实验报告实验原理: 原理图 实物图:

实验内容:程序功能介绍 二十四小时倒计时程序,启动程序后六位数码管点亮显示程序初始设置的时间(22 57 57)时,分,秒各占两位。然后利用四个独立按键输入(pb4~pb7)进行校时,其中,pb4对秒进行校时,每按一下秒加一;pb5对分校时,每按一下分加一;pb6对时校时,每按一下时加一;按下pb7则停止校时。程序开始倒计时,计时为零之后六位数码管灭,程序驱动蜂鸣器发音的同时驱动四位二极管逐次点亮,二极管点亮一遍之后变灭同时蜂鸣器停止发音,然后六位数码管重新点亮显示24 00 00,重新倒计时。 程序: /***************************************************** This program was produced by the CodeWizardAVR V1.25.6 Evaluation Automatic Program Generator ?Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. https://www.360docs.net/doc/112856367.html, Project : Version : Date : 2010/10/29 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega16 Program type : Application Clock frequency : 4.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/

创新实验报告

专业综合实验 学院:电气工程及自动化学院 专业:测控技术与仪器 姓名:赵闯 学号:1090110304

一.研究背景 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。 在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列和增强型系列;新系列产品沿用增强型系列的72MHz 处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。 截至2010年7月1日,市面流通的型号有: 基本型:STM32F101R6 STM32F101C8 STM32F101R8 STM32F101V8 STM32F101RB STM32F101VB 增强型:STM32F103C8 STM32F103R8 STM32F103V8 STM32F103RBSTM32F103VB STM32F103VE STM32F103ZE STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下: (1)STM32:STM32代表ARM Cortex-M3内核的32位微控制器。 (2)F:F代表芯片子系列。 (3)103:103代表增强型系列。 (4)R:R这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚。 (5)B:B这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash。

AVR单片机外部中断0、1、2详解

AVR单片机外部中断0、1、2 详解 中断基本包含: 1.中断源 2.中断向量(中断入口地址) 3.中断优先级 4.中断函数 除此之外,在单片机中,中断的执行或者中断的触发必 须符合以下的规则:中断触发|执行= 全局中断使能位AND 中断源使能位AND 中断源标志位 单片机内部中断的触发必须完成,全局中断使能,中断 源使能,中断源标志位置一等条件。除此之外,如果是 外部中断0,1,2(INT0,1,2),必须设置引脚触发的规则。最后呢,就是需要在程序里建立处理中断的中断 函数。 在编程的时候的步骤大致如下:(无视INT2) 1. 初始化PD2,PD3 为输入状态。DDRD|=BIT(2)|BIT(3); 2. 设置INT0,1 引脚触发的规则,实验中为低电平触发。MCUCR=0xF0; 3. 设置INT0,1 中断源使能位为逻辑1。 GICR|BIT(7)|BIT(6); 4. 清除INT0,1 的中断标志位(软件写入,逻辑1 为清

除)。GIFR|=BIT(7);BIT(6); 5. 全局中断允许位使能。SREG|=BIT(7); 6. 编辑中断处理函数。 /*ATmega16提供3个外部中断,分别由INT0、INT1和INT2引脚触发。 需要注意的是,如果将ATmega16设置为允许外部中断,则即使把INT0、INT1和INT2引脚 设置为输出方式,外部中断仍然会被触发。外部中断可选择采用上升沿触发、下降沿触发和 低电平触发(INT2中断只能采用沿触发方式。 */ #include; #include; #include "smg.h" /*1.状态寄存器SREG bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 I T H S V N Z C I:全局中断使能位。 在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。 MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断

rfid实验报告

RFID原理与应用 实验报告 2016– 2017学年第二学期 级物联网工程专业 课程名称 RFID原理与应用 学号 姓名 指导教师王超梁 2017年月日

实验一RFID通信系统编解码和调制解调仿真 一、实验目的 射频识别技术是一种通过高频电磁破实现物体识别的无线电技术,一个完整的射频识别系统由射频识别阅读器,射频识别标签和射频识别软件系统三大部分组成,根据工作频段的不同,RFID系统编解码方式、调制解调方式不同,不同的编解码和调制解调方式可以提高RFID系统的通信效率,分析与设计RFID系统中不同编解码算法和调制解调方式具有很强的实用性。分析RFID系统不同编解码算法和调制解调方式,并进行仿真,比较不同编解码算法和调制方式对波形的影响,同时对现有算法进行优化和改进,从而提高RFID系统的效率。 二、实验内容 1. RFID实验箱各模块的划分和作用; 电子标签各种编解码算法的仿真; 3. RFID电子标签调制解调的仿真; 4. 记录并截图电子标签各编解码算法和调制解调的波形。 三、预备知识 了解RFID的通信模型和原理;了解调制解调和编解码算法及波形;了解RFI实验箱各模块的功能;了解RFID系统的组成和各部分的作用。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:韩柏电子RFID实验箱一套; 2. 软件环境配置 操作系统:Microsoft Windows 7 Professional Service Pack 1; RFID开发环境:AVR Studio,Miniscope。 五、实验分析 1.采用Manchester编码方式,对编码数据和解码数据波形的对比。 2.采用AM调制方式(AM/FM/PM),对数据ASK调制和解调波形的对比。

AVR学习总结

目录 中断学习 (2) E2PROM学习 (3) 时钟系统及时钟源的学习 (5) 系统复位学习 (5) I/O端口的学习 (6)

中断学习 中断的过程:CPU 检测中断的产生(总是在每条指令的最后检测中断请求),然后响应中断,进入中断服务函数处理。 CPU 检测到中断并不是立即响应,而是有条件的: 1. 设立中断请求触发器 2. 设立中断屏蔽触发器 3. 总中断是开放的 4. CPU 现行指令结束后执行中断 Mega 有20个中断源,包括3个外部中断(int0、int1、int2)和18个内部中断。 与中断有关的寄存器: GIFR 通用中断标志寄存器: GIFR : 产生中断时由CPU 自动置1,响应后自动置0。 GICR 通用中断控制寄存器: GICR : 位7—5为外部中断0、1、2使能,该位置1且全局中断使能置1即响应外部中断。 位4—0与外部中断无关,为中断向量标号的选择有关。 SREG 状态寄存器: SREG : 全局中断使能标志位,置1时使能全局中断(asm (”SEI ”)),响应后应使其置0(asm (”CLI ”))。 MCUCR 单片机控制寄存器: MCUCR : Bit7—4 Bit1、0

MCUCSR 单片机控制和状态寄存器: MCUCSR : 外部中断2触发方式设置:Bit6写0为下降沿触发,Bit6写1为上升沿触发。 外部中断的初始化可以为以下步骤: 1. 设置外部中断的触发方式(0、1时设置MCUCR ;2时设置MCUCSR )。 2. (清零GIFR 寄存器对应的位,此步骤可省略。另外,此寄存器可用来做可读寄存器, 通过判断完成一些操作)。 3. 打开对应外部中断的控制位(GICR )。 4. 打开全局中断使能为I (SREG )。 5. 写中断服务函数。格式为: #pragma interrupt_handler … 阴影标注部分是必须的,func1是函数名,vector number 是中断向量标号,在头文件中定义的向量号一般前加 ”iv_中断源名称”,宏定义相当于直接使用向量号,但用起来意义明显。 注意:外部中断源的引脚一定要设置成输入作为中断检测的输入接口,而且一定要设置成带上拉电阻的方式(DDRD=0x00,PORTD=0xFF ),否则PD 端口一直为低电平就会一直触发中断。 在ICCA VR 中可以用Wizard 来生成服务程序,一个很简单的工具。只需对生成代码做简单的修改即能完成相应的功能,节省的代码的书写,同时提高了编程的效率。 E 2 PROM 学习 Mega16有512Bytes 的E 2PROM ,用户可以通过操作其控制寄存器来实现对其读写即对E 2PROM 各存储单元的访问。 与E 2PROM 有关的寄存器: EEAR 地址寄存器(分为两个字节EEARH 、EEARL ): EEARH : EEARL : E 2PROM 的初值无定义,因此必须为其赋一个确定的数值。 EEDR 数据寄存器: EEDR :

北邮小学期AVR单片机电子琴实验报告

小学期AVR单片机实验报告实验题目:基于ATmega16L单片机的电子琴设计 学生姓名:学渣 班级:2012XXXXXX 班内序号:XX 学号:2012XXXXXX 日期:2014年9月30日 同组同学:学渣

目录: 一、实验介绍 (3) 1.1实验课题名称 (3) 1.2实验平台 (3) 1.3实验课题关键字..............................3 1.4实验摘要 (3) 二、小组分工 (3) 三、基本题目训练——流水灯与数码管秒表计时器 (3) 3.1实现功能 (3) 3.2程序代码分析 (4) 3.3实验结果图片 (7) 四、有关发声的基础知识 (7) 五、电子琴的设计与测试 (9) 5.1设计过程 (9) 5.2实验所需元器件 (9) 5.3实验程序主要流程图 (10) 5.4实验原理及原理图 (10) 5.4.1实验原理 (10) 5.4.2原理图 (11) 5.5各个模块的设计与讲解 (11) 5.6程序源代码及程序分析 (14) 5.7实验结果..................................... ..24 六、排错过程............................ . (26) 七、心得体会 (29) 八、参考文献 (32) 九、意见与建议 (33)

一、实验介绍: 1.1实验课题名称:基于ATmega16L单片机的电子琴设计 1.2实验平台:本实验所用平台为AVR Studio 4 1.3实验课题关键字: ATmega16L型单片机电子琴键盘按键 LCD液晶显示屏 1.4实验摘要: 本实验设计的电子琴拥有可视化操作界面,能实现即时弹奏音乐、音乐播放、音乐变速、音乐变调,并可以进行任意长度录音(通过按键记录音阶)等功能 二、小组分工: ●XXX负责电路硬件的连接和报告的撰写 ●XXX负责程序代码的编写 ●XXX负责资料的收集整理和查阅 三、基本题目训练——流水灯与数码管秒表计时器 3.1功能:八盏LED二极管按顺序依次循环点亮,实现流水灯的效果,同时两只数码管分别代表秒和十分之一秒,进行秒表计时,配有

AVR单片机中断

AVR单片机中断应用设计要点 四川侯鑫

AVR的中断源较多,尤其是AT-mega128,一共有35个外部及内部中断源。通常。Flash 程序存储器空间的最低位置(0×0000~0×0045)定义为复位和中断向量空间。在中断向量表中,处于低地址的中断向量所对应的中断拥有高优先级。所以,系统复位RESET优先级最高。 一、中断设计注意事项1.具备Bootloader功能的AVR。其中断向量区可以在Flash程序存储器空间最低位置和Bootloader区的头部来回迁移,这主要用于配合Bootloadel程序的应用。如果不使用Bootloadel-功能。 一般不使用中断向量区迁移。 2.Flash较小的AVR芯片。其一个中断向量占据1个字的空间。用于放置一条相对转移RJMP指令(范围-2k~+2k字),跳到中断服务程序。对于不使用的中断。在中断向量区中应放置1条中断返回指令RETI。以增强程序的抗干扰性。 3.ATmega128的Flash空间为64k字节,因此它的一个中断向量占据2个字的空间。用于放置一条绝对转移JMP指令(指令长度为2个字)。跳到中断服务程序。对于不使用的中断。 在中断向量区中应连续放置2条中断返回指令RETI,以增强程序的抗干扰性。当使用汇编语言编写系统程序时应注意。 4.当MCU响应一个中断时.其硬件系统会自动将中断返回地址压入系统堆栈。并关闭全局中断响应(硬件将中断标志I位清0).清除该中断的中断标志位;执行中断返回指令RETI 时,硬件会先允许全局中断响应(硬件将中断标志I位置1),然后从系统堆栈中弹出返回地址到程序计数器PC中,继续执行被中断的程序。除此之外,MCU的硬件没有对中断保护做其他处理。 5.在编写中断服务程序时。首先要编写中断现场保护程序。如保护MCU的状态寄存器等。在中断返回之前,不要忘记恢复中断现场。 6.如果设置和允许外部中断响应。 即使是外部INT0~INT7引脚设置为输出。在引脚上的电平变化也会触发外部中断发生。这一特性提供了使用软件产生中断的途径。 7.外部中断可选择采用上升沿触发、下降沿触发、电平变化(由高变低或由低变高)和低电平触发等方式,无外部高电平触发方式。具体触发方式由外部中断控制寄存器EICRA(INT3:0)和EICRB(INT7:4)决定。 8.选择外部低电平方式触发中断时应注意:(1)引脚上的低电平必须一直保持到当前一条指令执行完成后才能触发中断。(2)低电平中断并不置位中断标志位。即外部低电平中断的触发不是由于中断标志位引起的,而是外部引脚上电平取反后直接触发中断(需要开放全局中断允许)。因此,在使用低电平触发方式时,中断请求将一直保持到引脚上的低电平消失为

AVR单片机软件设计(proteus)报告

2013 /2014 学年第一学期 课程设计实验报告 模块名称A VR单片机课程设计(proteus)专业通信工程 学生班级 学生学号 学生姓名 指导教师

AVR单片机软件设计(proteus)报告 一、总体设计原理、思路; 考虑使用数字温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。 二、硬件方面原理图的设计:包括使用的元器件、典型芯片的介绍;原理图的说明等 实验原理图 a)晶振 晶振为单片机提供时钟信号。单片机XIAL1和XIAL2分别接33PF的电容,中间再并一个晶振,形成单片机的晶振电路。

晶振电路 b)复位电路 单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。AVR复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。复位向量处的指令必须是绝对跳转JMP 指令,以使程序跳转到复位处理例程。 AVR的复位信号源有五个: 上电复位。电源电压低于上电复位门限 VPOT 时, MCU 复位。 外部复位。引脚 RESET 上的低电平持续时间大于最小脉冲宽度时MCU 复位。 看门狗复位。看门狗使能并且看门狗定时器溢出时复位发生。 掉电检测复位。掉电检测复位功能使能,且电源电压低于掉电检测复位门限 VBOT 时 MCU 即复位。 JTAG AVR复位。复位寄存器为1 时MCU 复位。

复位电路 ALE引脚悬空,复位引脚接到复位电路、VCC接电源、VSS接地、EA接电源 c )温度传感器(DS18B20)电路 DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢 封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 1: 技术性能描述 ①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即 可实现微处理器与DS18B20的双向通讯。 ②、测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里 之前是错误的)1℃。

AVR单片机外部中断范例

A VR单片机外部中断范例1. 开发语言 本范例使用WinA VR/GCC 20050214 版本开发 2. 范例描述 按下按键0,LED0亮。直到松手,其他按键才能起作用 按下按键1,LED1亮。其他按键随时都能起作用 按下按键2,LED0/1都熄灭。直到松手,其他按键才能起作用3. 电路图设计:为简化线路设计。 . 4. 代码设计与说明: /************************************************* **** AVR 外部中断使用范例*** **** *** **** 策划、整理与测试:阿莫(armok) *** **** 代码设计:HJJourA VR *** **** 编译器:WINA VR20050214 *** **** www.OurA https://www.360docs.net/doc/112856367.html, 2005.8.31 *** *************************************************/ /* 本程序简单的示范了如何使用ATMEGA16的外部中断 中断的设置 按键的简单延时防抖动 中断的嵌套 变量在中断中的应用---如果变量会在中断服务程序中被修改,须加volatile限定 本范例可直接使出厂状态的新M16芯片,无需对芯片的熔丝位进行配置。

出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器关于外部中断作唤醒源的条件:(将会在后面的电源管理和睡眠模式范例中应用)而INT0和INT1的边沿触发中断只能在空闲模式起作用,即CLKI/O不停止INT0和INT1的低电平中断,INT2在各种睡眠模式下都可以,因为这几种中断工作于异步模式,不需要时钟驱动 官方的M16中文手册对外部中断的描叙存在多处错误,请参考英文原版。*/#include #include #include #include /*宏INTERRUPT 的用法与SIGNAL 类似,区别在于 SIGNAL 执行时全局中断触发位被清除、其他中断被禁止 INTERRUPT 执行时全局中断触发位被置位、其他中断可嵌套执行 另外avr-libc 提供两个API 函数用于置位和清零全局中断触发位,它们是经常用到的。 分别是:void sei(void) 和void cli(void) 由interrupt.h定义*/ //注:内部函数_delay_ms() 最高延时262.144mS@1MHz /* 该函数可以实现较精确的定时,但用JTAG仿真时较麻烦---会进入机器码窗口(Disassembeler) .注意跳开该语段。 一旦JTAG仿真进入该内部函数语句,会变得像"死机"一样(其实在运行中),可以先[break],然后 在后面的C语句设[breakpoint],[RUN]跳过*/ // for()/while()语句计算延时时间较麻烦。 // 为了使_delay_ms()函数的延时正确,须在makefile中设定F_CPU为实际的系统时钟频// 本范例为1MHz内部RC振荡器即F_CPU=1000000 /* C:\WinA VR\avr\include\avr\目录包括所有芯片的定义和其他头文件 其中iom16.h 定义ATMEGA16芯片的特性(中断向量,寄存器,位定义...) 包括下面中断服务程序的常量SIG_INTERRUPTx ,PORTx,GICR..... */ //管脚定义 #define EXT_INT0 2 //PD2 按键0 #define EXT_INT1 3 //PD3 按键1 #define EXT_INT2 2 //PB2 按键2 #define LED0 0 //PB0 #define LED1 1 //PB1 #define LED2 3 //PB3 //宏定义 #define LED0_ON() PORTB|= (1<

机器蛇实验报告

摘要:基于对上述对蛇形机器人的深刻了解和学习,我们开始对机器人进行重点的设计研究实验,在多次的实验中,给我印象最深的,并且付出努力最多的一次实验便是蛇形机器人的机构设计和单元连接实验。 关键字:机器蛇舵机建模机电控制结构设计原理图 第一章前言 1.1 实验目的 时光飞逝,如白驹过隙,转眼本学期的学习生活即将结束,对机器蛇创新实验的了解学习也即将落下帷幕,通过本学期的学习,使我拓宽了知识面,对机器蛇创新试验有了更深层次的了解,不仅培养了创新设计能力,锻炼了我的动手操作能力,更大大的提高了我对机器人创新试验的兴趣,从未知的不懂学起,每当按照老师的指导,课程的安排将机器蛇操作起来,按照指令使其运动自如,都有着说不出的激动和兴奋,格外的有成就感,虽然课程很短暂,但我相信通过这一学期的接触,了解和学习,对我们在以后的专业学习生活中,不仅是种锻炼,更是种启迪。 1.2实验过程及内容 通过老师的讲解,我们首先初识了仿生机器人,仿生机器人就是模仿自然界中生物的外部形状或某些机能的机器人系统,利用各种机、电、液、气等动力元器件和各种传感器来构建机器人基本躯体,通过各种智能算法搭建机器人控制系统,实现机器人在运动机理和行为方式、感知模式和信息处理、控制协调和计算推理、能量代谢和材料结构等多方面,具有高级生命形态特征,从而可以在未知的非结构化环境下精确地、灵活地、可靠地、高效地完成各种复杂任务的机器人系统。而由于蛇形机器人在战场上的扫雷,爆破,矿井和废墟中探测营救,反恐、管道维修以及外行星地表探测等条件恶劣,且要求有高可靠性的军事及民用领域都显示出广阔的应用前景,国内外的许多科研机构都开展了针对机器蛇的研究与开发。 经过了这些基础的了解,我们开始对蛇形机器人进行了重点的学习,关于机器蛇运动研究主要集中在运动姿态的调整控制。研究机器蛇关键是多关节、多自由度的自主控制,以及一定结构下机器人体态变化过程中的有效控制问题。如何设置各个关节变化在一定时序内的有序变化,是实现机器蛇运动的关键。而我们重在了解了解机器蛇的运动机理,基本掌握机器蛇的运动设计思路。 对于它的机械设计步骤,我们先是重点做了有关于蛇形机器人的单关节试验,学习了Mega8芯片最基本的IO控制操作,同时作为最基本的操作可以完成几乎单片机大部分的功能。 我们所学指导书上运用的三维软件是SolidWorks。通过A VR单片机在机器蛇的应用,ATmega128和ATmega8,以及舵机的控制,蛇的头部总控制器,大脑—ATmega128,

相关文档
最新文档