一、实验目的:
1、掌握51单片机的基本结构及相关知识,并能熟练应用。
2、熟悉用C语言在51单片机的编程方法及编程思想。
3、掌握Keil和Protues软件的使用和两者的关系,并能更好的用两种软件来做单片机实验的仿真。
4、了解心率计数器的编程方法和相关知识。
二、实验原理:
  心率计是用来测量一个人心脏单位时间跳动次数的电子仪器,也是心电图的主要组成部分,设计一个电子心率计,要求实现在短时间内测量1分钟的心脏跳动次数,并且显示其数字。本实验用开关来代替心跳,按一次开关代表心跳一次。开关按一次,计数器计数一次,定时为一分钟,一分钟后,按了多少次就代表心跳了多少次。最后显示出来。
三、实验流程图:
四、实验源程序:
#include <reg51.h>
code unsigned char
char sag[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};//0123456789
code unsigned char bitcode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned int second;
unsigned int count;
void display(unsigned int d);
void delay(unsigned int n);
main()
{
  second=0;
  count=0;
  TMOD=0x61;    //T0定时器方式1 T1计数器方式2
  TH1=255; TL1=255;    //T2计数初值计一次即中断
  TH0=(65536-50000)/256;  //T1计数初值(65535-50000)/fosc/12 50ms
  TL0=(65536-50000)%256;
  IT0=1;  //外部0
  IE=0x8b; //开中断(总中断及INT0、T0,T1)
  TR0=0;
  TR1=0;      //启动定时计数器
  while(1)
  {
    display(second);
    }
}
void time0(void) interrupt 1 using 1
  {
    count++;          //中断一次计一次数
    if(count<1200)
    {
    TH0=(65536-50000)/256;  //T1计数初值(65535-50000)/fosc/12 50ms
    TL0=(65536-50000)%256;
    }
  else
    {TR1=0;TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;}  //满一分钟停止TR1
  }
void time1(void)interrupt 3 using 2
  {
    second++;
  }
  void int_1() interrupt 0 using 3 //0号中断(外中断0),使用3号寄存器组
{
    IE&=0xfe;//关中断
c编程步骤    TR0=1;TR1=1;count=0;second=0;   
    IE|=0x81;//开TI中断
}
void display(unsigned int d)    //显示
{
    unsigned int outdata[8];
unsigned char i; 
    outdata[0]=10;
    outdata[1]=10;     
    outdata[2]=10;          //不显示
    outdata[3]=d/10000;      //取最高位
    outdata[4]=d/1000%10;    //取次高位
   
outdata[5]=d/100%10;      //取次次高位
      outdata[6]=d/10%10;      //取次低位
    outdata[7]=d%10;        //取最低位
        for(i=0;i<8;i++)
        {
            P1=bitcode[i];
          switch(outdata[i]) 
      {
        case 0:P0=sag[0];break;
        case 1:P0=sag[1];break;
        case 2:P0=sag[2];break;
        case 3:P0=sag[3];break;
        case 4:P0=sag[4];break;
        case 5:P0=sag[5];break;
        case 6:P0=sag[6];break;
        case 7:P0=sag[7];break;
        case 8:P0=sag[8];break;
        case 9:P0=sag[9];break;
        case 10:P0=sag[10];break;
      }
        delay(50);
    }
}
void delay(unsigned int n)  //延时
{
  while(n--);       
五、实验步骤:
1、打开Protues软件,画出实验电路仿真图:如下
 
然后保存。
2、打开keil软件,project—new uvision project—输入工程名,保存。然后新建Text,输入上面的C语言程序,编译。保存成后缀名为.C的文件。然后左击左面栏里的source
group1—Add file to source group1,选择刚刚保存的.C文件,点确定。然都Flash—Configure Flash tools—output—Creat hex file—确定。系统提示hex文件创建成功。
3、打开第一步画好的原理图,双击AT89c51—program file,到在Keil里面生成的hex文件,确定。
4、点击仿真按钮进行仿真。
六、实验结果:
   
图中显示的是一分钟开关按动的次数(就是人一分钟跳动的次数).
七、实验心得:
  通过本次实验我更加深入了解了用C语言编程的思想及其语法。进一步了解了51单片机的内部结构。设计之前必须的了解你所设计的实际意义。比如,心率计。我们不能设计成万位以上,这不符合实际意义。我们所考虑的应该是百位就行了。要想编好程序,必须先得了解单片机的基本构造。了解并掌握要编成所必须要知道51单片机的那些结构及其作用。一种东西可能需有很多种编程方法。并且我们得充分利用我们所学的知识在编程时尽量鲜明简洁,易读性强,可行性高。1、不管做什么事,计划是很重要的。没有一个完好的计划,做事情就会没有一个好的顺序,做事情会比较乱,很难成功。而有一个好的计划,不管做什么事都会事半功倍,做事心中有数,明确重点和缓急,不会有疏漏。这样才能提高成功率。2、做事要多动脑,选出最好的方法。一件事往往有多种解决方法,一个好的方法,不仅能使事情事半功倍,而且往往决定最后的成与败,所以做事时一定要多动一下脑筋,想出最好的方法。3、要注意细节。细节决定成败,这句话在这次课题中不仅一次得到了印证,特别是在软件的编程过程中,一点点的错误就会使你整个程序不能运行。因此我们不仅仅要有整体意识,也要
注意细节,不要因一个关键地方的一个细节而导致满盘皆输。4、最后,也是最重要的一点,通过这次课题,我们学到了很多有关单片机方面的知识,也对单片机有了更深入的了解。使我们受益匪浅。
总之,亲自动手是课堂学习的延续,电子领域随时随地都在发生着翻天覆地的变化,现有的知识储备总是落后于科技的发展脚步,我们只有不断学习新知识,才能做到在面对新课题时游刃有余。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。