单片机学习资料7.docx

上传人:b****7 文档编号:11198290 上传时间:2023-02-25 格式:DOCX 页数:25 大小:83.87KB
下载 相关 举报
单片机学习资料7.docx_第1页
第1页 / 共25页
单片机学习资料7.docx_第2页
第2页 / 共25页
单片机学习资料7.docx_第3页
第3页 / 共25页
单片机学习资料7.docx_第4页
第4页 / 共25页
单片机学习资料7.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

单片机学习资料7.docx

《单片机学习资料7.docx》由会员分享,可在线阅读,更多相关《单片机学习资料7.docx(25页珍藏版)》请在冰豆网上搜索。

单片机学习资料7.docx

单片机学习资料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//调用Tmega8寄存器头文件

/*******************************************************

主函数

*******************************************************/

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//调用Tmega8寄存器头文件

/*******************************************************

主函数

*******************************************************/

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//调用Tmega8寄存器头文件

/*******************************************************

系统初始化函数

*******************************************************/

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//调用Tmega8寄存器头文件

/*******************************************************

系统初始化函数

*******************************************************/

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//调用Tmega8寄存器头文件

/*******************************************************

系统初始化函数

*******************************************************/

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//调用Tmega8寄存器头文件

/*******************************************************

系统初始化函数

*******************************************************/

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)

{

PORTB=(0X01<

delay();//调用延时函数

}

/*******************************************************

主函数

*******************************************************/

voidmain()

{

inti;//定义一个整形变量

sys_init();//调用系统初始化函数

while

(1)//循环运行

{

for(i=0;i<8;i++)//左移8次

LED_ON(i);//调用LED点亮函数

for(i=8;i>0;i--)//右移8次

LED_ON(i);//调用LED点亮函数

}

}

2、用AVRStudio4模拟调试上述程序(为提高仿真效率,在仿真之间先将延迟时间缩短)。

3、利用ISIS软件,对上述程序进行仿真。

四、讨论题:

1、试编写先从左到右,然后从右到左循环变化的流水广告等控制程序?

2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?

 

课题七0-99循环显示控制

一、目的:

1、进一步学习用流程图表示算法以及用流程图指导编程;

2、进一步理解while循环语句;

二、要求:

通电后,两位数码管循环显示0-99。

三、仿真电路图:

图7-2

图7-2

四、实训内容和步骤:

1、用ICCAVR编辑、编译下列C程序:

/*******************************************************

项目:

0-99循环显示控制

芯片类型:

ATmega8

时钟:

8.000MHz

作者:

刘天旺

功能:

通电后,两位数码管循环显示0-99

*******************************************************/

#include//调用Tmega8寄存器头文件

#pragmadata:

code//声明定义一个BCD字型表

constunsignedtabs[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90};

#pragmadata:

data//声明定义一个数组

unsignedcharledbuff[2]={0,0};

/*******************************************************

系统初始化函数

*******************************************************/

voidsys_init(void)

{

DDRB=0XFF;//定义PB0-PB7为输出

DDRC=0X03;//定义PC0-PC1为输出

}

/*******************************************************

延时函数(大约延迟4ms)

*******************************************************/

voiddelay(void)

{

inti,j;//定义两个整形变量

for(i=0;i<4;i++)//两个for循环嵌套,大约消耗4ms

for(j=0;j<1000;j++);

}

/*******************************************************

数码管刷新显示

*******************************************************/

voidled_display(void)

{

unsignedchari;//定义一个无符号字符型变量

for(i=0;i<2;i++)

{

PORTB=tabs[ledbuff[i]];//从BCD字型码中查表

PORTC=(0X01<

delay();//调用延时函数

PORTC=0X00;//关闭显示

}

}

/*******************************************************

主函数

*******************************************************/

voidmain(void)

{

inti=0;//定义一个整形变量i

sys_init();//调用系统初始化函数

while

(1)//循环运行

{

i++;

ledbuff[0]=i%10;//i除以10的余数位赋给ledbuff[0]

ledbuff[1]=i/10;//i除以10的整数位赋给ledbuff[1]

if(i>99)//判断I是否大于99

{

i=0;//如果i>99,则i、ledbuff[0]、ledbuff[1]清零

ledbuff[0]=0;

ledbuff[1]=0;

}

led_display();//调用数码管显示函数

}

}

2、用AVRStudio4模拟调试上述程序。

3、利用ISIS软件,对上述程序进行仿真。

四、讨论题:

1、试编写0—9999循环显示的控制程序。

2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?

课题八中断实验

一、目的:

1、掌握中断的概念。

2、初步掌握利用C语言定义中断的方法;

二、要求:

通电后,D1-D7全部被点亮;当按住S1时,只有D1、D3、D5、D7被点亮;松开S1后,又全部被点亮。

三、仿真电路图:

图7-1

四、实训内容和步骤:

1、用ICCAVR编辑、编译下列C程序:

/*******************************************************

项目:

中断实验

芯片类型:

ATmega8

时钟:

8.000MHz

作者:

刘天旺

功能:

通电后,D1-D7全部被点亮;当按住S1时,只有D1、D3、D5、D7被点亮;松开S1后,又全部被点亮(使用外部中断INT0)。

*******************************************************/

#include//调用Tmega8寄存器头文件

#include//调用Tmega8寄存器头文件

/*******************************************************

系统初始化函数

*******************************************************/

voidsys_init(void)

{

DDRB=0Xff;//定义PB0—PB1为输出

PORTB=0Xff;//PB0-PB7输出高电平

DDRD=0X00;//定义D0-PD7输入

PORTD=0X04;//打开PD2内部上拉

GICR=0X40;//外部中断INT0使能

SEI();//全局中断使能

}

/************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1