找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4196|回复: 3
收起左侧

ATmega48实验指导书(45页PDF下载)新手入门练习用

[复制链接]
ID:430257 发表于 2018-11-20 22:57 | 显示全部楼层 |阅读模式
下面附件里面有些适合刚入门的新手练习的习题,都是非常基础典型的题目,有意着可以下载来练习下(请到本帖最后下载pdf,不会有格式错乱的情况)

单片机原理与接口技术
实验指导书
(ATmega48) 肖忠   编

目   录
前言    1
实验报告填写总体要求   2
实验1    PROTEUS仿真实验   3
实验2   I/O实验    10
实验3  中断与定时器实验    14
实验4  键盘扫描显示实验    18
实验5   A/D转换实验   24
实验6  串行通讯实验    29
实验7-1  单片机应用系统设计—电子时钟    35
实验7-2  单片机应用系统设计—报警系统    37
实验7-3  单片机应用系统设计—测控系统    40



前言

《单片机原理与接口技术实验》课程是电气工程及其自动化等专业学 生的重要实践课程。它与《单片机原理与接口技术》课程紧密配合,是《单 片机原理与接口技术》课程的重要实践组成部分,是课堂教学的延伸,关 系到学生动手能力、创新能力、适应能力、团队合作等综合能力的培养。 为此编写了《单片机原理与接口技术实验指导书》。

为突出工程技术型人才培养的特点,本课程按照“基础型、应用型、 综合型、设计型”循序渐进分层次构建实验项目,实验的内容除涵盖了单 片机知识外,还涉及电路基础、模拟电子技术、数字电子技术、应用软件 等内容。所以是一门既有广度又有深度的综合性课程。

本课程将着重于专业技能的训练,使学生掌握单片机的各功能部件及 控制方式(查询、中断等),掌握单片机最基本的结构,掌握单片机系统 的设计与开发方法与过程,了解单片机的用途与应用前景,使学生在学习 的过程中对单片机有一个相对全面的了解。通过本课程的训练与实践,激 发学生的学习热情,力不是实践中提高学生的思维水平与创造能力。

由于时间仓促和水平所限,指导书中可能存在一些错误和不妥之处, 敬请批评指正。


实验报告填写总体要求

1、实验目的;
2、实验要求;
3、实验原理:可用框图或示意图表示,也可用电路原理图表示;

4、电路分析:详细分析外围电路,明确所用引脚的性质,确定单片机各 引脚的配置,确定单片机内部资源的配置,进而实现各寄存器的配置; 电路分析要求简单、直接,按相应功能逐一描述,多项可分条列写。

5、程序流程图:即完成实验功能而设计的程序流程,程序流程图要求真 实,严禁杜撰或抄袭。

6、实验结果及分析:对实验结果进行的分析与判断,如果实验包括扩展 部分,或者包括引深的实验内容,需要有专门的分析与描述,即要提 供实验电路、实验手段、程序流程、实验结果等。

7、对针扩展实验,提供程序流程图与核心代码;

8、实验体会:包括对实验过程中的经验、教训、收获等进行小结;也可 以对实验内容、方法、设备等的建议和设想;


9、实验报告必须在规定的时间内交给指导老师。


实验 1PROTEUS仿真实验

一、实验目的
1、熟悉 Proteus 仿真软件的使用方法。
2、掌握 ICC AVR 编译软件的使用方法。

二、实验要求

通过仿真软件的仿真实现8盏 LED 构成的跑马灯。

三、实验设备与平台

1、实验设备:计算机(PC),AVRmega48 学习板,AVR 下载器。

2、软件平台:Proteus 仿真软件;ICCAVR C 语言程序开发软件。

四、知识点

AVR 单片机 I/O 口的原理及其配置、LED 控制等。

五、电路原理图




六、实验内容与步骤

1Proteus操作步骤

(1)启动 Proteus 软件:

(2)在编辑境界拾取元件

(3)分析在元件库中选择单片机---atmega48、电阻---RES、发光二极管---LED 等;

(4)如“电路原理图”进行元件布局与连线,并修改电阻阻值为 470 欧姆;结果如 下所示



(5)双击 atmega48 单片机,在“Program file:”项加载 HEX 程序文件;
(详细操作步骤见              2、ICC AVR 操作步骤);
(6)双击编辑环境左下角的 Play 按钮

2ICCAVR 操作步骤

(1)创建工程目录“exam1”
(2)将“..\Include\”目录下的头文件 iom48v.h 拷贝到本工程目录“exam1”
(3)创建工程“exam1”:

打开ICCAVR,在“Project”下拉菜单中选择“New”,在“保存在(I)”

下拉菜单中选择本工程目录“exam1”,在“文件名(N)”窗口中输入工程文件 名“exam1”,如下图1.2所示,然后按 按钮。




图1.2  创建工程文档界面

(4)设置工程参数:

在 “Project”下拉菜单中选择“Options…”,在弹出窗口的“Target”页面的“Device

Configuration”下拉菜单中选择“ATmega48”,如下图1.3所示,然后按 键。

图1.3  芯片配置信息界面



(5)将头文件 iom48v.h 添加到工程:右击“Project”页面中的“Headers”项,在打开
的菜单中选择“Add File(s)…”,选择弹出窗口中的 iom48v.h 文件,并按“打开” 按钮,结果如下图 1.4 所示。

图1.4  头文件添加到工程的图示
(6)创建 exam1.c 文件并加入到工程

创建 exam1.c 文件:按   按键创建一个新文件,在 “File”下拉菜单中选择
“Save As…”将新文件保存在本工程目录,名字为 exam1.c。

将 exam1.c 文件添加到工程:右击“Project”页面中的“Files”项,在打开的菜单 中选择“Add File(s)…”。选择弹出窗口中的 exam1.c 文件并打开,结果如下图 1.5

所示。

图1.5  源文件添加到工程的图示



(7)编写 exam1.c 文件。
双击右边的“Project”页面的“exam1.c”,在左边的“exam1.c”页面添加如下的语句
(参考代码):

#include "iom48v.h"

void delay(unsigned              int              x) {              //延时函数

while ( x--)              ;

}

unsigned char LED_table[]={0xFF,0x00,0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,

0xDF,0xBF,0x7F,0xFF,0x00,0xFF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,

0xFE,0xFF,0x00,0xFF,0x7E,0xBD,0xDB,0xE7,0xFF,0x00,0xE7,0xDB,0xBD,

0x7E,0xFF,0x00};

void              main(void)              {

unsigned char i=0;

DDRD              = 0xFF;              //D配置为输出口

PORTD = 0xFF;              //D口输出全高,即全部LED灯熄灭

while(1)              {

i = (i+1)%36;

PORTD = LED_table[ i];

delay(60000);

}

}

(8)编译连接exam1工程:


单击   按钮编译连接工程并生成exam1.hex烧写文件。



(9)加载exam1.hex烧写文件到Proteus仿真图的单片机内并运行,观察运行结果。


七、扩展实验

1、将延时程序的延时时间延长1倍,记录仿真结果,分析现象,研究解决方案;

2、自行设计一种LED的表现形式;(例如:LED灯从左到右逐个点灯,保持2~3

秒,LED灯再从右到左逐个熄灭)



实验 2I/O实验

一、实验目的

1、熟悉 AVR 单片机的 I/O 口配置方法。

2、掌握 AVR 单片机 I/O 口控制 LED 显示的方法。

3、掌握 AVR 单片机 I/O 口检测按键的方法。

二、实验要求

通过 IO 口检测的8个按键的状态,并分别控制8盏 LED 的亮与灭。

三、实验设备与平台

1、实验设备:计算机(PC),AVRmega48 学习板,AVR 下载器。

2、软件平台:ICCAVR C 语言程序开发软件。

四、知识点

AVR 单片机 I/O 口的原理及其配置、LED 控制、按键检测。

五、电路原理图

图 2.1  8个按键和 8 盏 LED 电路图



六、实验内容与步骤

1、连线

用杜邦线按图 2.1 连线,按键接在 PB 口,LED 灯接在 PD 口。



2、程序流程图(供参考)

IO 端口初始化
B 口输入(上拉) D 口输出

B0 状态为低?

N
说明:连接 LED 电路的端口应配置成输出 口;连接按键电路端口应配置成启用内部 上拉的输入口;

Y              点灯 D0 控制的
LED 灯

Y



B1 状态为低?              点灯 D1 控制的
LED 灯

N

??






3、操作步骤
B7 状态为低?

N
Y              点灯 D7 控制的
LED 灯



(1)创建工程目录“exam2”。
(2)将“..\Include\”目录下的头文件 iom48v.h 拷贝到本工程目录“exam2”
(3)创建工程“exam2”
(4)设置工程参数(操作如实验 1 的操作步骤)。



(5)将头文件 iom48v.h 添加到本工程(操作如实验 1 的操作步骤)。

(6)创建 exam2.c 文件并加入到本工程中(操作如实验 1 的操作步骤)。 (7)编写 exam2.c 文件。 双击右边的“Project”页面的“exam2.c”,在左边的“exam2.c”页面添加如下的语句

(参考代码):

#include "iom48v.h"

void delay(unsigned              int              x) {              //延时函数

while ( x--)              ;

}

void io_init(void) {              //IO口初始化函数

DDRB=;//PB口设置为输入

PORTB=;//PB口全部内部上拉

DDRD=;//PD口设置为输出

PORTD=;//PD口全部输出高电平

}

void main(void) { unsigned char              i; io_init();

while (1) {

//补充代码,实现一个按键控制一个LED灯的功能;

//提示:用 PINB  读取按键的状态,用PORTD控制LED

}

}

(8)编译连接exam1工程:

单击   按钮编译连接工程并生成exam2.hex烧写文件。

(9)下载exam1.hex烧写文件到ATmega48学习板并运行,观察运行结果。



七、扩展实验

1、按一下与B0口相连的按键,对应的点亮连接D0口的LED,再按一下该按键, 对应的LED熄灭;依此类推,用8个按键控制8盏LED。


八、实验报告要求

1、描述如何设置 AVR 单片机的 I/O 口为输出,如何使8盏 LED 亮灭;描述如 何设置 AVR 单片机的 I/O 口为输入,如何读取8个按钮;

2、写出扩展实验的流程图与源程序。


实验 3中断与定时器实验

一、实验项目

1、利用定时器产生周期为 1 秒的中断,让 PD 口连接的 8 个 LED 灯实现二进 制计数显示的秒表。

2、利用 PWM 占空比调节功能,使用定时器输出两路动态 PWM 信号,结果以 亮度的形式显示在对应的 LED 上,并通过两个按键调节 LED 的亮度。二、实验目的

1、掌握定时器产生所需定时时间的方法。              2、掌握 PWM。

三、实验设备与平台

1、实验设备:计算机(PC),AVRmega48 学习板,AVR 下载器。

2、软件平台:ICCAVR C 语言程序开发软件。

四、知识点

定时器,PWM。

五、电路原理图

图3.1  二进制显示秒表电路图


六、实验内容与步骤

第一部分              定时器中断

1、连线

用杜邦线按图 3.1 连线,PD 口接 LED。

2、程序流程图(供参考)



D 口输出

T1 定时器初始化: 普通模式,
64 分频, 定时器初值=49911

T1 溢出中断允许 总中断允许


循环等待

T1 定时溢出中断服务 程序流程

重设计数值
49911

秒计时值+1

秒计时值输出显示


3、操作步骤

(1)创建工程目录“exam3-1”。
(2)将“..\Include\”目录下的头文件 iom48v.h 拷贝到本工程目录“exam3-1”
(3)创建工程“exam3-1”
(4)设置工程参数(操作如实验 1 的操作步骤)。
(5)将头文件 iom48v.h 添加到本工程(操作如实验 1 的操作步骤)。


(6)创建 exam3-1.c 文件并加入到本工程中(操作如实验 1 的操作步骤)。
(7)编写 exam3-1.c 文件,exam3-1.c 的语句如下(参考代码):



#include "iom48v.h" unsigned char              second=0;


//              IO口初始化函数

void io_init(void) {

//补充代码;

}

void t1_init(void)

{

TCCR1B=  ;
#pragmainterrupt_handlerInt_T1:

void Int_T1(void)

{

//补充代码;

}

void main(void) { io_init(); t1_init();

TIMSK1|=;

SREG|=  ;




TCCR1A=  ;
while (1) ;


TCNT1=  ;}

}

(8)编译连接exam3-1工程(操作如实验1的操作步骤)。

(9)下载exam3-1.hex烧写文件到ATmega48学习板并运行(操作如实验1的操作步 骤),观察运行结果。


第二部分              PWM 输出
1、连线

用杜邦线按图 3.2 连线。



图3.2  LED调光灯电路图

2、程序流程图(供参考)

B1 输出,B6B7 输入(上拉)

T1 定时器初始化:
8 位快速 PWM 模式,1 分频,比较输出 式:比较匹配时清零 OC1A/OC1B,比 较匹配初值 OCR1A = 120

接 B6 的按键按下?              Y              比较匹配值
OCR1A+1




3、操作步骤

(1)创建工程“exam3-2”
(2)设置工程参数(操作如实验 1 的操作步骤)。
(3)将头文件 iom48v.h 添加到本工程(操作如实验 1 的操作步骤)。 (4)创建 exam3-2.c 文件并加入到本工程中(操作如实验 1 的操作步骤)。 (5)编写 exam3-2.c 文件,exam3-2.c 的语句如下(参考代码):



#include "iom48v.h"

//延时函数

void delay(unsigned              int              x) {

while ( x--)              ;

}

void main(void)              { DDRB=0x03; PORTB|=0xFF; TCCR1A=0b10100001;

TCCR1B=0b00001001;
if ((PINB & 0x40) == 0)

if (OCR1A<255) { OCR1A+=1; delay(2000);

}

if ((PINB & 0x80) == 0)

if (OCR1A> 200) { OCR1A-=1; delay(2000);

}
CR1=0x00FF;                            } OCR1A=120;              }
while (1) {

(6)编译连接exam3-2工程(操作如实验1的操作步骤)。

(7)下载exam3-2.hex烧写文件到ATmega48学习板并运行(操作如实验1的操作 步骤),观察运行结果。


九、扩展实验

1、将第一部分的秒表改为数码管显示(只需显示一位)。

2、针对PWM输出实现调压功能的实验,任意选用一种检验方法并记录实验结


果(检验方法一:用万用表测量电压的变化;检验方法二:用示波器观察输出波形;

检验方法三:接直流电机观察电机的转速变化;)

3、如果要用T0实现按键计数功能,请提供电路图、寄存器配置情况(含说明)、 程序流程图;


十、实验报告要求

1、描述扩展实验中控制数码管显示的方法。

2、描述 PWM 控制 LED 变亮和变暗的算法。


实验 4键盘扫描显示实验

一、实验项目

1、矩阵键盘与数码管的动态刷新显示。

2、利用 AVR 内部的模数转换将一个测量的电压值显示在 4 位数码管上。

二、实验目的

1、掌握数码管动态刷新显示的方法。2、掌握矩阵键盘扫描的程序设计方法。

3、掌握 AVR 单片机内置的 A/D 模数转换的使用方法。

三、实验设备与平台

1、实验设备:计算机(PC),AVRmega48 学习板,AVR 下载器。

2、软件平台:ICCAVR C 语言程序开发软件。

四、知识点

数码管动态刷新显示,键盘扫描,A/D 模数转换。

五、电路原理图


图4.1  矩阵键盘与显示电路图


六、实验内容与步骤

1、连线
2、程序流程图(供参考)



C 口 D 口输出
B 口高 4 位输出,低
4 位输入上拉

T1 定时器初始化: (定时时长为 5ms) CTC 模式,64 分频

CTC 中断允许 总中断允许


矩阵键盘 扫描与判断

确定键值

T1 定时器 CTC 中断服 务程序流程

K=(K+1)%4

关闭所有位控 根据 K 值输出
显示字形码

根据 K 值 打开相应位控


键值译码
(译成显示码)

3、操作步骤

(1)创建工程目录“exam4”。
(2)将“..\Include\”目录下的头文件 iom48v.h 拷贝到本工程目录“exam4”
(3)创建工程“exam4-1”
(4)设置工程参数(操作如实验 1 的操作步骤)。


(5)将头文件 iom48v.h 添加到本工程(操作如实验 1 的操作步骤)。
(6)创建 exam4-1.c 文件并加入到本工程中(操作如实验 1 的操作步骤)。
(7)编写 exam4-1.c 文件,exam4-1.c 的语句如下(参考代码):

#include "iom48v.h"

#include <macros.h>

const unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,

0xF8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e,0xff};
//  显示缓冲区,分别存放的是千位、百位、十位、个位的段码;

unsigned char ledbuf[]={0xff,0xff,0xff,0xff};
unsigned char k=0; //显示刷新标志

unsigned int x=1234;

//  定时器 1 的初始化,CTC 模式,8 分频,定时 5ms void              disp_init(void) {

TCCR1A=  ; TCCR1B=  ;

OCR1A=;//  计数周期为 5mSF=1M数值

ICR1=  ;

TIMSK1 = 0x02;              //  比较中断 A 允许

TIFR1              = 0x02;

}

//  定时中断服务程序

#pragmainterrupt_handlerInt_TCCR1A:

void Int_TCCR1A(void) {
//  补充代码,实现以下功能
//  刷新段码与位控制,用变量 K 实现轮流刷新的目的

}

//IO 口初始化函数

void io_init(void) {


DDRB = 0xF0;              /*设置高 4 位为输出,控制 4 位数码管*/

PORTB = 0xFF; DDRC = 0xFF; PORTC = 0xFF; DDRD = 0xFF; PORTD = 0xFF;

}

//延时函数

void delay(unsigned              int              x) {

while ( x--)              ;

}

//  译码程序,将显示的数据译成段码,存入 ledbuf 数组中

void decode(unsigned int b)

{
//  补充代码,实现以下功能
// ledbuf[0]保存千位数显示码,ledbuf[1]保存百位数显示码,
// ledbuf[0]保存十位数显示码,ledbuf[0]保存个位数显示码

}

void main(void) {

unsigned char key=0,keycode; io_init();              // IO 初始化 disp_init();              //  定时器初始化

/*中断使能*/ SEI();

while (1) {

PORTB = 0x0F;

keycode= (~PINB) & 0x0F;

if (keycode != 0x00)              { PORTB = ~0x10;



keycode = (~PINB) & 0x0F;

switch(keycode){

case 0x01:key=0;break; case 0x02:key=1;break; case 0x04:key=2;break; case 0x08:key=3;break;

}

PORTB = ~0x20;

keycode = (~PINB) & 0x0F;

switch(keycode){

case 0x01:key=4;break; case 0x02:key=5;break; case 0x04:key=6;break; case 0x08:key=7;break;

}

PORTB = ~0x40;

keycode = (~PINB) & 0x0F;

switch(keycode){

case 0x01:key=8;break; case 0x02:key=9;break; case 0x04:key=10;break; case 0x08:key=11;break;

}

PORTB = ~0x80;

keycode = (~PINB) & 0x0F;

switch(keycode){

case 0x01:key=12;break; case 0x02:key=13;break; case 0x04:key=14;break; case 0x08:key=15;break;

}


PORTB = 0xFF; ledbuf[0] = 0xFF; ledbuf[1] = 0xFF; ledbuf[2] = 0xFF; ledbuf[3] = disp[key];

}

delay(30000);

}

}

(8)编译连接exam4-1工程(操作如实验1的操作步骤)。

(9)下载exam4-1.hex烧写文件到ATmega48学习板并运行(操作如实验1的操作步 骤),观察运行结果。


七、扩展实验

1、修改部分的程序代码,使新输入的数据显示在个位上,原数据自动向左移动 一位;



实验 5A/D转换实验

一、实验项目

1、矩阵键盘与数码管的动态刷新显示。

2、利用 AVR 内部的模数转换将一个测量的电压值显示在 4 位数码管上。

二、实验目的

1、掌握数码管动态刷新显示的方法。

2、掌握模数转换器的基本工作原理与关键技术指标。

3、掌握 AVR 单片机内置的 A/D 模数转换的使用方法。

三、实验设备与平台

1、实验设备:计算机(PC),AVRmega48 学习板,AVR 下载器。

2、软件平台:ICCAVR C 语言程序开发软件。

四、知识点

数码管动态刷新显示,键盘扫描,A/D 模数转换。

五、电路原理图


图5.1  AD测量与显示电路图


六、实验内容与步骤

1、连线

用杜邦线按图 5.1 连线。注意:AVCC 接 VCC,AREF 通过 0.1uF 电容接地;
2、程序流程图(供参考)



C 口 D 口输出
B 口高 4 位输出,低
4 位输入上拉

AD 初始化: 基准源:VCC 通道 4,等等

T1 定时器初始化: (定时时长为 5ms) CTC 模式,64 分频


CTC 中断允许 总中断允许

读取 AD 测量值 将 AD 值转换为
电压数据

显示数据译码

T1 定时器 CTC 中断服 务程序流程

K=(K+1)%4

关闭所有位控 根据 K 值输出
显示字形码

根据 K 值 打开相应位控


3、操作步骤

(1)创建工程“exam5”
(2)设置工程参数(操作如实验 1 的操作步骤)。

(3)将头文件 iom48v.h 添加到本工程(操作如实验 1 的操作步骤)。 (4)创建 exam5.c 文件并加入到本工程中(操作如实验 1 的操作步骤)。 (5)编写exam5.c 文件,exam5.c 的语句如下(参考代码):

#include "iom48v.h"

const unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};

unsigned char ledbuf[]={0xFF,0xFF,0xFF,0xFF};
unsigned char flag,k=0; //显示刷新标志

// 定时器 1 的初始化,CTC 模式,8 分频

void disp_init(void) { TCCR1A = 0x00; TCCR1B = 0x0A; OCR1A = 625;

ICR1              = 625;

TIMSK1 = 0x02;              /*比较中断 A 允许*/

TIFR1              = 0x02;

}

// 定时中断服务程序

#pragmainterrupt_handlerInt_TCCR1A:

void Int_TCCR1A(void) {
//  补充代码,实现以下功能
//  刷新段码与位控制,用变量 K 实现轮流刷新的目的

}

// IO 口初始化函数


void io_init(void) {

DDRB = 0xF0;      //  设置高 4 位为输出,控制 4 位数码管 PORTB = 0xFF;    //  高 4 位输出低电平,点亮 4 位数码管 DDRC = 0x0F;

PORTC = 0x0F; DDRD = 0xFF;

PORTD = 0xFF;

ADMUX=  ;//基准 AVCC、通道 4
ADCSRA=  ;//使能,开始
ADCSRB=;//ACME=0AD通道,=1为模拟比较器通道

}

//              ADC 采样函数,采样第 4 通道信号,采样频率

unsigned int get_ad(void) {

unsigned int i;
ADCSRA=  ;//使能,开始

;//等待采样结束 i=  ;//读取 AD结果 ADCSRA &= ~(0b00010000);                            //清标志,关闭转换

return              i;              //返回结果

}

// 十六进制数转十进制段码函数

void decode(unsigned int b) { ledbuf[3]=disp[b%10];              b=b/10; ledbuf[2]=disp[b%10];              b=b/10;ledbuf[1]=disp[b%10]; ledbuf[0]=disp[b/10];

ledbuf[0] &= ~0x80;              // 加小数点

}

void main(void) {


unsigned              int                            x = 0; io_init();                            //初始化 IO 口disp_init();                            //显示初始化

SREG |= 0x80; decode(x); while (1) {

x = get_ad();//  获取 AD
decode(x);//  试着增加或修改代码,将 AD值转成电压值来显示

delay(20000);

}

}

(6)编译连接exam5工程(操作如实验1的操作步骤)。

(7)下载exam5.hex烧写文件到ATmega48学习板并运行(操作如实验1的操作步 骤),观察运行结果。


七、扩展实验

1、系统要求如下:

(1)将模拟输入通道改为 1 号通道(ADC1);

(2)定时(100ms)启动测量 AD 测量;

(3)采用平滑移动法处理测量数据;即只保留最新的 10 个采样数据,若出现 第 11 个数据,则将最早测量的那个数据去掉,

(4)对当前的 10 个数据进行中值滤波处理,即去掉最大值与最小值,然后计 算剩余 8 个数据的平均值。

2、用 LM35D 取代电位器,设计算法,显示出测量的温度值;

八、实验报告要求

1、描述扩展实验中修改 A/D 通道的方法。

2、写出扩展实验修改过的函数的原程序清单。


实验 6串行通讯实验

一、实验项目

1、使用 AVR 的串行口传送预设的数据

2、使用 AVR 的串行口接收数据并实时显示。

二、实验目的

1、掌握 AVR 单片机串行口发送数据与接收数据的方法。

三、实验设备与平台

1、实验设备:计算机(PC),AVRmega48 学习板,AVR 下载器。

2、软件平台:ICCAVR C 语言程序开发软件。

四、知识点

数码管动态刷新显示,按键扫描,串行通讯。

五、电路原理


图 6.1  串口通信电路图


六、实验内容与步骤

1、连线

1、用杜邦线按图 6.1 连接。
2、实验需同时用两套 ATmega48 学习板,用 A 板与 B 板加以说明。

3、A 板的 TXD(3)引脚与 B 板的 RXD(2)引脚相连,B 板的 TXD(3)引 脚与 A 板的 RXD(2)引脚相连。

4、两套学习板的 GND(8)线相连。

2、程序流程图(供参考)

端口初始化

5msT1 定时器初始化

串口初始化:4800bps,
异步,8 数据位,1 停止位,无校验位, 接收中断使能,发送使能

X=0,显示译码

Y


接 D7 的按键按下?              X=‘A’
显示译码

N

接 D6 的按键按下?              Y              X=‘0’ 显示译码

N
串口发送
X 的内容

串口发送
X 的内容




接 D5 的按键按下?

N
Y              X=X+1
显示译码
串口发送
X 的内容




串口数据接收完成 中断服务程序流程
T1 定时器 CTC 中断服
务程序流程




读取接收数据,送 X
K=(K+1)%4




对 X 译码
关闭所有位控


根据 K 值输出
显示字形码



3、操作步骤

(1)创建工程目录“exam6”。
根据 K 值
打开相应位控


(2)将“..\Include\”目录下的头文件 iom48v.h 拷贝到本工程目录“exam6”
(3)创建工程“exam6”
(4)设置工程参数(操作如实验 1 的操作步骤)。

(5)将头文件 iom48v.h 添加到本工程(操作如实验 1 的操作步骤)。 (6)创建 exam6.c 文件并加入到本工程中(操作如实验 1 的操作步骤)。 (7)编写exam6.c 文件,exam6.c 的语句如下(参考代码):

#include "iom48v.h"

const unsigned char disp[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

unsigned char x=0;

unsigned char ledbuf[]={0xFF,0xFF,0xFF,0xFF};
unsigned char flag,k=0; //显示刷新标志

//延时函数

void delay(unsigned              int              x) {

while ( x--)              ;

}


/*十六进制数转十进制段码函数*/

void int_to_bcd(unsigned int temp) {

unsigned char i;

for (i = 3; i > 0; i--) {
ledbuf = disp[temp%10];              /*提取当前变量最低位*/
temp = temp/10;              /*去掉当前最低位值*/

}

ledbuf[0]=disp[temp];

}

//  定时中断服务程序

#pragmainterrupt_handlerInt_TCCR1A:

void Int_TCCR1A(void) {
//  补充代码,实现以下功能
//  刷新段码与位控制,用变量 K 实现轮流刷新的目的

}

//  串口 0 接收完成中断服务程序

#pragma interrupt_handler uart_receive:

void uart_receive(void)

{

x=UDR0;

int_to_bcd(x);

}

// IO 口初始化

void io_init(void) { DDRB = 0xFF; PORTB = 0xFF;

DDRC = 0x0F;              //设置低 4 位为输出,控制 4 位数码管
PORTC = 0xFF;              //低 4 位输出高电平,关闭 4 位数码管

DDRD = 0x00; PORTD = 0xFF;



}

//  定时器 1 的初始化,CTC 模式,8 分频
void disp_init(void)              { TCCR1A = 0x00; TCCR1B = 0x0A; OCR1A = 625; ICR1              =625; TIMSK1 = 0x02; EIMSK = 0x01;

}

//  串行口初始化,波特率=4800 主频=1M

void uart_init(void)              {

UCSR0A=0x40;              // bit6,1,0 三位要写内容 UCSR0B=0b10011000;              //  接收结束中断使能,接收使能,发送使能UCSR0C=0b00000110;              //  异步,无校验,1 位停止位,8 位数据,上

升沿发送数据
UBRR0=12;              //  波特率=4800 ,Fosc=1Mhz

}

void              send(unsigned char x)              {              //  串口发送
while(!(UCSR0A&0x20)); UDR0=x;

}

void                            main(void)              { io_init(); disp_init(); uart_init(); SREG|=0x80; x=0;int_to_bcd(x); while (1) {



if(!(PIND&0x20)) {

delay(200);

x=0x41;              int_to_bcd(x);              send(x);

delay(200);

}

if(!(PIND&0x40)) {

delay(200);

x=0x31;              int_to_bcd(x);              send(x);

delay(200);

}

if(!(PIND&0x80)) {

delay(200);

x++;              int_to_bcd(x);              send(x);

delay(200);

}

}

}

(6)编译连接exam6工程(操作如实验1的操作步骤)。

(7)下载exam6.hex烧写文件到ATmega48学习板并运行(操作如实验1的操作步 骤),观察运行结果。


七、扩展实验

自行查找单片机与PC机通信的技术要求,制作相应的通信模块,应用串行口实 现单片机学习板与PC机的数据通信(提示:PC机端可用超级终端或串口助手等工具 软件)


八、实验报告要求

1、描述扩展实验中单片机与 PC 机通信的手段与方法。

2、记录串口实验的全过程。


实验 7-1单片机应用系统设计电子时钟

一、实验项目

数字电子钟应用系统,基于自己制作的电路板,以 ATmega48 为核心,配合数 码管显示屏(或液晶显示屏)为用户提供长期、连续、可靠、稳定的工作环境。


二、实验类型

设计性。

三、计划学时

4 学时。

四、指导思想

学生能运用已学的电路知识、计算机知识、单片机硬件和软件知识,基于 AVR 单片机设计一个有独到之处的系统,激发学生学习的主动性和创新意识,培养学生 独立思考、综合运用知识、提出问题和解决复杂问题的能力。


五、实验目的及要求

通过本实验使学生掌握从题目构思到选型、硬件设计、硬件调试、软件设计和 软件调试的单片机设计方法。

系统要求:

1、能显示时、分、秒、日期及时间和日期调整功能;

2、能设定两个以上的闹钟时间;

3、自定义其它扩展功能。


六、涉及的内容或知识点

传感器采样,控制器的控制,键盘输入和数码管显示等知识。

七、采用的教学方法和手段

本实验为设计性实验,教师给出题目范围,由学生自主完成系统硬件设计和程序 编制。


八、实验设备与平台

1、实验设备:计算机(PC),AVR 下载器,学生自己制作的系统。

2、软件平台:ICCAVR C 语言程序开发软件。

九、实验报告和结果要求

1、实验报告:

① 设计概况;

② 硬件电路图(原理图与实物照片);★

③ 软件流程图;★★★

④ 源程序清单;

⑤ 操作说明;

⑥实验结果分析。

2、自制的应用系统目标板(能按操作说明操作、使用)。

提示:可以外接蜂鸣器模块、DS1302 实时时钟模块、LCD1602 模块等;


实验 7-2单片机应用系统设计温度报警系统

一、实验项目

系统采样温度并显示;当温度超过限定值则报警;通过“设置”、“+”和“-”键修 改温度限定值。

要求:

1、根据系统功能选择一个性价比较高的 AVR 单片机为控制芯片;

2、独立设计硬件电路,自制实验系统;

3、独立完成软件设计并调试。

二、实验类型

综合性。

三、计划学时

4 学时。

四、指导思想

通过本实验,学生能利用 AVR 单片机的丰富硬件资源设计一个实际应用系统, 使学生掌握电子产品的设计过程。


五、实验目的及要求

通过温度传感器完成温度的采样和显示;当温度超过警戒值则报警;通过“设 置”、“+”和“-”键修改温度警戒值。

要求:

1、使用 AVR 单片机为控制芯片;

2、使用 AD 模拟采集的温度数据(0~5V 表示 0~50℃);


3、使用 4 位八段数码管显示当前测量的温度值(要求保留 1 位小数);

4、温度上限值与温度下限值保存在 EEPROM 中(初值为 30℃和 10℃);

5、当测量温度高于设定的上限值时,蜂鸣器响,开启冷水阀(用 LED 模拟); 当测量温度低于设定的下限值时,蜂鸣器响,开启热风阀(用 LED 模拟); 当测量温度在下限与上限之间时,蜂鸣器、冷水阀、热风阀均关闭;

6、用 3 或 4 个按键修改温度上限与下限值,温度上限与下限在修改时必须用数码管 显示,

7、通过按键修改好的温度上限值与下限值能保存在单片机内部。 通过本实验掌握单片机对模拟信号的采集和处理,掌握单片机串行数据传送技

术和电路、软件设计方法,掌握 LED 数码管电路和软件设计方法,掌握按键和蜂鸣 器的电路和软件设计方法。


六、涉及的内容或知识点

温度采样,一线数据传送总线,LED 数码管驱动,串行转并行的数据传送,扬 声器驱动,按键处理。


七、采用的教学方法和手段

本实验为综合性实验,教师给出题目并提出设计目标和要求,设定需实现的技术 指标,由学生自主完成系统硬件的组合设计和程序的编制。


八、实验设备与平台

1、实验设备:计算机(PC),AVR 下载器,学生自己制作的系统。

2、软件平台:ICCAVR C 语言程序开发软件。


九、实验报告和结果要求

1、实验报告:

① 设计概况;

② 硬件电路图(原理图与实物照片);★

③ 软件流程图;★★★

④ 源程序清单;

⑤ 操作说明;

⑥ 实验结果分析。

2、自制的应用系统目标板(能按操作说明操作、使用)。

提示:可以外接蜂鸣器模块、LM35D 测温芯片或 DS18B20 测温芯片等;


实验 7-3单片机应用系统设计小型测控系统

一、实验项目

系统是基于自己制作的电路板,至少包括传感器检测、控制(电机等)、键盘 输入参数和数码管显示当前状态等。具体方案由学生独立自行设计。


二、实验类型

设计性。

三、计划学时

4 学时。

四、指导思想

学生能运用已学的电路知识、计算机知识、单片机硬件和软件知识,基于 AVR 单片机设计一个有独到之处的系统,激发学生学习的主动性和创新意识,培养学生 独立思考、综合运用知识、提出问题和解决复杂问题的能力。


五、实验目的及要求

通过本实验使学生掌握从题目构思到控制器选型、硬件设计、硬件调试、软件 设计和软件调试的单片机设计方法。

系统是基于 AVR 单片机,至少包括传感器检测、控制(电机等)、键盘输入 和数码管显示当前状态等。具体方案由学生独立自行设计。


六、涉及的内容或知识点

传感器采样,控制器的控制,键盘输入和数码管显示等知识。


七、采用的教学方法和手段

本实验为设计性实验,教师给出题目范围,由学生自主完成系统硬件设计和程序 编制。


八、实验设备与平台

1、实验设备:计算机(PC),AVR 下载器,学生自己制作的系统。

2、软件平台:ICCAVR C 语言程序开发软件。

九、实验报告和结果要求

1、实验报告:

① 设计概况;

② 硬件电路图(原理图与实物照片);★

③ 软件流程图;★★★

④ 源程序清单;

⑤ 操作说明;

⑥实验结果分析。

2、自制的应用系统目标板(能按操作说明操作、使用)。


完整的pdf格式文档51黑下载地址:
单片机实验指导书(16学时).pdf (1.14 MB, 下载次数: 30)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:8222 发表于 2019-3-30 18:29 | 显示全部楼层
感谢楼主无私的奉献。
回复

使用道具 举报

ID:185852 发表于 2019-7-9 09:50 | 显示全部楼层
感谢楼主无私的分享。
回复

使用道具 举报

ID:185852 发表于 2019-7-9 09:51 | 显示全部楼层
感谢楼主无私的分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表