单片机学习资料7.docx
- 文档编号:5440646
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:25
- 大小:83.87KB
单片机学习资料7.docx
《单片机学习资料7.docx》由会员分享,可在线阅读,更多相关《单片机学习资料7.docx(25页珍藏版)》请在冰点文库上搜索。
单片机学习资料7
七Atmega8单片机训练课题
课题一Atmega8单片机输出端口练习
一、目的:
1、掌握用C语言定义AVR单片机引脚的输出功能;
2、熟悉用二进制计数的方法;
3、初步了解用AVRStudio4模拟调试AVR应用程序;
4、初步掌握用ISIS软件仿真电路;
二、要求:
用Atmega8单片机PB0、PB2、PB3三个I/O口,点亮相应的发光二极管。
三、仿真电路图:
图7-1
图7-1
四、实训内容和步骤:
1、用ICCAVR编辑、编译下列C程序:
/*******************************************************
项目:
ATmega8单片机输出端口练习
芯片类型:
ATmega8
时钟:
8.000MHz
作者:
刘天旺
功能:
点亮PB0、PB1、PB2口的发光二极管
*******************************************************/
#include
/*******************************************************
主函数
*******************************************************/
voidmain()
{
DDRB=0B00000111;//定义PB0-PB2为输出
while
(1)//循环运行
PORTB=0B00000111;//PB0-PB2输出高电平
}
2、用AVRStudio4模拟调试上述程序。
3、利用ISIS软件,根据图7-1画出仿真电路,并将编译正确的、后缀为.cof的程序烧录后进行仿真。
四、讨论题:
1、利用ICCAVR编辑C程序时,每条语句后的“;”是在英文状态输入,还是在中文状态输入。
如果改为在中文状态输入,结果是怎样的?
2、在第一次编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?
3、如何编辑一C程序,PB1、PB3、PB5、PB7上的发光二极管。
课题二Atmega8单片机输入端口练习
一、目的:
1、掌握用C语言定义AVR单片机引脚的输入功能,并理解打开上拉电阻的含义;
2、理解if…else条件判断语句;
3、初步掌握用AVRStudio4模拟调试AVR应用程序;
4、掌握用ISIS软件仿真电路;
二、要求:
按住S1,D1点亮;松开S1,D1熄灭。
三、仿真电路图:
图7-1
四、实训内容和步骤:
1、用ICCAVR编辑、编译下列C程序:
/*******************************************************
项目:
ATmega8单片机输入端口练习
芯片类型:
ATmega8
时钟:
8.000MHz
作者:
刘天旺
功能:
按住S1,D1点亮;松开S1,D1熄灭
*******************************************************/
#include
/*******************************************************
主函数
*******************************************************/
voidmain()
{
DDRB=0B00000001;//定义PB0为输出
DDRD=0B00000000;//定义PD0-PD7为输入
PORTD=0B00000100;//打开PD2的上拉
while
(1)//循环运行
{
if((PIND&0B00000100)==0B00000000)//判断S1是否按住
PORTB|=0B00000001;//如果按住,PB0输出高电平
else//否则
PORTB&=0B11111110;//PB0输出低电平
}
}
2、用AVRStudio4模拟调试上述程序。
3、利用ISIS软件,对上述程序进行仿真。
四、讨论题:
1、在利用AVRStudio4软件单步调试过程中,如何处理if((PIND&0B00000100)==0B00000000),才能使调试过程按要求顺利完成?
2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?
课题三自锁控制
一、目的:
1、理解算法的概念,基本掌握用流程图表示算法以及用流程图指导编程;
2、理解while循环语句以及它与if条件判断语句的异同;
3、逐步引导学生利用弱电控制强电;
二、要求:
按一下S1,即使松手后,D1一直被点亮,只有等到按一下S2后,D1才熄灭。
这里,S1相当于电力拖动控制线路中的启动按钮,S2相当于停止按钮。
三、仿真电路图:
图7-1
四、实训内容和步骤:
1、画出实现上述功能的流程图;
2、根据所画的流程图编辑、编译C程序:
/*******************************************************
项目:
自锁控制
芯片类型:
ATmega8
时钟:
8.000MHz
作者:
刘天旺
功能:
按一下S1,D1一直被点亮,直到按以下S2,D1才熄灭
*******************************************************/
#include
/*******************************************************
系统初始化函数
*******************************************************/
voidsys_init(void)
{
DDRB=0X01;//定义PB0为输出
PORTB=0X00;//PB0输出低电平
DDRD=0X00;//定义PD0-PD7为输入
PORTD=0X0C;//打开PD2-PD3上拉
}
/*******************************************************
主函数
*******************************************************/
voidmain()
{
sys_init();//调用初始化函数
while
(1)//循环运行
{
if((PIND&0X04)==0X00)//判断S1是否按下
PORTB=0X01;//如果按下PB0输出高电平
while((PIND&0X08)==0X00)//当S2按下
PORTB=0X00;//PB0输出低电平
}
}
2、用AVRStudio4模拟调试上述程序。
3、利用ISIS软件,对上述程序进行仿真。
4、将后缀为.hex的程序烧录到实验板上,分别按S1和S2,验证能否达到自锁的目的。
5、检查无误后驳接到电拖板,在教师指导下通电测试。
四、讨论题:
1、如果将程序中的while改为if,情况怎样?
2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?
课题四联锁正反转控制
一、目的:
1、进一步学习用流程图表示算法以及用流程图指导编程;
2、进一步理解while循环语句;
二、要求:
按一下S1,D1被点亮(正转);按一下S2后,D2被点亮(反转);按一下S3,D1、D2均熄灭(停止)。
三、仿真电路图:
图7-1
四、实训内容和步骤:
1、用ICCAVR编辑、编译下列C程序:
/*******************************************************
项目:
联锁正反转控制
芯片类型:
ATmega8
时钟:
8.000MHz
作者:
刘天旺
功能:
按一下S1,D1被点亮(正转);按一下S2,D2被点亮(反转);按一下S,D1、D2均熄灭(停止)。
*******************************************************/
#include
/*******************************************************
系统初始化函数
*******************************************************/
voidsys_init(void)
{
DDRB=0X03;//定义PB0、PB1为输出
PORTB=0X00;//PB0、PB1输出低电平
DDRD=0X00;//定义PD0-PD7为输入
PORTD=0X1C;//打开PD2-PD4上拉
}
/*******************************************************
主函数
*******************************************************/
voidmain()
{
sys_init();//调用初始化函数
while
(1)//循环运行
{
while((PIND&0X10)==0X00)//当S3按下
PORTB=0X00;//PB0、PB1输出低电平
while((PIND&0X04)==0X00)//当S1按下
{
if((PIND&0X04)==0X00)//如果S1按下
PORTB=0X01;//PB0输出高电平
while((PIND&0X10)==0X00)//当S3按下
PORTB=0X00;//PB0-PB7输出低电平
}
while((PIND&0X08)==0X00)//当S2按下
{
if((PIND&0X08)==0X00)//如果S2按下
PORTB=0X02;//PB1输出高电平
while((PIND&0X10)==0X00)//当S3按下
PORTB=0X00;//PB0-PB7输出低电平
}
}
}2、用AVRStudio4模拟调试上述程序。
3、利用ISIS软件,对上述程序进行仿真。
4、将后缀为.hex的程序烧录到实验板上,分别按S1、S2、S3,进行验证。
5、检查无误后驳接到电拖板,在教师指导下通电测试。
四、讨论题:
1、你能否编写出更加优化的程序?
2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?
课题五延时闪烁控制(软件延时)
一、目的:
1、正确理解for循环语句;
2、掌握C语言定义及调用延时函数的方法;
二、要求:
通电后,D1-D7延时闪烁。
三、仿真电路图:
图7-1
四、实训内容和步骤:
1、用ICCAVR编辑、编译下列C程序:
/*******************************************************
项目:
延时闪烁控制
芯片类型:
ATmega8
时钟:
8.000MHz
作者:
刘天旺
功能:
通电后,D1—D7延时闪烁。
*******************************************************/
#include
/*******************************************************
系统初始化函数
*******************************************************/
voidsys_init(void)
{
DDRB=0XFF;//定义PB0-PB7为输出
PORTB=0X00;//PB0-PB7输出低电平
}
/*******************************************************
延时函数
*******************************************************/
voiddelay(void)
{
inti,j;
for(i=0;i<500;i++)
for(j=0;j<1000;j++);
}
/*******************************************************
主函数
*******************************************************/
voidmain()
{
sys_init();//调用初始化函数
while
(1)//循环运行
{
PORTB=0XFF;//PB0-PB7输出高电平,点亮D1-D7
delay();//调用延时函数
PORTB=0X00;//PB0-PB7输出低电平,关闭D1-D7
delay();//调用延时函数
}
}
2、用AVRStudio4模拟调试上述程序(为提高仿真效率,在仿真之间先将延迟时间缩短)。
3、利用ISIS软件,对上述程序进行仿真。
四、讨论题:
1、如何调整LED闪烁的快慢?
2、调用延时函数时,将其改为“Delay();”,编译时会产生什么现象。
3、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?
课题六广告灯控制
一、目的:
1、掌握C语言按位移动的定义方式;
2、巩固C语言软件延时的定义方法;
二、要求:
通电后,D1-D7先从右到左依次产生亮、灭变化,然后从左到右依次产生亮、灭变化,如此循环。
三、仿真电路图:
图7-1
四、实训内容和步骤:
1、用ICCAVR编辑、编译下列C程序:
/*******************************************************
项目:
广告灯控制
芯片类型:
ATmega8
时钟:
8.000MHz
作者:
刘天旺
功能:
通电后,D1-D7先从右到左依次产生亮、灭变化,然后从左到右依次产生亮、灭变化,如此循环。
*******************************************************/
#include
/*******************************************************
系统初始化函数
*******************************************************/
voidsys_init(void)
{
DDRB=0XFF;//定义PB0-PB7为输出
PORTB=0X00;//PB0-PB7输出低电平
}
/*******************************************************
延时函数(延迟约0.1秒)
*******************************************************/
voiddelay(void)
{
inti,j;//定义两个整形变量
for(i=0;i<500;i++)
for(j=0;j<1000;j++);
}
/*******************************************************
LED点亮函数
*******************************************************/
voidLED_ON(inta)
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 学习 资料