单片机_AVR_流水灯_闹钟等.doc_第1页
单片机_AVR_流水灯_闹钟等.doc_第2页
单片机_AVR_流水灯_闹钟等.doc_第3页
单片机_AVR_流水灯_闹钟等.doc_第4页
单片机_AVR_流水灯_闹钟等.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR单片机实验报告班级:学号:班内序号:姓名: Email: 同组姓名:实验一:流水灯的设计和实现实验原理图:实验原理: AVR单片机的高低电平和TTL电路的一致,即 高电平=5V,低电平=0V。AVR单片机的驱动能力比51单片机强,可以直接驱动LED。所以将8个LED二极管正极接在ATmega16的PD0PD7端口,负极经过限流电阻接到GND,通过控制PD口的电平的高低,就可以实现LED的亮灭。实验源程序:实验程序使用iccavr编译器编译:#include #includevoid delay(int ms) /延时函数 int i,j; for(i=ms;i0;i-) for(j=0;j1141;j+);void main() int i; DDRA=0XFF;/配置PD端口为输出 while(1) for(i=0;i=7;i+)/循环逐次显示每个LED二极管 PORTA|=BIT(i);delay(1000);PORTA&=BIT(i); 实验心得体会:通过学习,首先我了解了一些关于单片机的知识,包括单片机的分类,功能等,还有软硬件结合编程使用单片机,单片机的编程语言和EDA的使用,比如ICCAVR,AVR Studio 4等。其次我了解了AVR单片机的一些基本知识,学会了控制端口的输入输出方向,和电平的高低的方法。同时,AVR单片机的C语言编程基本和标准C语言一致,它在C语言的基础上,添加了一些适合单片机的头文件。所以,在编程方面我遇到的障碍不是很大。我觉得最大的收获是学会怎么看相关的技术文档,技术文档一般内容很多,并且都是以前没有学过的知识,所以快速的查阅到自己想看的内容,是一件很有学问的能力。实验二:交通灯实验原理图:实验原理:数码管有共阴和共阳两种,8段数码管由8段LED组成,共阴极数码管的8段LED的阴极相连,共用一个阴极;共阳极数码管的8段LED的阳极相连,共用一个阳极。控制数码管的方式有两种。第一种为静态显示,这种方式的优点是原理简单,编写程序容易,而且二极管的亮度比较亮,缺点是占用的端口多,单片机上的I/O口资源很珍贵,所以这种方式一般不采用。第二种是动态控制显示二级管,这种方式的优点是节省端口资源,缺点是程序编写不容易,而且,二极管的亮度比较暗。实验源程序:1.静态实现:#include #include void delay(unsigned int ms) int i,j; for(i=0;ims;i+) for(j=0;j=0;i-) /绿灯 PORTA=0X01;PORTB=tablei;for(j=9;j=0;j-) PORTD=tablej;delay(1000);/黄灯PORTA=0X02;PORTB=table0;for(j=9;j=0;j-)PORTD=tablej;delay(1000);/红灯for(i=2;i=0;i-) PORTA=0X04;PORTB=tablei;for(j=9;j=0;j-) PORTD=tablej;delay(1000); 2.动态实现:#include #include void delay(unsigned int ms) int i,j; for(i=0;ims;i+) for(j=0;j=0;i-) for(j=9;j=0;j-)for(k=1;k=0;i-) for(j=9;j=0;j-)for(k=1;k=0;i-) for(j=9;j=0;j-)for(k=1;k=500;k+) PORTB=tablei; PORTD=0b11101110; delay(1); PORTB=tablej; PORTD=0b11101101; delay(1); 实验心得:通过学习,首先我学会了8段数码管的基本原理,以及共阴,共阳两种二极管的连接方式,还有二极管的两种控制方式:静态显示和动态显示。其次,通过交通灯的程序编写,我进一步学习了单片机的C语言程序的编写,同时学会了在ICCAVR和AVR Studio中怎样软仿真调试程序和硬仿真调试,比如单步执行,设置断点,观察变量的地址和值的变化等。实验三:蜂鸣器实验原理图:实验原理: 与AVR 单片机的I/O口相关的寄存器有3个,DDRx,PORTx,PINx.通过C语言中的条件控制语句if语句,判断端口的寄存器的值,可以实现检测开关是否按下,编写程序控制蜂鸣器,使其在按键开关按下的时候鸣响。当开关断开时不响。实验源程序:#include #include int main(void) DDRD &= (16); PORTD |= (16); DDRA |= (13); PORTA &= (13); while (1) if(PIND & (16) PORTA &= (13); else PORTA |=(13); 实验心得: 通过学习,首先,我学会了蜂鸣器的电路原理以及在ATmega16最小系统下,将蜂鸣器接入电路的方式。其次我学会了通过I/O的寄存器的值查询按键是否按下。编写程序,控制蜂鸣器的正极的电平的高低,使得在开关按下的时候,蜂鸣器正极为高电平,当开关断开时,蜂鸣器的正极为低电平。实验四:秒表计时器实验原理图:实验原理: 当计算机执行正常程序时,系统中会出现某些急需处理的异常情况和特殊请求,此时CPU会暂时中止执行程序,转去对随机发生的更为紧迫的事件进行处理,处理完毕后,CPU自动返回原来的程序继续执行,此过程就叫做中断。实现中断功能的硬件和软件统称为中断系统。 ATmega16单片机中有2个8位和1个16位定时/计数器。可以利用定时/计数器和中断来实现秒表的功能。实验源程序:#include #include #define uchar unsigned char#define uint unsigned intuchar num=0;#pragma interrupt_handler miao:9const table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uint ms) uint i,j;for(i=0;ims;i+) for(j=0;j1141;j+); void miao() if(num=60) num=0; num+;TCNT1H=0X85;TCNT1L=0XED;void main() TCCR1B=0X04;/控制寄存器,分频TCNT1H=0X85;/计数器寄存器TCNT1L=0XED; /TIMSK|=BIT(2);/中断屏蔽寄存器SREG|=BIT(7);/DDRB=0XFF;DDRD=0XFF;while(1) PORTB=tablenum/10;PORTD=tablenum%10;实验心得: 通过这个实验,首先我了解了中断的含义。其次,我了解了ATmega16单片机的内部中断源有哪些,中断的触发方式和中断函数的编写。并且,我了解了ATmega16单片机内部的计数器的工作原理和分类。通过计数器和中断函数的编写,可以实现秒表的功能。实验 过程&结果实验心得:通过这次AVR单片机的实验,我学习到了很多知识。实验的第一天,我们听老师讲解了一些关于单片机的内容后,就开始看教学视频和相关的资料学习AVR单片机。在假期的时候,我预习了一下单片机的内容,从图书馆内借了几本关于51单片机的书。直到第一天上课,我才知道我们学习的是AVR单片机。于是我到图书馆里面又借了几本关于AVR的书。从第二天开始,我和我的搭档领到实验板和实验器材后,就开始正式的学习。在接下来的4天时间里,我通过看视频教程和相关的技术文档,还有图书馆的书,比较全面地了解了一些AVR单片机的知识。从最基础的I/O的控制,到中断系统的使用,以及一些其他的原件的使用,比如蜂鸣器,按键开关,共阴极8段数码管等。通过学习,我们做了4个小实验,分别是流水灯,交通灯,蜂鸣器和秒表计数器。在做这4个小实验的时候,由于我们一开始学习的知识不是很多,对开发板和其他原件的使用方法不够了解,出现了一些莫名其妙的问题,我们开始以为是自己的开发板出现故障,后来在老师的指导下,我学会了逐步检查电路的问题,按照一定的次序,我逐一检查,最后终于发现问题,并解决问题。在实验过程中,我遇到的问题可以分为两类:软件和硬件。在软件方面,我学习了两种编译器的使用,分别是ICCAVR和GCC编译器。在不同的编译器内,有不同的函数和定义,所以,在编译仿真的时候,我一开始遇到了一些软件方面的问题,比如编译失败,下载不到板子上等。后来,经过查阅书籍,我基本上掌握了他们的区别和联系,可以保证编译,下载不出问题。在硬件方面,我遇到的问题主要是连线问题和原件出故障。后来听老师讲解,发现是自己连接的时候没有限流导致故障。原件出故障后,换了一个新的以后问题也解决了。综合实验,由于小车不够,我和同组的郭晋开始着手写计划和流程图。经过再三考虑我们决定做一个电子钟,因为这个涉及到了DS1302芯片的使用,需要查阅更多资料,而且在完成基本功能的同时,还可以添加其他附加的东西。由于对整个单片机的运行机制并不了解,所以在写流程图的时候,我们只用了最平实的框架描述,为后来的编程打了个草稿。可实现性我们写得比较详细,我觉得这个对我们后来的功能拓展帮助很大。第二天我们开始编程,我负责液晶的初始化和显示。遇到了很多困难,首先就是不知道该从哪下手,因为我并没有在书上找到类似的例子,最后通过请教其他同学才知道应该多看教学视频,但是没太看懂,最后在参考了别人的程序后,我明白了液晶屏显示的原理,最后初始化和显示成功了。之后我们很容易的完成了键盘和液晶连接,然后我们就开始着手DS1302的研究。手头只有一份英文的芯片说明,看了一天也只明白了个大概。晚上回寝室的时候,我上网查了很多资料,有中文的说明,也有其他语言编写的程序。第二天到机房继续研究,基本搞明白了芯片的读写原理,开始编程。编程的过程并不顺利,我们总是遇到一个个误区,困惑很长时间才明白过来,然后继续写。通过这次对DS1302芯片的研究,我认为当接触一个新的芯片时,首先要了解的就是芯片各个管脚的使用,哪些管脚是由单片机控制的,哪些管脚接高低电平;其次应该知道芯片的读写原理,是利用时钟的上升沿还是下降沿;编写好程序之后,最好采用硬件调测,观察芯片中数据的变化,是否和自己所了解的一样。因为判别哪些是芯片的功能,哪些是编程来实现的事在调测中不断发现的。小学期后期的大部分时间都是在不断调测中度过的,不断编写、下载、检测正如老师所说的那样,一个困难摆在面前是巨大的,但当解决以后才发现也许只是一个小问题,但发现问题的过程却十分困难。在这次小学期的过程中,我觉得锻炼最大的就是发现问题的能力,有些问题能一直困扰我们好几天。比如上下午的翻转问题,我们研究了快四天,有时候实在没有思路,就先编写其他功能,然后再想这个问题。但克服了这个困难之后,我们的编程能力一下提高很多,思路开阔了不少,接下来的编程都十分的轻松。另外,在写实验报告的时候,我们才开始真正理清了设计思路,或者说两个人的设计才更好的整合。我想如果当初在开始编程之前,对单片机的了解更透彻,设计好步骤,各个子程序,一定会大大提高我们的工作效率。我想在以后的学习中都是值得借鉴的一点。最后我想说的是,两个人的协作问题。这次小学期,我和郭晋的合作十分愉快,既有独立工作的一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论