下面附件里面有些适合刚入门的新手练习的习题,都是非常基础典型的题目,有意着可以下载来练习下(请到本帖最后下载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 控制等。
五、电路原理图
六、实验内容与步骤
1、Proteus操作步骤
 (1)启动 Proteus 软件:
 (2)在编辑境界拾取元件
(3)分析在元件库中选择单片机---atmega48、电阻---RES、发光二极管---LED 等;
(4)如“电路原理图”进行元件布局与连线,并修改电阻阻值为 470 欧姆;结果如 下所示
(5)双击 atmega48 单片机,在“Program file:”项加载 HEX 程序文件; (详细操作步骤见 2、ICC AVR 操作步骤);  (6)双击编辑环境左下角的 Play 按钮
2、ICCAVR 操作步骤
(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=;// 计数周期为 5mS,F=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=0为 AD通道,=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黑下载地址: |