1、单片机学习资料7七 Atmega8单片机训练课题课题一 Atmega8单片机输出端口练习一、目的:1、掌握用C语言定义AVR单片机引脚的输出功能;2、熟悉用二进制计数的方法;3、初步了解用AVR Studio4模拟调试AVR应用程序;4、初步掌握用ISIS软件仿真电路;二、要求:用Atmega8单片机PB0、PB2、PB3三个I/O口,点亮相应的发光二极管。三、仿真电路图:图7-1图7-1四、实训内容和步骤:1、用ICC AVR编辑、编译下列C程序:/*项目:ATmega8单片机输出端口练习芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:点亮PB0、PB1、PB2口的发光二极管
2、*/#include /调用Tmega8寄存器头文件/* 主函数*/void main() DDRB=0B00000111;/定义PB0-PB2为输出 while(1) /循环运行 PORTB=0B00000111;/PB0-PB2输出高电平2、用AVR Studio4模拟调试上述程序。3、利用ISIS软件,根据图7-1画出仿真电路,并将编译正确的、后缀为.cof的程序烧录后进行仿真。四、讨论题:1、利用ICC AVR编辑C程序时,每条语句后的“;”是在英文状态输入,还是在中文状态输入。如果改为在中文状态输入,结果是怎样的?2、在第一次编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?
3、3、如何编辑一C程序,PB1、PB3、PB5、PB7上的发光二极管。课题二 Atmega8单片机输入端口练习一、目的:1、掌握用C语言定义AVR单片机引脚的输入功能,并理解打开上拉电阻的含义;2、理解ifelse条件判断语句;3、初步掌握用AVR Studio4模拟调试AVR应用程序;4、掌握用ISIS软件仿真电路;二、要求:按住S1,D1点亮;松开S1,D1熄灭。三、仿真电路图:图7-1四、实训内容和步骤:1、用ICC AVR编辑、编译下列C程序:/*项目:ATmega8单片机输入端口练习芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:按住S1,D1点亮;松开S1,D1熄灭*
4、/#include /调用Tmega8寄存器头文件/* 主函数*/void main() 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、用AVR Studio4模拟调试上述程序。3、利用ISIS软件,对上述程序进行仿真。四、
5、讨论题:1、在利用AVR Studio4软件单步调试过程中,如何处理if(PIND&0B00000100)=0B00000000),才能使调试过程按要求顺利完成?2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?课题三 自锁控制一、目的:1、理解算法的概念,基本掌握用流程图表示算法以及用流程图指导编程;2、理解while循环语句以及它与if条件判断语句的异同;3、逐步引导学生利用弱电控制强电;二、要求:按一下S1,即使松手后,D1一直被点亮,只有等到按一下S2后,D1才熄灭。这里,S1相当于电力拖动控制线路中的启动按钮,S2相当于停止按钮。三、仿真电路图:图7-1四、实训内容和步骤
6、:1、画出实现上述功能的流程图;2、根据所画的流程图编辑、编译C程序:/*项目:自锁控制芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:按一下S1,D1一直被点亮,直到按以下S2,D1才熄灭*/#include /调用Tmega8寄存器头文件/*系统初始化函数 */void sys_init(void) DDRB=0X01;/定义PB0为输出 PORTB=0X00;/PB0输出低电平 DDRD=0X00;/定义PD0-PD7为输入 PORTD=0X0C;/打开PD2-PD3上拉/* 主函数*/void main() sys_init();/调用初始化函数 while(1) /循
7、环运行 if(PIND&0X04)=0X00)/判断S1是否按下 PORTB=0X01;/如果按下PB0输出高电平 while(PIND&0X08)=0X00) /当S2按下 PORTB=0X00;/PB0输出低电平 2、用AVR Studio4模拟调试上述程序。3、利用ISIS软件,对上述程序进行仿真。4、将后缀为.hex的程序烧录到实验板上,分别按S1和S2,验证能否达到自锁的目的。5、检查无误后驳接到电拖板,在教师指导下通电测试。四、讨论题:1、如果将程序中的while改为if,情况怎样?2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?课题四 联锁正反转控制一、目的:1、进
8、一步学习用流程图表示算法以及用流程图指导编程;2、进一步理解while循环语句;二、要求:按一下S1,D1被点亮(正转);按一下S2后,D2被点亮(反转);按一下S3,D1、D2均熄灭(停止)。三、仿真电路图:图7-1四、实训内容和步骤:1、用ICC AVR编辑、编译下列C程序:/*项目:联锁正反转控制芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:按一下S1,D1被点亮(正转);按一下S2,D2被点亮(反转);按一下S,D1、D2均熄灭(停止)。*/#include /调用Tmega8寄存器头文件/*系统初始化函数 */void sys_init(void) DDRB=0X0
9、3;/定义PB0、PB1为输出 PORTB=0X00;/PB0、PB1输出低电平 DDRD=0X00;/定义PD0-PD7为输入 PORTD=0X1C;/打开PD2-PD4上拉/* 主函数*/void main() 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)/当S
10、3按下 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、用AVR Studio4模拟调试上述程序。3、利用ISIS软件,对上述程序进行仿真。4、将后缀为.hex的程序烧录到实验板上,分别按S1、S2 、S3,进行验证。5、检查无误后驳接到电拖板,在教师指导下通电测试。四、讨论题:1、你能否编写出更加优化的程序?2、编译程
11、序时,提示栏给你提出了哪些错误提示,你是如何解决的?课题五 延时闪烁控制(软件延时)一、目的:1、正确理解for循环语句;2、掌握C语言定义及调用延时函数的方法;二、要求:通电后,D1-D7延时闪烁。三、仿真电路图:图7-1四、实训内容和步骤:1、用ICC AVR编辑、编译下列C程序:/*项目:延时闪烁控制芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:通电后,D1D7延时闪烁。*/#include /调用Tmega8寄存器头文件/*系统初始化函数 */void sys_init(void) DDRB=0XFF;/定义PB0-PB7为输出 PORTB=0X00;/PB0-PB7
12、输出低电平/* 延时函数*/void delay(void) int i,j; for(i=0;i500;i+) for(j=0;j1000;j+);/* 主函数*/void main() sys_init();/调用初始化函数 while(1) /循环运行 PORTB=0XFF;/PB0-PB7输出高电平,点亮D1-D7 delay();/调用延时函数 PORTB=0X00;/PB0-PB7输出低电平,关闭D1-D7 delay();/调用延时函数 2、用AVR Studio4模拟调试上述程序(为提高仿真效率,在仿真之间先将延迟时间缩短)。3、利用ISIS软件,对上述程序进行仿真。四、讨论题
13、:1、如何调整LED闪烁的快慢?2、调用延时函数时,将其改为“Delay();”,编译时会产生什么现象。3、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?课题六 广告灯控制一、目的:1、掌握C语言按位移动的定义方式;2、巩固C语言软件延时的定义方法;二、要求:通电后,D1-D7先从右到左依次产生亮、灭变化,然后从左到右依次产生亮、灭变化,如此循环。三、仿真电路图:图7-1四、实训内容和步骤:1、用ICC AVR编辑、编译下列C程序:/*项目:广告灯控制芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:通电后,D1-D7先从右到左依次产生亮、灭变化,然后从左到右依次产生
14、亮、灭变化,如此循环。*/#include /调用Tmega8寄存器头文件/*系统初始化函数 */void sys_init(void) DDRB=0XFF;/定义PB0-PB7为输出 PORTB=0X00;/PB0-PB7输出低电平/* 延时函数(延迟约0.1秒)*/void delay(void) int i,j;/定义两个整形变量 for(i=0;i500;i+) for(j=0;j1000;j+);/* LED点亮函数*/void LED_ON(int a) PORTB=(0X01a);/按位左移a delay();/调用延时函数/* 主函数*/void main() int i;/定
15、义一个整形变量 sys_init();/调用系统初始化函数 while(1) /循环运行 for(i=0;i0;i-)/右移8次 LED_ON(i);/ 调用LED点亮函数 2、用AVR Studio4模拟调试上述程序(为提高仿真效率,在仿真之间先将延迟时间缩短)。3、利用ISIS软件,对上述程序进行仿真。四、讨论题:1、试编写先从左到右,然后从右到左循环变化的流水广告等控制程序?2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?课题七 0-99循环显示控制一、目的:1、进一步学习用流程图表示算法以及用流程图指导编程;2、进一步理解while循环语句;二、要求:通电后,两位数码管循
16、环显示0-99。三、仿真电路图:图7-2图7-2四、实训内容和步骤:1、用ICC AVR编辑、编译下列C程序:/*项目:0-99循环显示控制芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:通电后,两位数码管循环显示0-99*/#include /调用Tmega8寄存器头文件#pragma data:code /声明定义一个BCD字型表const unsigned tabs=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;#pragma data:data /声明定义一个数组unsigned char ledbuff2=0,0;
17、/* 系统初始化函数*/void sys_init(void) DDRB=0XFF;/定义PB0-PB7为输出 DDRC=0X03;/定义PC0-PC1为输出/* 延时函数(大约延迟4ms)*/void delay(void) int i,j;/定义两个整形变量 for(i=0;i4;i+)/两个for循环嵌套,大约消耗4ms for(j=0;j1000;j+);/* 数码管刷新显示*/void led_display(void) unsigned char i;/定义一个无符号字符型变量 for(i=0;i2;i+) PORTB=tabsledbuffi;/从BCD字型码中查表 PORTC=
18、(0X0199)/判断I是否大于99 i=0;/如果i99,则i、ledbuff0、ledbuff1清零 ledbuff0=0; ledbuff1=0; led_display();/调用数码管显示函数 2、用AVR Studio4模拟调试上述程序。3、利用ISIS软件,对上述程序进行仿真。四、讨论题:1、试编写09999循环显示的控制程序。2、编译程序时,提示栏给你提出了哪些错误提示,你是如何解决的?课题八 中断实验一、目的:1、 掌握中断的概念。2、 初步掌握利用C语言定义中断的方法;二、要求:通电后,D1-D7全部被点亮;当按住S1时,只有D1、D3、D5、D7被点亮;松开S1后,又全部
19、被点亮。三、仿真电路图:图7-1四、实训内容和步骤:1、用ICC AVR编辑、编译下列C程序:/*项目:中断实验芯片类型:ATmega8时钟:8.000MHz作者:刘天旺功能:通电后,D1-D7全部被点亮;当按住S1时,只有D1、D3、D5、D7被点亮;松开S1后,又全部被点亮(使用外部中断INT0)。*/#include /调用Tmega8寄存器头文件#include/调用Tmega8寄存器头文件/* 系统初始化函数*/void sys_init(void) DDRB=0Xff;/定义PB0PB1为输出 PORTB=0Xff;/PB0-PB7输出高电平 DDRD=0X00;/定义D0-PD7输入 PORTD=0X04;/打开PD2内部上拉 GICR=0X40;/外部中断INT0使能 SEI();/全局中断使能/*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1