单片机_AVR_流水灯_闹钟等

时间:2024.3.27

AVR单片机实验报告

班级:

学号:

班内序号:

姓名:

Email:

同组姓名:


实验一:流水灯的设计和实现

实验原理图:

实验原理:

    AVR单片机的高低电平和TTL电路的一致,即 高电平=5V,低电平=0V。AVR单片机的驱动能力比51单片机强,可以直接驱动LED。所以将8个LED二极管正极接在ATmega16的PD0~PD7端口,负极经过限流电阻接到GND,通过控制PD口的电平的高低,就可以实现LED的亮灭。

实验源程序:

实验程序使用iccavr编译器编译:

#include <iom16v.h>
#include<macros.h>

void delay(int ms)             //延时函数
{
    int i,j;
    for(i=ms;i>0;i--)
      for(j=0;j<1141;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 <iom16v.h>
#include <macros.h>

void delay(unsignedint ms)
{
    int i,j;
    for(i=0;i<ms;i++)
      for(j=0;j<1141;j++);
}
const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
                 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()
{
    int i,j;
    DDRA=0XFF;           //LED
    DDRB=0XFF;           //数码管1
    DDRD=0XFF;           //数码管2
    while(1)
    {
       for(i=2;i>=0;i--)        //绿灯
         {
            PORTA=0X01;
            PORTB=table[i];
            for(j=9;j>=0;j--)
            {
               PORTD=table[j];
                delay(1000);
            }
         }
      //黄灯
      PORTA=0X02;
      PORTB=table[0];
      for(j=9;j>=0;j--)
         {
            PORTD=table[j];
            delay(1000);
         }
      //红灯
      for(i=2;i>=0;i--)
         {
            PORTA=0X04;
            PORTB=table[i];
            for(j=9;j>=0;j--)
            {
               PORTD=table[j];
                delay(1000);
            }
         }
    }
}

2.动态实现:

#include <iom16v.h>
#include <macros.h>

void delay(unsignedint ms)
{
    int i,j;
    for(i=0;i<ms;i++)
      for(j=0;j<1141;j++);
}
const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
                 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

              
void main()
{
    int i,j,k;
    DDRD=0XFF;//位选
    DDRB=0XFF;//段选
    while(1)
    {
     //绿灯
    for(i=2;i>=0;i--)
      for(j=9;j>=0;j--)
         for(k=1;k<=500;k++)
            {
             PORTB=table[i];
             PORTD=0b11111010;
             delay(1);
             PORTB=table[j];
             PORTD=0b11111001;
             delay(1);
            }
   //黄灯
   for(i=0;i>=0;i--)
      for(j=9;j>=0;j--)
         for(k=1;k<=500;k++)
            {
             PORTB=table[i];
             PORTD=0b11110110;
             delay(1);
             PORTB=table[j];
             PORTD=0b11110101;
             delay(1);
            }
   //红灯
   for(i=2;i>=0;i--)
      for(j=9;j>=0;j--)
         for(k=1;k<=500;k++)
            {
             PORTB=table[i];
             PORTD=0b11101110;
             delay(1);
             PORTB=table[j];
             PORTD=0b11101101;
             delay(1);
            }
    }
}

实验心得:

通过学习,首先我学会了8段数码管的基本原理,以及共阴,共阳两种二极管的连接方式,还有二极管的两种控制方式:静态显示和动态显示。

其次,通过交通灯的程序编写,我进一步学习了单片机的C语言程序的编写,同时学会了在ICCAVR和AVR Studio中怎样软仿真调试程序和硬仿真调试,比如单步执行,设置断点,观察变量的地址和值的变化等。

实验三:蜂鸣器

实验原理图:

实验原理:

    与AVR 单片机的I/O口相关的寄存器有3个,DDRx,PORTx,PINx.通过C语言中的条件控制语句if语句,判断端口的寄存器的值,可以实现检测开关是否按下,编写程序控制蜂鸣器,使其在按键开关按下的时候鸣响。当开关断开时不响。

实验源程序:

#include <iom16v.h>
#include <macros.h>
int main(void)
{
 DDRD &= ~(1<<6);
 PORTD |= (1<<6);

 DDRA |= (1<<3);
 PORTA &= ~(1<<3);

   while (1)
   {
     if(PIND & (1<<6))
     {
        PORTA &= ~(1<<3);
      }
     else
       {
        PORTA |=(1<<3);
       }
   }
}

实验心得:

    通过学习,首先,我学会了蜂鸣器的电路原理以及在ATmega16最小系统下,将蜂鸣器接入电路的方式。

其次我学会了通过I/O的寄存器的值查询按键是否按下。编写程序,控制蜂鸣器的正极的电平的高低,使得在开关按下的时候,蜂鸣器正极为高电平,当开关断开时,蜂鸣器的正极为低电平。

实验四:秒表计时器

实验原理图:

实验原理:

    当计算机执行正常程序时,系统中会出现某些急需处理的异常情况和特殊请求,此时CPU会暂时中止执行程序,转去对随机发生的更为紧迫的事件进行处理,处理完毕后,CPU自动返回原来的程序继续执行,此过程就叫做中断。实现中断功能的硬件和软件统称为中断系统。

    ATmega16单片机中有2个8位和1个16位定时/计数器。可以利用定时/计数器和中断来实现秒表的功能。

实验源程序:

#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
uchar num=0;
#pragma interrupt_handler miao:9

const  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;i<ms;i++)
      {
      for(j=0;j<1141;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=table[num/10];
      PORTD=table[num%10];
   }
}

实验心得:

    通过这个实验,首先我了解了中断的含义。

其次,我了解了ATmega16单片机的内部中断源有哪些,中断的触发方式和中断函数的编写。

并且,我了解了ATmega16单片机内部的计数器的工作原理和分类。通过计数器和中断函数的编写,可以实现秒表的功能。

实验 过程&结果

实验心得:

通过这次AVR单片机的实验,我学习到了很多知识。

实验的第一天,我们听老师讲解了一些关于单片机的内容后,就开始看教学视频和相关的资料学习AVR单片机。在假期的时候,我预习了一下单片机的内容,从图书馆内借了几本关于51单片机的书。直到第一天上课,我才知道我们学习的是AVR单片机。于是我到图书馆里面又借了几本关于AVR的书。

从第二天开始,我和我的搭档领到实验板和实验器材后,就开始正式的学习。在接下来的4天时间里,我通过看视频教程和相关的技术文档,还有图书馆的书,比较全面地了解了一些AVR单片机的知识。从最基础的I/O的控制,到中断系统的使用,以及一些其他的原件的使用,比如蜂鸣器,按键开关,共阴极8段数码管等。通过学习,我们做了4个小实验,分别是流水灯,交通灯,蜂鸣器和秒表计数器。

在做这4个小实验的时候,由于我们一开始学习的知识不是很多,对开发板和其他原件的使用方法不够了解,出现了一些莫名其妙的问题,我们开始以为是自己的开发板出现故障,后来在老师的指导下,我学会了逐步检查电路的问题,按照一定的次序,我逐一检查,最后终于发现问题,并解决问题。在实验过程中,我遇到的问题可以分为两类:软件和硬件。在软件方面,我学习了两种编译器的使用,分别是ICCAVR和GCC编译器。在不同的编译器内,有不同的函数和定义,所以,在编译仿真的时候,我一开始遇到了一些软件方面的问题,比如编译失败,下载不到板子上等。后来,经过查阅书籍,我基本上掌握了他们的区别和联系,可以保证编译,下载不出问题。在硬件方面,我遇到的问题主要是连线问题和原件出故障。后来听老师讲解,发现是自己连接的时候没有限流导致故障。原件出故障后,换了一个新的以后问题也解决了。

综合实验,由于小车不够,我和同组的郭晋开始着手写计划和流程图。经过再三考虑我们决定做一个电子钟,因为这个涉及到了DS1302芯片的使用,需要查阅更多资料,而且在完成基本功能的同时,还可以添加其他附加的东西。由于对整个单片机的运行机制并不了解,所以在写流程图的时候,我们只用了最平实的框架描述,为后来的编程打了个草稿。可实现性我们写得比较详细,我觉得这个对我们后来的功能拓展帮助很大。

       第二天我们开始编程,我负责液晶的初始化和显示。遇到了很多困难,首先就是不知道该从哪下手,因为我并没有在书上找到类似的例子,最后通过请教其他同学才知道应该多看教学视频,但是没太看懂,最后在参考了别人的程序后,我明白了液晶屏显示的原理,最后初始化和显示成功了。

       之后我们很容易的完成了键盘和液晶连接,然后我们就开始着手DS1302的研究。手头只有一份英文的芯片说明,看了一天也只明白了个大概。晚上回寝室的时候,我上网查了很多资料,有中文的说明,也有其他语言编写的程序。第二天到机房继续研究,基本搞明白了芯片的读写原理,开始编程。编程的过程并不顺利,我们总是遇到一个个误区,困惑很长时间才明白过来,然后继续写。通过这次对DS1302芯片的研究,我认为当接触一个新的芯片时,首先要了解的就是芯片各个管脚的使用,哪些管脚是由单片机控制的,哪些管脚接高低电平;其次应该知道芯片的读写原理,是利用时钟的上升沿还是下降沿;编写好程序之后,最好采用硬件调测,观察芯片中数据的变化,是否和自己所了解的一样。因为判别哪些是芯片的功能,哪些是编程来实现的事在调测中不断发现的。

小学期后期的大部分时间都是在不断调测中度过的,不断编写、下载、检测……正如老师所说的那样,一个困难摆在面前是巨大的,但当解决以后才发现也许只是一个小问题,但发现问题的过程却十分困难。在这次小学期的过程中,我觉得锻炼最大的就是发现问题的能力,有些问题能一直困扰我们好几天。比如上下午的翻转问题,我们研究了快四天,有时候实在没有思路,就先编写其他功能,然后再想这个问题。但克服了这个困难之后,我们的编程能力一下提高很多,思路开阔了不少,接下来的编程都十分的轻松。

       另外,在写实验报告的时候,我们才开始真正理清了设计思路,或者说两个人的设计才更好的整合。我想如果当初在开始编程之前,对单片机的了解更透彻,设计好步骤,各个子程序,一定会大大提高我们的工作效率。我想在以后的学习中都是值得借鉴的一点。

       最后我想说的是,两个人的协作问题。这次小学期,我和郭晋的合作十分愉快,既有独立工作的一面,也有共同协作的一面。刚开始的键盘和液晶是我们分开完成的,但开始入手DS1302的时候,遇到的问题大家便开始一起讨论,分析问题产生的原因。如果一方遇到了困难,就会告诉另一个人自己的设计思路,让他帮助查找错误。有时候我们遇到了问题,很长时间都没有结果,我们就静下心来休息一会,这之后往往会有答案。我想两人一组的实验,并不是要依靠谁强谁的工作量就大,而是大家都不断努力,始终保持同样的步伐。

       三周的单片机小学期,我的收获很多,也发现了自己的更多潜能。在接下来的学习中,我会更加努力,善于思考,勇于创新。


第二篇:单片机流水灯


电子信息工程学系实验报告

课程名称:单片机原理及接口(应用)                             

实验项目名称:实验二 流水灯实验        实验时间:2011.10.21       

班级:                       姓名:                  学号:     

                                                                                                                                             

:

进一步熟悉keil仿真软件、proteus仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。

境:

软件:KEIL C51单片机仿真调试软件,proteus系列仿真调试软件

理:

51单片机具有的输入输出接口: P0、P1、P2、P3    4个8位双向I/O口。

I/0口端口功能:

P0口:P0口可以作为输入/输出口,低8位地址与数据线分时使用P0口。

P1口:P1口作为可编程的输入或输出口线。

P2口:P2口可作为输入口或输出口使用,输出高8位地址,与P0口一起组成16位地址总线,P2口一般只作为地址总线使用,而不作为I/O口线直接与外设想连接。

P3口:P3口为双功能口。

                                     P1口的位结构

并行I/0口使用时应注意事项:

1。如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个口均可作I/O口使用。

2。四个口在作输入口使用时,均应先对其写“1”,以避免误读。

3。P0口作I/O口使用时应外接10K的上拉电阻,其它口则可不必。

4。P2可某几根线作地址使用时,剩下的线不能作I/O口线使用。

5。P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用。

、过:

用proteus或其他仿真软硬件设计流水灯电路,将仿真实验板上51单片机的P1口的8根线与实验板上的8位LED灯连接,I/O口的一根引脚控制一个LED灯。根据实验板上LED灯的硬件连接,编写程序使8个LED灯从最低位依次点亮,每次只亮一盏灯。依此循环。在此基础上编写程序使8个LED灯从两边向中间循环点亮。

1. 使用keil仿真软件编写程序和使用c51编写并进行调试。

         

             新建工程                                      创建HEX文件

                                       选择CPU

用protues进行流水灯的仿真需要的元件有AT89C51、CAP、BUTTON、LED-BLUE、RES、CRYSTAL、

画出仿真图

                                            Protues仿真界面

                                         流水灯仿真图


程序1:

#include<reg51.h>

void delay(int z)

   {int i,j;

    for(i=110;i>0;i--)

     for(j=z;j>0;j--);

   }

main()

{unsigned char i;

while(1)

{P0=0xfe;

delay(1000);

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

 { P0=P0<<1;

   P0=P0+0x01;

  delay(1000);

  }

}

 }

程序2:

#include<reg51.h>

void delay(int z)

   {int i,j;

    for(i=110;i>0;i--)

     for(j=z;j>0;j--);

   }

main()

{unsigned char i;

int temp1,temp2;

while(1)

{temp1=0xfe;

temp2=0x7f;

P0=temp1&temp2;

delay(1000);

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

 {temp1=temp1<<1;

  temp1=temp1+1;

  temp2=temp2>>1;

  temp2=temp2+0x80;

  P0=temp1&temp2;

  delay(1000);

  }

}

 }


8个LED灯从最低位依次点亮,每次只亮一盏灯。依此循环。结果图如下所示;8个LED灯从两边向中间循环点亮。实验结果如下图所示

   

            循环亮一盏等图                            从两边向中循环亮灯图

得:

通过这次实验进一步熟悉keil仿真软件、proteus仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。

更多相关推荐:
单片机实验报告——流水灯

电子信息工程学系实验报告课程名称:单片机原理及接口实验项目名称:实验2流水灯实验时间:20xx-10-21班级:电信092姓名:蔡**学号:*********一、实验目的:进一步熟悉keil仿真软件、prote…

51单片机流水灯实验报告

51单片机流水灯试验一实验目的1了解51单片机的引脚结构2根据所学汇编语言编写代码实现LED灯的流水功能3利用开发板下载hex文件后验证功能二实验器材个人电脑80c51单片机开发板三实验原理单片机流水的实质是单...

单片机流水灯实验报告

单片机流水灯实验报告一实验目的1熟练掌握AT89S52型开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KEIL软件编辑编译源汇编程序的操作方法4掌握应用USBISP烧录软件的操作方法5帮...

单片机并口简单应用(流水灯)实验报告

实验一单片机并口简单应用流水灯一实验目的1了解单片机汇编语言程序的基本结构2了解单片机汇编语言程序的设计和调试方法3掌握顺序控制程序的简单编程二实验仪器单片机开发板万利仿真机稳压电源计算机三实验原理1流水灯硬件...

单片机花样流水灯设计实验报告

大学物理学院单片机花样流水灯设计实验课题花样流水灯设计班级物理姓名学号摘要当今时代的智能控制电子技术给人们的生活带来了方便和舒适而每到晚上五颜六色的霓虹灯则把我们的城市点缀得格外迷人为人们生活增添了不少色彩制作...

单片机实验报告花样流水灯

电子工艺学考试作品报告作品名称花样流水灯姓名专业班级学号中南大学物理与电子学院1目录第一章系统整体概述第二章第三章第四章第五章硬件设计软件设计调试与分析制作感受2摘要当今时代的智能控制电子技术给人们的生活带来了...

单片机流水灯实验报告 (2)

流水灯实验报告一实验目的1熟练掌握AT89S52开发板的使用方法和注意事项2了解简单单片机应用系统的设计方法3掌握应用KEIL软件编辑编译源汇编程序的操作方法4掌握应用AVRFIGHT烧录软件的操作方法二实验内...

单片机实验报告一--汇编程序之流水灯

单片机实验实验报告实验序号2实验项目名称汇编程序实现流水灯

C51单片机实验报告 流水灯 交通灯 定时器 双机交互 时钟

学号31100800班级自动化10班姓名张指导老师胡20xx12单片机核心板实验要求一流水灯实验1实验目的1简单IO引脚的输出2掌握软件延时编程方法3简单按键输入捕获判断2完成功能要求1开机是点亮12发光二极管...

单片机流水灯实验

单片机流水灯实验一仿真图一代码org0000hflagequ100hmovflag1MAINMOVR7flagCJNER71LABELmode1MOVR10xfemovr20DSUP1MOVR3P1CJNER3...

单片机并口简单应用(流水灯)实验报告.doc

实验一单片机并口简单应用流水灯实验目的1了解单片机汇编语言程序的基本结构2了解单片机汇编语言程序的设计和调试方法3掌握顺序控制程序的简单编程实验仪器单片机开发板万利仿真机稳压电源计算机实验原理1流水灯硬件电路如...

单片机实验报告-流水灯-双机通信-交通灯-定时时钟

实验一流水灯实验一实验目的1简单IO引脚的输出2掌握软件延时编程方法3简单按键输入捕获判断二实验实现的功能1开机是点亮12发光二极管闪烁三下2按照顺时针循环依次点亮发光二极管3通过按键将发光二极管的显示改为顺逆...

单片机流水灯实验心得(21篇)