最新单片机实习报告~完整版

时间:2024.3.31

关于单片机应用实习的实习报告

一、实习目的

本次实习的目的在于加深对MCS-51单片机的理解,初步掌握单片机应用系统的设计方法;掌握常用接口芯片的正确使用方法;强化单片机应用电路的设计与分析能力;提高学生在单片机应用方面的实践技能;培育学生综合运用理论知识解决问题的能力,力求实现理论结合实际,学以至用的原则。

二、设计题目: 单片机数据采集系统设计

三、功能描述

1.实时采集0-5V的电压信号;

2.将采集的0-5V的电压信号实时显示;

3.可以轮流采集8路通道,或指定通道数据;

4.可以设定报警上下限,并报警。

四、方案设计

4.1系统分析

根据系统功能要求,可将系统组成结构分成四大部分。单片机控制中心、键盘接口。其中,单片机控制中心是核心。MCU根据按键输入,可切换不同的显示模式或设置不同的参数。数码显示管第2至4位将实时采集的0~5V电压,数码管第1位显示指定通道数。通过按键可切换到设定电压上下限报警的模式。由于我组单片机实验板缺少烽鸣器,因此利用LED灯来报警。

以下是系统组成结构图:

 


                              图1  系统组成结构图

五、硬件电路设计

5.1 单片机最小系统设计

最小系统包括CPU时钟与复位电路,其原理图如下:

                             图2单片机最小系统设计

5.2 显示电路设计

   数码管主要是用于数字的显示,图中采用共阴极。电源+5V通过470欧的电阻直接给数码管的7个段位供电,P0.0-P0.7对应了两个接数码管的a,b,c,d,e,f,g和小数点位p,P1.0,P1.1,P1.2,P1.3接位选码。其原理图如下:

                               图3 显示电路设计

5.3 按键电路设计

     其原理图如下:

                               图4 按键电路设计

5.4  A/D转换电路设计

其原理图如下:

                            图5 A/D转换电路设计

5.5 电源电路设计

单片机工作电压为5V。

一般使用USB接口供电,直接从USB接口获取5V电源。其原理如下图。

                  

                          图6 电源电路设计

5.6 报警电路设计

     当电压小于下限电压值或大于上限电压值时,蜂鸣器将报警。

如图所示:

                            图7 报警电路设计

六、软件设计

6.1 操作功能设计

根据系统的功能描述,可以将系统功能大致分成三类:轮流采集8路通道,指定通道显示,设置报警上下限。

此系统设有四个数码管,三个按键。利用按键可切换形成多个模式,按键1将轮流采集8路通道模式与指定通道显示之间相互切换,按键2将轮流采集8路通道与设置电压上下限报警模式之间相互切换,按键3是增加1,可指定显示1~8通道,也可利用其来设置上下限电压的大小。

模式设计如下:

模式1:轮流采集8路通道,此时数码管显示如1.0.00,2.4.97, 3.0.00……8.4.97。(此时1、3通道接地,2、8通道接+5V)

模式2:指定通道显示,按下键1时,模式由轮流采集8路通道变成指定通道显示,此时数码管初始显示为1.0.00, 表示为1通道的电压值;当按下按键3时,数码管值变为2.4.97, 表示2通道的电压值;当再次按下按键3时,数码管显示为3.0.00,表示3通道的电压值。即每按一次键3, 通道数即增一,以此显示指定通道的实时电压。

模式3:当在轮流采集8路通道的模式下,按下键2。模式将会自动切换到设置电压上下限报警模式。此时,初始设置的电压上限为5V,电压下限为0V,通过键3可对其修改。

6.2 程序设计思路

此程序所需实现的基本功能主要有:1使数码管显示采集来的实时电压,并对8个通道的电压实施轮流输出显示;2使用按键操作,将轮流显示的8个通道的电压切换成按指定通道显示输出;3可通过一功能键切换不同的模式,使系统可以调节上下限报警电压。4通过一按键可实现对通道与上下限电压的更改,如加减。

本程序主要分为2大块,主程序与子程序。主程序包括八通道循环采集电压工作方式,模拟量通道输入循环选择,选择通道显示电压工作方式,模拟量通道输入按键选择等。而子程序则需包括对定时器T0进行初始化程序(定时时间设为5ms,即每5ms扫描一次数码管,总共有4位数码管,20ms循环扫描一次),启动A、D转换程序,数码管显示程序,延时程序等。

此程序使用定时器0完成数码管动态扫描,并对按键及串口进行扫描。当扫描到相应的按键时即执行相应的操作(如当扫描到键1时,就会改变当前的模式,从轮流采集通道模式转换到指定通道显示电压的模式)。

6.3 程序流程图

 

 

 

                   图8 程序流程图

七、程序调试

     对程序来说,最重要的就是调试阶段。一段写好的程序当中会出现很多问题。在单片机数据采集系统设计的程序中,出现了很多问题,有的是语法错误,以致不能成功编译;有的则是可以成功编译,但是不能达到系统的功能要求。在单片机的实验学习中,我们做过关于A/D转换的实验。它的功能是可以实现单通道采集电压。但如何由单通道变成8通道,并且还能够指定通道显示,而且可以切换模式,对上下限电压进行修改。这就需要对程序的不断调试,其调试过程具体如下:

1、由单通道改至8通道:首先,这其中肯定要用到循环语句。程序中用到了for循环,k作为循环变量。全局变量m作为通道,m的值从1至8循环。即当m大于8时,令m等于1。

2、按键按下检测及相关设置:此系统用到了三个按键,如何对按键进行扫描,程序位于void Timer0_ISR() interrupt 1中,即于定时器T0的中断程序中,每5ms调用一次,检测键盘是否按下,如果按下去延时抖动,然后检测到底是哪个按键按下,不同的按键有不同的功能。 用“a++, if(a>=50&&P31==0&&moshi==1)”程序实现延时消抖。然后用if判断语句实现按键的不同作用。

3、数码管刷新显示程序;刷新显示就是根据不同的模式将显示的不同数据放到显示缓冲区中,比如模式1时显示轮流显示采集电压,模式2是显示指定通道的电压,数码管的第一位要显示通道数,数码管的后三位显示电压值,模式3是显示设置电压上下限报警值,然后由数码管输出程序输出到数码管。

4、数码管输出程序;数码管输出程序就是送段选码和位选码的程序,位于定时器T0的中断程序中。轮流点亮4个数码管,每5ms变换一次,由于速度快,从而达到点亮每个数码管的作用。

八、使用说明

8.1功能

1. 可以轮流显示8个通的实时采集的电压值;

2. 可以指定通道显示电压值;

3. 可以设置上下限报警电压。

8.2 人机接口

   共有三个按键。分别为键1,键2,键3。总共可以实现3个模式的转换。

8.3 操作说明

   1. 通电后,在初始状态下,数码管显示的是轮流显示8通道电压值。通过三个按键可以对模式进行切换,以及对其中参数进行修改。

   2. 按下键1,系统切换到指定通道显示界面,在此基础上按键3,可以实现从1通道到8通道任意指定通道显示电压值。再按下键1,又可返回到轮流显示8通道电压值。

   3. 按下键2,系统切换到设置电压上下限报警电压值。在此基础上,按下键3,可以对上下限电压值进行设置,每按一下键3,电压值增1,电压值的范围为0~5V。当电压值设置好之后,再按下键2,则重新返回到轮流显示8通道电压值。

  

九、心得体会

在本次实习中,我通过查阅资料,请教于老师及同学。基本完成了硬件设计、程序设计、安装调试等环节。但其中有很多问题值得我去思考。1.实习作风不好:不能积极对待,注意力不够集中;2. 实习效率不高:单片机课程功底较差,实践动手能力不强;3. 独立解决问题的能力较差。以为三点都值得我反思,本次实习揭露了我的不足,希望在以后学生工作中得到改进。

十、实验总结

本次实习的过程主要可分为三个部分。分别是绘制硬件原理图,编写程序,系统调试。

1. 绘制硬件原理图:这是我们第一次接触到Protel99电路设计软件,它与CAD绘制一样,需要有一个熟悉的过程,其中我觉得难点是建元件库。如单片机与A/D转换部分需要自己绘制,其它部分大多可以在元件库中找到,可直接添加。其次需注意的地方就是端口一定要与程序一致。

2. 编写程序:编写程序是难点。须一层层做起,刚开始的源程序来自A/D转换实验中的单通道采集电压值。在不断的对程序修改过程中实现8通道。再添加按键程序。

3. 系统调试;系统调试是最重要的环节,他涉及到程序的各个部分及硬件端口的接线。刚开始,我组用SST单片机,由于端口被占,因此无法接按键,程序虽然能够顺利下载,但是无法对按键进行操作。因此只能换成STC单片机。由于我组电路板上缺少蜂鸣器,因此改用LED灯实现电压上下限报警。虽然程序不一定有错。但调试的过程就是程序与硬件相结合的过程。必须相互匹配,才能调试成功。

十一、参考文献

1. 张义辉,李家庆,单片机系统综合训练指导书.重庆科技学院

2. 汪德彪. MCS-51单片机原理及接口技术[M]. 北京电子工业出版社.

3. 张毅刚.单片机原理及应用.北京:高等教育出版社,2005

4. 胡文金.单片机系统实训教程.重庆:重庆大学出版社,2005

5. 胡文金,钟秉翔. 单片机应用技术实训教程[M]. 重庆大学出版社. 2005.


附录1:电路原理图


附录2:源程序代码

#include "reg51.h"

#define THCO   0xee

#define TLCO   0x0

unsigned char code Duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

//共阴极数码管-9段码表

unsigned char  xuan[]={0,1,10,11,100,101,110,111};

unsigned char Data_Buffer[4]={0,0,0,0};

unsigned int m=1;

unsigned  int moshi=0,zengjia=0,sheding=0,dianyazeng=0,shangyazhi=5;

float AdValue;

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

sbit P30=P3^0;

sbit P31=P3^1;

sbit P32=P3^2;     //三个按键位码口定义

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

sbit P34=P3^4;          

sbit P35=P3^5;

sbit P36=P3^6;     //四个数码管的位码口定义

sbit P37=P3^7;

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

sbit ADWR=P1^0;           

sbit RS=P1^1;

sbit CS=P1^2;            //ADC0809控制线接通C51P1口位码口定义

sbit Add1=P1^3;

sbit Add2=P1^4;

sbit Add3=P1^5;

sbit EOC=P1^6;

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

sbit LED=P1^7;           //报警灯

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

void Sysinit();                         

void AD_Start(void);

void LED_Fresh();

void delay_ms(unsigned int x);                      //子函数定义 

void zhu();

void xianyajiemian();

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

void main()

{

       unsigned int k,i;

    Sysinit();

    while(1)

     {

             

        if(moshi==0)                                                  //八通道循环采集电压工作方式

        {      m=8;

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

             {

               if(moshi==1){

                                 k=0;break; }                  

            Add1=xuan[k]/100;                   //模拟量通道输入循环选择

            Add2=xuan[k]%100/10;               

            Add3=xuan[k]%10;                

               m++;

             if(m>8)

               m=1; 

                     if(dianyazeng==1)

                     {dianyazeng=0;

                     shangyazhi++;

                     if(shangyazhi>5)

            shangyazhi=0;

                     }

                     zhu();                                                                               

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

               }         

         }

         else                                       //选择通道显示电压工作方式

             {  m=1;

                while (1)

                   { if(moshi==0) break;

                    Add1=xuan[m-1]/100;    //模拟量通道输入按键选择

               Add2=xuan[m-1]%100/10;

               Add3=xuan[m-1]%10;

                  if(zengjia==1)

                    {       zengjia=0;

                    m++;

                       if(m>8)

                       m=1;

                     }    

                              zhu();                                

                     }           

             }

     }

}

void Timer0_ISR() interrupt 1

{

 static unsigned char Bit=0,a=0;

 TH0=THCO;

 TL0=TLCO;

 Bit++; 

 if(Bit>=4)Bit=0;

 P34=0;

 P35=0;

 P36=0;

 P37=0;          //关位码

  if(sheding==0)

  {    

 if(Bit==0)

 P2=Duan[m]|0x80;                 //开断码

 if(Bit==1)

  {

   P2=Duan[Data_Buffer[Bit]]|0x80;

      }                                    

 else if(Bit>1)

 P2=Duan[Data_Buffer[Bit]];

 if(Data_Buffer[1]>=shangyazhi

 )

   LED=0;

   else

   LED=1;

      }

 else 

 { if(Bit==1)

 P2=Duan[shangyazhi]|0x80;                //开断码                    

 else if(Bit>1)

 P2=Duan[Data_Buffer[Bit]];

 }

 switch(Bit)                          

 {                                                //开位码

  case 0: P34=1;break;

  case 1: P35=1;break;

  case 2: P36=1;break;

  case 3: P37=1;break;

 }

 if(P30==0||P31==0||P32==0)   //按键按下检测及相关设置

 {

   a++;

  if(a>=50&&P30==0)

  {a=0;

   moshi=!moshi;

  }

  if(a>=50&&P31==0&&moshi==1)

  {a=0;

  zengjia=1;

  }

  if(a>=50&&P32==0)

  {a=0;

  sheding=!sheding;

  }

  if(a>=50&&P31==0&&sheding==1)

  {a=0;

   dianyazeng=1;

  }

 

  }

}

void LED_Fresh()                           //数码管显示数据来源(电压信号的分离)

{unsigned int temp;

AdValue=AdValue*1.95;

 temp=AdValue;

 Data_Buffer[1]=temp/100;

 Data_Buffer[2]=temp/10%10;

 Data_Buffer[3]=temp%10;

}      

void Sysinit()

{

  TMOD=0x11;        //定时器0初始化

       TH0=THCO;

       TL0=TLCO;

       TR0=1;

       ET0=1;

       EA=1;

}

void AD_Start(void)

{

ADWR=1;                               //开启AD转换

CS=0;      

delay_ms(1);

ADWR=0;

delay_ms(1);

ADWR=1;

}

void delay_ms(unsigned int x)    //延时程序

{

   unsigned char y;

   for(x;x>0;x--)

1   for(y=110;y>0;y--);

}

void zhu()

  {

     AD_Start();

     while(!EOC);

     RS=0;

     AdValue=P0;

       if(sheding==0)

     LED_Fresh();

 else

 {m=0;

       xianyajiemian();

        }

     RS=1;

  }       

void xianyajiemian()                       //电压上线设置界面初值显示设定

 {

    Data_Buffer[2]=0;

    Data_Buffer[3]=0;    

 }

更多相关推荐:
单片机实训报告

单片机实训报告姓名学号班级指导老师实训时间前言一周的单片机实训很快就结束咯在这一周的时间里我学到了很多关于单片机各方面的知识老师在实训课中也教会咯我们很多关于单片机软件编程与硬件设施的知识一周的实训中我们一共实...

单片机实习报告

单片机实习报告1引言11实习目的随着人们生活水平的不断提高单片机控制无疑是人们追求的目标之一它给人们带来的方便也是不可否定的本次实习的目的在于加深AT89C51单片机的理解初步掌握单片机应用系统的设计方法通过本...

单片机实习总结报告

专业综合实习总结专业班级:电子信息工程0801学生学号:***指导教师:实习时间:20XX.6.2020XX.7.15机电工程学院一、实习目的和意义1、实习目的:(1)利用单片机小系统实习板,掌握电路原理图;(…

单片机实习报告

电子与信息工程学院程设计报(20##20##学年第2学期)课程名称:创新课题课程设计班级:电子0801学号:15姓名:指导教师:20xx年03月课告实习报告

单片机实训报告心得

广东轻工职业技术学院实训报告实训项目单片机实训系别:电子通信工程系专业:应用电子技术班级:嵌入式091班姓名:**学号:***指导老师:***实训地点:第三实训楼C309实训时间:20**年1月10日至1月14…

单片机实习报告

单片机实习报告题目姓名学院专业班级学号指导教师交通灯控制系统职称讲师20xx年5月27日内容提要本系统采用AT89S52作为交通灯控制系统的核心控制器件利用单片机的定时器产生秒级信号控制十字路口的红绿黄灯交替点...

单片机实训报告

目录一概述11设计制作产品的背景目的意义12设计制作产品的设计要求13分工情况工作计划及本人所总结工作14本课题的基本内容重点及难点二正文21实验原理22实验流程图23硬件设计24软件设计25C语言程序26简易...

《单片机实习报告温控系统

学院单片机课程设计报告书题目温度控制系统设计院系名称学生姓名专业名称班级时间学院自动化自动20xx年6月7日至6月17日温度控制系统设计一设计目的在现代化的工业生产中电流电压温度压力流量流速和开关量都是常用的主...

c51单片机实习报告

基于单片机实现短距离无线通信设计1引言短距离无线传输具有抗干扰性能强可靠性高安全性好受地理条件限制少安装灵活等优点在许多领域有着广泛的应用前景低功耗微型化是用户对当前无线通信产品尤其是便携产品的实际需求短距离无...

单片机论文、实习报告

单片机课程设计说明书题目数字式温度计的设计系部专业班级姓名学号指导教师起止日期单片机原理及应用课程设计任务书系部电子与通信工程系专业指导教师张刚林刘光灿陈威兵罗朝明冯璐谢志宇20xx650摘要在科学技术不断发展...

基于AT89S52单片机的多模式带音乐跑马灯设计实训报告

实训课题基于AT89S52单片机的多模式带音乐跑马灯设计一实训目的及要求1通过实训理解与掌握单片机系统的开发流程及常见系统的开发设计仿真调试等培养一定的单片机设计与开发能力2掌握按键电路的设计3掌握单片机复位电...

单片机最小系统实训报告

单片机最小系统实训报告一实训目的1掌握并理解单片机最小系统的原理和制作熟悉电子元件的参数以及应用2熟悉PCB板的工业制作流程并且要求会使用protel软件绘制相应的PCB图3复习使用keil51软件编写相应程序...

单片机实习报告(37篇)