单片机实验报告

1

福建农林大学计算机与信息学院

信息工程类

实验报告

2013 年  10  月 28   日


实验项目列表

福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名: 詹缓辉             学号:   3116004094                   实验课程:  单片机技术  

实验室号:_____田C513__        实验时间:  10.26        

指导教师签字:      易金聪                 成绩:                 

实验一  Keil C51 和Proteus 软件的使用

1.实验目的和要求

    1)熟悉Keil C51软件界面,以及编辑、编译、运行程序的步骤;

2)熟悉Proteus软件界面,掌握用Proteus画仿真图的方法。

3)掌握电子电路的设计与仿真调试的方法。

2.实验原理

1)Keil C51软件使用

在Keil C51集成开发环境下,建立一个工程并编辑以下源程序,熟悉Keil C51集成开发环境下各种菜单、命令的使用。

#include "reg51.h"

#define uchar unsigned char

#define uint unsigned int

sbit in=P3^0;

sbit out=P1^0;

void main(void)

{ while(1)

{ in=1;

if(in= =0)out=0;

else

out=1;

     }

}

2)Protues软件使用

下图为利用单片机、1个开关和1个发光二极管,构成一个简单的开关检测系统的仿真电路图。单片机P3.0引脚接按钮开关,P1.0引脚接发光二极管的阴极。当开关闭合时,发光二极管亮;开关打开时,发光二极管灭;按钮开关与发光二极管没有任何电气上的联系。利用Protues仿真软件画出仿真电路图,并进行电气规则检查。

3)Proteus仿真

电路图绘制完毕后,加载“.hex”文件到电路图中的单片机内进行仿真,观察运行结果。注意系统时钟频率的设置

3.主要仪器设备(实验用的软硬件环境)

安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

  1)Keil C51软件使用

(1)建立用户文件夹

(2)建立工程

(3)建立文件并编码。输入以下源程序,并保存在项目所在的目录中

(4)把文件加入工程中

(5)编译工程。编译时观察在界面下方的“Build”页中的到编译错误信息和使用的系统资源情况等。

(6)调试。利用常用调试命令,如复位、运行、暂停、单步、单步跳过、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令进行调试,观察并分析调试结果。

(7)目标代码文件的生成。运行生成相应的.HEX文件。

2)proteus电路设计

(1)建立新文件

(2)设定绘图纸大小

(3)选取元器件并添加到对象选择窗口中

(4)放置、调整元器件位置

(5)放置电源、地(终端)

(6)电路图布线调

(7)电气检测

(8)电路图存盘。

3)Keil C与Proteus连接仿真调试

在Keil C中编译输出*.HEX文件,右键选中工作区中单片机芯片,左键单击打开属性对话框,在弹出的选择文件对话框中选择相应的*.HEX文件。通过运行控制按钮控制程序的执行,观察K1闭合和打开时的程序运行过程。

5.实验内容及实验数据记录

  每当按下K时,LED灯就会发光。

6.实验数据处理与分析

 每当按下K时,in(p3.0)I/O口就会变为低电平,该信号使得CPU给out(p3.0)I/O口发送低电平,使得LED灯发亮。

7.质疑、建议、问题讨论

   1、建议增加延迟函数,因为轻触按键按下的时间短,LED亮的时间就会很短,或者直接换成自锁开关。

   2、建议增加一个判断按键抖动的函数,防止非实验因素。

福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名:   詹缓辉       学号:  3116004094                    实验课程:  单片机技术  

实验室号:______田C513_       实验时间:  10.26        

指导教师签字:        易金聪                     成绩:                 

 实验二     单片机I/O接口应用实验—流水灯

1.实验目的和要求

    1)进一步掌握单片机仿真软件的使用方法。

2)掌握单片机最小系统的构成。

3)掌握单片机I/O口的使用方法,如何控制I/O口来驱动LED发光二极管。

4)熟悉C51程序编程和调试方法。

2.实验原理  

利用AT89C51单片机控制8个发光二极管按照要求实现以下各个功能:

(1)点亮板子上的第一个灯D0。

(2)点亮D0、D2、D4、D6灯,与D1、D3、D5、D7灯交替闪烁。

(3)按顺序循环移动点亮。

3.主要仪器设备(实验用的软硬件环境)

安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

1)利用Proteus软件设计以下电路图。

2)源程序设计

分析设计要求,根据任务要求,绘制源程序流程图,然后使用Keil C进行源程序文件的设计与调试,观察并分析程序调试结果。

 3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行流水灯的仿真运行,观察运行结果

代码

(1)

#include<reg52.h>

void main()

{P1=0xfd;(1111 1101)

}

(2)

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

void delay( );

void main( )

{    while(1)

   {   P1=0xaa;(1010 1010)

       delay();

       P1=0x55;(0101 0101)

       delay();  

    }

}

void delay()

{  uint x,y;

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

       for(y=600;y>0;y--)

 ;

}

(3)

#include<reg52.h>

#include<intrins.h>//此处使用的头文件包含了移位函数_crol_

void delay( )

{  unsigned char i,j;

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

    for(j=0;j<255;j++);

}

void main()

{  P1=0xfe;(1111 1110)

  while(1)

  {    P1=_crol_(P1,1);

   delay();

  }

}

5.实验内容及实验数据记录

    第一个实验使得D1保持常亮;第二个实验的现象为:奇数位数码管D1,D3,D5,D7与偶数位的数码管D0,D2,D4,D6交替发亮。第三个实验现象为:从D0开始向高位跑马灯式的亮。

6.实验数据处理与分析

    (1)

#include<reg52.h>

void main()

{P1=0xfe

}

(2)

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

void delay( );void main( )

{    while(1)

   {   P1=0xaa;      delay();

       P1=0x55;

       delay();       }

}

void delay()//延时程序

{  uint x,y;

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

       for(y=600;y>0;y--); 

}

(3)

#include<reg52.h>

#include<intrins.h>//此处使用的头文件包含了移位函数_crol_

void delay( ){  unsigned char i,j;

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

    for(j=0;j<255;j++);

}//由于延时函数写在main函数之前,所以不必向上面的程序对延时进行声明

void main()

{  P1=0xfe;//P1=11111110,低电平二极管发光

  while(1)

  {    P1=_crol_(P1,1);  delay();//调用延时程序

  }

}

7.质疑、建议、问题讨论

  

  延时参数的选定是个比较麻烦的事,要不断的实时调试才能找到一个好的延时参数。

 福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名:    詹缓辉          学号:  3116004094                    实验课程:  单片机技术  

实验室号:___田C513____        实验时间:     10.26         

指导教师签字:        易金聪                     成绩:                 

           实验三 中断优先级实验

1.实验目的和要求

  

1)掌握单片机系统中断嵌套及中断优先级的原理和使用方法。

2)掌握中断处理程序的编写方法

2.实验原理

(1)在单片机的P1口上接有8只LED,单片机主程序控制P1口发光二极管进行同亮同灭的闪烁显示,按钮K0接至P3.2/INT0*引脚,按钮K1接至P3.3/INT1*引脚。

(2)当只单击K0按钮时,一个黑灯(8个发光二极管只有一个熄灭,其余为亮)由下向上流水显示一次,然后P1口的发光二极管进行同亮同灭的闪烁显示;当只单击K1按钮时,一个亮灯(8个发光二极管只有一个为亮,其余为暗)由下向上流水显示一次,然后然后P1口的发光二极管进行同亮同灭的闪烁显示;如果先单击K0按钮再单击K1按钮,一个黑灯由下向上流水显示一次后,才能再一个亮灯由下向上流水显示一次,然后再回到8个灯同亮同灭的闪烁显示状态;如果先单击K1按钮后,一个亮灯由下向上流水显示,在亮灯显示没有到达D0显示时,此时再单击K0按钮,则一个黑灯由下向上流水显示,表明执行了外中断0的高优先级中断。一个黑灯向上流水显示完毕时,再执行一个亮灯到D0显示完毕的外中断0中断程序,从而说明高优先级的外部中断0能够把低优先级的外中断1的中断服务程序打断。

3.主要仪器设备(实验用的软硬件环境)

  安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

  

1)利用Proteus软件设计以下电路图。

2)源程序设计

分析设计要去,根据任务要求,绘制源程序流程图,然后使用Keil C51进行源程序文件的设计与调试,观察并分析程序调试结果。

  3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行仿真运行,观察当K0、K1分别按下再松开时的LED显示情况;观察先单击K1按钮后,在亮灯显示没有到达D0显示时,此时再单击K0按钮时的LED显示情况。

5.实验内容及实验数据记录

参考源程序代码如下:

#include<reg52.h>

//近似10ms的延时函数

//注意,理论上使用"for(i=100;i>=0;i--)"类型的循环结构,多数情况下汇编效率要略高于"for(i=0;i>=100;i++)"。

//但由于有时候会软件冲突,Proteus仿真时,使用"for(i=100;i>=0;i--)"类型将会仿真出错。

//因此这里使用"for(i=0;i>=100;i++)"。但在硬件试验下建议使用"for(i=100;i>=0;i--)"。

void delay_10ms(unsigned char delay_ms_num)

{  unsigned int i,j,k;

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

    for(j=0;j<=100;j++)

     for(k=0;k>=100;k++);

}

//中断初始化函数

void tx_init()

{  EA=1;

  PX0=1;(IP=0x01;)//中断优先级设置,打开INIT0口。

  EX0=1;(IE=0x81;)//中断允许设置。

  IT0=1;(SCON=0x01;)//中断请求标志设置。

  EX1=1;

  IT1=1;

}

void main()

{  tx_init();

  P1=0x00;

  while(1)

  { delay_10ms(100);

   P1=~P1;

  }

}

void tx0_func( ) interrupt 0

{  unsigned char i;

  //C51语言中调用循环移位不便,且有时候会与Proteus有冲突,故采用查表实现循环移位。

  unsigned char code table0[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

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

  {    P1=table0[i];

   delay_10ms(255);

   delay_10ms(255);

  }

  P1=0xff;//完成中断后灯全部熄灭

}

void tx1_func()interrupt 2

{  unsigned char i;

  unsigned char code table2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

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

  { P1=table2[i];

   delay_10ms(255);

   delay_10ms(255);

  }

  P1=0x00;//完成中断后灯全部点亮

}

 

6.实验数据处理与分析

   实验现象为:开始两个按键都不按下时,LED灯为交替闪烁,当按下只单击K0按钮时,一个黑灯(8个发光二极管只有一个熄灭,其余为亮)由下向上流水显示一次,然后P1口的发光二极管进行同亮同灭的闪烁显示;当只单击K1按钮时,一个亮灯(8个发光二极管只有一个为亮,其余为暗)由下向上流水显示一次,然后然后P1口的发光二极管进行同亮同灭的闪烁显示;如果先单击K0按钮再单击K1按钮,一个黑灯由下向上流水显示一次后,才能再一个亮灯由下向上流水显示一次,然后再回到8个灯同亮同灭的闪烁显示状态;如果先单击K1按钮后,一个亮灯由下向上流水显示,在亮灯显示没有到达D0显示时,此时再单击K0按钮,则一个黑灯由下向上流水显示

7.质疑、建议、问题讨论

建议增加按键抖动时的判断函数,防止系统误差;建议最好使用白色的LED,这样实验现象会比较明显。


福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程          年级:   20##级 

姓名:  詹缓辉            学号: 3116004094                     实验课程:  单片机技术  

实验室号:_____田C513__        实验时间:  10.26      

指导教师签字:        易金聪                     成绩:                 

实验四   60秒倒计时时钟实验

1.实验目的和要求

  

1)掌握单片机定时器中断的使用。

2)了解定时器/计数器各工作模式的区别。

3)掌握定时器/计数器定时模式的使用及编程。

2.实验原理

   利用单片机的定时器/计数器实现60秒倒计时实验,采用两只数码管从59开始静态显示倒计时的秒值,当显示为00时,再从59开始显示倒计时。

3.主要仪器设备(实验用的软硬件环境)

 安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

  

1)利用Proteus软件设计以下电路图。其中,带公共端的共阳极七段绿色数码管为:7SEG-COM-AN-GRN,四输入译码器为:74LS47,电容、电解电容为:CAP、CAP-ELEC。电路采用两片74LS47 BCD-7段数码管译码器/驱动器,即用于将BCD码转化为数码管的显示数字。

2)源程序设计

分析设计要去,根据任务要求,绘制源程序流程图,然后使用Keil C进行源程序文件的设计与调试,观察并分析程序调试结果。

3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行仿真运行,观察七段数码管的显示。

4、参考源程序

#include<reg52.h>

unsigned char second,timer;

void t1_init( )

{ TMOD=0x10;

  IE=0x88;

  TH1=0x3c;

  TL1=0xb0;

  TR1=1;

}

void main()

{  t1_init();

  second=59;

  timer=0;

  while(1);

}

void t1_func( )  interrupt 3

{  TH1=0x3c;

  TL1=0xb0;

  if(timer<20)

  { timer=timer+1;

    }

  else if(timer==20)

  {   timer=0;

    if(second==0)

    { second=59;

      }

    else

    {  second=second-1;

      }

  }

  P2=second/10;

  P3=second%10;

}

5.实验内容及实验数据记录

 利用单片机的定时器/计数器实现60秒倒计时实验,采用两只数码管从59开始静态显示倒计时的秒值,当显示为00时,再从59开始显示倒计时。

6.实验数据处理与分析

#include<reg52.h>

unsigned char second,timer;

void t1_init( )

{ TMOD=0x10;

  IE=0x88;

  TH1=0x3c;

  TL1=0xb0;

  TR1=1;

}

void main()

{  t1_init();

  second=59;

  timer=0;

  while(1);

}

void t1_func( )  interrupt 3

{  TH1=0x3c;

  TL1=0xb0;

  if(timer<20)

  { timer=timer+1;

    }

  else if(timer==20)

  {   timer=0;

    if(second==0)

    { second=59;

      }

    else

    {  second=second-1;

      }

  }

  P2=second/10;

  P3=second%10;

}

7.质疑、建议、问题讨论

  引脚占用过多,建议采用LED二合一式的。

    福建农林大学计算机与信息学院信息工程类实验报告

系:   电子信息工程   专业:      电子信息工程    年级:   20##级 

姓名:    詹缓辉  学号:   3116004094   实验课程:  单片机技术  

实验室号: 田c513          实验设备号:        实验时间:  10.26 

指导教师签字:        易金聪                     成绩:              

实验五  4×4矩阵键盘按键识别实验

1.实验目的和要求

 

1)理解掌握矩阵键盘扫描的工作原理。

2)掌握矩阵键盘与单片机接口的编程方法。

2.实验原理

  

利用4×4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管显示键盘按下键的键号。当某个键按下时,可将相应按键值(十进制)在两位数码管上显示出来。

3.主要仪器设备(实验用的软硬件环境)

  安装有Keil C51软件与Proteus仿真软件PC机1台

4.操作方法与实验步骤

1)利用Proteus软件设计以下电路图。其中,带公共端的共阳极七段绿色数码管为:7SEG-COM-AN-GRN,四输入译码器为:74LS47,电容、电解电容为:CAP、CAP-ELEC。电路采用两片74LS47 BCD-7段数码管译码器/驱动器,即用于将BCD码转化为数码管的显示数字。P2口和P3口的低四位通过74LS47与数码管相连;P1口的低四位与键盘的行线相连接,P1口的高四位与键盘的列线相连接。

2)源程序设计

分析设计要去,根据任务要求,绘制源程序流程图,然后使用Keil C进行源程序文件的设计与调试,观察并分析程序调试结果。

3)Proteus仿真

加载目标代码至单片机中,利用Proteus硬件仿真功能,进行仿真运行,分别按下各个键盘观察七段数码管的显示。

5.实验内容及实验数据记录

 

6.实验数据处理与分析

  #include<reg51.h>

void delay_5ms()

{  unsigned char i,j;

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

    for(j=0;j<=200;j++);

}

unsigned char key_scan()

{  unsigned char key_temp0,key_temp1;

  unsigned char key_num=0;

  P1=0x0f;

  key_temp0=P1;

  if(key_temp0!=0x0f)

  { delay_5ms();

   key_temp0=P1;

   if(key_temp0!=0x0f)

   {  P1=0xf0;

     key_temp1=P1;

     if(key_temp0==0x0e)

     {

       switch(key_temp1)

       { case 0xe0: key_num=4;break;

         case 0xd0: key_num=3;break;

         case 0xb0: key_num=2;break;

         case 0x70: key_num=1;break;

         default: key_num=0;break;

       }

     }

     else if(key_temp0==0x0d)

     {

      switch(key_temp1)

       { case 0xe0: key_num=8;break;

         case 0xd0: key_num=7;break;

         case 0xb0: key_num=6;break;

         case 0x70: key_num=5;break;

         default: key_num=0;break;

       }

         }

7.质疑、建议、问题讨论

  引脚联系过于复杂,建议使用二合一数码管。

相关推荐