单片机实验报告

 

微机原理与单片机接口技术

实验报告册

河南理工大学电气学院

专业                         

班级                           

学号                           

姓名                           

                                  目录

实验一    流水灯实验................................................................................................... 3

    一、 实验目的.......................................................................................................... 3

二、实验实现的功能................................................................................................. 3

三、系统硬件设计..................................................................................................... 3

四、系统软件设计..................................................................................................... 3

五、实验过程中遇到的问题及解决方法..................................................................... 6

实验二  定时器或实时时钟实验.................................................................................... 7

一、实验目的............................................................................................................ 7

二、实验实现的功能................................................................................................. 7

三、系统硬件设计..................................................................................................... 7

四、系统软件设计..................................................................................................... 7

五、实验过程中遇到的问题及解决方法.................................................................... 10

实验三    双机通信实验.............................................................................................. 11

一、实验目的.......................................................................................................... 11

二、实验实现的功能................................................................................................ 11

三、系统硬件设计................................................................................................... 11

四、系统软件设计................................................................................................... 11

五、实验过程中遇到的问题及解决方法.................................................................... 13

实验四    交通灯实验................................................................................................. 14

一、实验目的.......................................................................................................... 14

二、实验实现的功能................................................................................................ 14

三、系统硬件设计................................................................................................... 14

四、系统软件设计................................................................................................... 14

五、实验过程中遇到的问题及解决方法.................................................................... 17

    

实验一    流水灯实验

一、实验目的

    

1)简单I/O引脚的输出

2)掌握软件延时编程方法

3)简单按键输入捕获判断

二、实验实现的功能

1)开机是点亮12发光二极管,闪烁三下

2)按照顺时针循环依次点亮发光二极管

3)通过按键将发光二极管的显示改为顺逆时针方式

三、系统硬件设计

四、系统软件设计

试验程序如下:


#include <10f08.h>

#define uint unsigned int

    sbit P3_2=P3^2;

sbit P3_3=P3^3;

    sbit P3_4=P3^4;

    sbit P3_5=P3^5;

    sbit P3_6=P3^6;

    sbit P3_7=P3^7;

    sbit P0_5=P0^5;

    sbit P0_6=P0^6;

    sbit P4_4=P4^4;

void Delay100ms()   

{

    unsigned char i, j, k;

    i = 5;

    j = 52;

    k = 195;

    do

    {

       do

       {

           while (--k);

       } while (--j);

    } while (--i);

}

void Delay300ms()   

{

    unsigned char i, j, k;

    i = 13;

    j = 156;

    k = 83;

    do

    {

        do

       {

           while (--k);

       } while (--j);

    } while (--i);

      

}

void shun_z()

{

    uint m,n;

    bit a;

    for(m=0;m==0;)

       {

           EX0=1;       

           a=P0_5;          

           P3_2=a;

           P2=0xfe;

           P4_4=1;

           a=P0_5;

           P3_2=a;

           P3_3=1;

           P3_4=1;

           P3_5=1;

   

           Delay300ms();

           for (n=0;n<8;n++)

              {

                  a=P0_5;

                  P3_2=a;

                  P2=P2<<1;

                  P2=P2|0x01;

                  if(n==7) break;

                  Delay300ms();

              }

      

           P4_4=0;

           Delay300ms();

           P4_4=1;

   

           P3_3=0;

           Delay300ms();

           P3_3=1;

   

           P3_4=0;

           Delay300ms();

           P3_4=1;

           P3_5=0;

           Delay300ms();

           P3_5=1;

       }

}

void int0() interrupt 0

{

    uint m,n;

    EX0=0;

    for(m=0;m==0;)

    {

       P4_4=1;

       P3_3=1;

       P2=0xff;

       P3_5=0;

       Delay300ms();

       P3_5=1;

       if(P0_5==0) break;

          

       P3_4=0;

       Delay300ms();

       P3_4=1;

       if(P0_5==0) break;

          

       P3_3=0;

       Delay300ms();

       P3_3=1;

       if(P0_5==0) break;

       P4_4=0;

       Delay300ms();

       P4_4=1;

       if(P0_5==0) break;

          

          

       P2=0x7f;

       Delay300ms();

       if(P0_5==0) break;

       for(n=0;n<8;n++)

       {

           P2=P2>>1;

           P2=P2|0x80;

           if(n==7) break;

           Delay300ms();

           if(P0_5==0) break;

       }

           if(P0_5==0) break;

    }

}

void SSS()

    {

           uint m,n;

           EX0=0;

           P2=0xfe;      

           P4_4=1;

           P3_3=1;

           P3_4=1;

           P3_5=1;

           Delay100ms();

      

           for (n=0;n<8;n++)

              {  

                  P2=P2<<1;

                  if(n==7) break;

                  Delay100ms();

              }

      

           P4_4=0;

           Delay100ms();

          

           P3_3=0;

           Delay100ms();

          

           P3_4=0;

           Delay100ms();

      

           P3_5=0;

           Delay100ms();

      

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

           {  

              P2=0x00;

              P4_4=0;

              P3_3=0;

              P3_4=0;

              P3_5=0;

              Delay300ms();

              P2=0xff;

              P4_4=1;

              P3_3=1;

              P3_4=1;

              P3_5=1;

              Delay300ms();

                    

           }

                 

              Delay300ms();

}

    void main()

    {  

       P4SW|=0x10;      

       P3_6=0;

       IT0=0;

       EX0=1;

       EA=1;

       SSS();

       shun_z();

    }


五、实验过程中遇到的问题及解决方

                                            指导老师签字:

                                                日期:


实验二  定时器或实时时钟实验

 

一、实验目的

1)数码管动态显示技术

2)定时器的应用

3)按键功能定义

二、实验实现的功能

1)通过按键可以设定定时时间,启动定时器,定时时间到,让12个发光二极管闪烁,完成定时器功能。

2)实时时钟,可以设定当前时间,完成钟表功能(四位数码管分别显示分钟和秒)。

上述二个功能至少完成一种功能。

三、系统硬件设计

四、系统软件设计

试验程序如下:


#include <10f08.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

Uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  

uchar chocode[]={0xfe,0xfd,0xfb,0xf7};

    uchar N,M;

    sbit P3_5=P3^5;            

    sbit P3_6=P3^6;

    sbit P3_7=P3^7;

    sbit P4_4=P4^4;

    sbit P3_3=P3^3;

    sbit P3_4=P3^4;

    sbit P0_7=P0^7;

void Delay1ms()     

{

    unsigned char i, j;

    _nop_();

    i = 11;

    j = 190;

    do

    {

       while (--j);

    } while (--i);

}

void Delay300ms()       

{

    unsigned char i, j, k;

    i = 13;

    j = 156;

    k = 83;

    do

    {

       do

       {

           while (--k);

       } while (--j);

   

    } while (--i);

      

}

void display(uchar N,M)    

{

    P1M0=0xff;

    P1M1=0x00;

    P0=chocode[3];

    P1=table[M];     

    Delay1ms();

    P0=chocode[2];

    P1=table[N];

    Delay1ms();

    P0=chocode[1];

    P1=table[0];

    Delay1ms();

    P0=chocode[0];

    P1=table[0];

    Delay1ms();

   

}

void Scan_Key(void)       

{

       uchar m;

       bit FLAG0=0;

      

       P3_6=0;

       P3_7=1;

       P0=0xff;

       m=P0;

   

       switch(m&0xf0)

       {

           case 0xd0: N++;

           FLAG0=1;

           break;

           case 0xb0: M++;

           FLAG0=1;

           break;

           default: break;

      

       }

       if(FLAG0)

       {

           while((P0|0x0f)!=0xff)             {

                  display(N,M);

              }

       }

       else

       {

           display(N,M);

       }

      

        P3_6=1;

       P3_7=0;

       P0=0xff;

       m=P0;

       switch(m&0xf0)

       {

           case 0xd0: N--;

           FLAG0=1;

           break;

           case 0xb0: M--;

           FLAG0=1;

           break;

           default: break;

      

       }

       if(FLAG0)

       {

           while((P0|0x0f)!=0xff)                 {

                  display(N,M);

              }

       }

       else

       {

           display(N,M);

       }

       P3_7=1;

       P3_6=0;

      

}

main()

{  

    P4SW|=0x10;         

    P1=0x0;

    while(1)

    {

       uchar i;

       Scan_Key();  

       P0=0xff;

       if(P0_7==0)   

       {

           while((P0|0x0f)!=0xff) 

              {

                  display(N,M);

              }

           while(1)               

           {

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

              {

              TMOD=0x01;

              TH0=0xd8;

              TL0=0xf0;

              TR0=1;

              display(N,M);

              do{display(N,M);} while(TF0==0);

              }

              if((M|N)==0)  

              {

                  while(1)

                  {

                     P0=0xff;

                     P2=0x00;

                     P4_4=0;

                     P3_3=0;

                     P3_4=0;

                     P3_5=0;

                     Delay300ms();

                     P2=0xff;

                     P4_4=1;

                     P3_3=1;

                     P3_4=1;

                     P3_5=1;

                     Delay300ms();              

                  }

              }

              if(M==0)

              {

                  M=9;

                  N--;

              }

              else M--;

             

           }

       }

    }

}


五、实验过程中遇到的问题及解决方法

                                                指导老师签字:

                                                日期:


实验三    双机通信实验

一、实验目的

UART 串行通信接口技术应用

二、实验实现的功能

用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。

三、系统硬件设计

四、系统软件设计

试验程序如下:


#include <10f08.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};  

sbit P3_6=P3^6;     

sbit P3_7=P3^7;

sbit P0_3=P0^3;

uchar n;

void Delay10ms()    

{

    unsigned char i, j;

    _nop_();

    _nop_();

    i = 108;

    j = 144;

    do

    {

       while (--j);

    } while (--i);

}

void UartInit(void)     

{

    PCON &= 0x7F;    

    SCON = 0x50;     

    AUXR &= 0xBF;    

    AUXR &= 0xFE;    

    TMOD &= 0x0F;    

    TMOD |= 0x20;    

    TL1 = 0xFD;      

    TH1 = 0xFD;  

    ET1 = 0;     

    TR1 = 1;      

    ES=1;       

    EA=1;       

}

void Scan_Key(void)       

{

    uchar m,i;

    bit FLAG0=0;

    P3_6=0;

    P3_7=1;

   

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

    {

       P0=0xf7;  

       m=P0;

       Delay10ms();        

       switch(m&0xf0)

       {

           case 0xd0: n=i*3+1;     

           FLAG0=1;                

           break;

           case 0xb0: n=i*3+2; 

           FLAG0=1;

           break;

           case 0x70: n=i*3+3;     

           FLAG0=1;

           break;

           default: break;

       }

       P3_6=1;

       P3_7=0;

    }

}

void send()

  SBUF=table[n];

  while(!TI);

  TI=0;

}

void receive()

{

   while(RI==0);

    P1=SBUF;

    RI=0;

}

main()

{  

    UartInit();

    P1M0=0xff;   

    P1M1=0x00;

    P1=0x0;

    while(1)

    {

    Scan_Key();

    send();

    receive();

    }

}


五、实验过程中遇到的问题及解决方法

                                                指导老师签字:

                                                日期:


实验四    交通灯实验

一、实验目的

1)按键、数码管、发光二极管综合应用编程技术

2)数据存储于EEPROM的技术(也可以不使用)

3)定时中断技术

4)按键中断技术

二、实验实现的功能

1)对每个路口(主干道、次干道)的绿灯时间,及黄灯时间的设定。

2)设定参数掉电后不丢失(如果不使用EEPROM,此功能可以不实现)。

3)紧急按键功能,当按下该键时,所有路口变成红灯,相当于交警指挥特殊车辆通过。再按该键,恢复正常显示。

三、系统硬件设计

四、系统软件设计

实验程序如下:


#include <reg51.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

uchar i,j=1;

uint p,q,m=0,n=30;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar  code wei[]={0x07,0x0b,0x0d,0x0e};

void delay(uint x)

{

    while(x--)

    {

        for(p=250;p>0;p--);

    }

}

void key()

{

       uint i;

       P0=0xff;

       P3=0x7f;

       i=P0;

       i=i&0xff;

       if(i!=0xff)

       {

           delay(10);

           i=P0;

           i=i&0xff;

           if(i!=0xff)

           {

              i=P0;

              switch(i)

              {

                  case 0x7f: j=0;TR0=0; break;

                 

                  case 0xdf: j=1;TR0=1; break;

              }

              while(i!=0xff)

              {

              i=P0;

              i=i&0xff;

              }

           }

       }

   

      

}

void sun()

{

     

    if(m%2==1&&n>10)

    {  

       for(q=0;q<160;q++)

       {

           P1=table[n/10];

           P0=wei[3];

           delay(2);

              P1=table[n%10];

           P0=wei[2];

           delay(2);

           P2=0xf3;P3=0xcf3;

           delay(2);

       }

    }else if(m%2==1&&n>5)

    {

       for(q=0;q<160;q++)

       {

           P1=table[n/10];

           P0=wei[3];

           delay(2);

              P1=table[n%10];

           P0=wei[2];

           delay(2);        

           P2=0x75;P3=0xf7;

           delay(2);

       }

    }else if(m%2==1&&n>0)

    {

       for(q=0;q<80;q++)

       {

           P1=table[n/10];

           P0=wei[3];

           delay(2);

              P1=table[n%10];

           P0=wei[2];

           delay(2);        

           P2=0x75;P3=0xf7;

           delay(2);

       }

       for(q=0;q<80;q++)

       {

           P0=1;

           delay(2);

           P2=0xf7;

           P3=0xf7;

           delay(2);        

       }

    }else if(m%2==0&&n>10)

    {

       for(q=0;q<160;q++)

       {

           P1=table[n/10];

           P0=wei[1];

           delay(2);

              P1=table[n%10];

           P0=wei[0];

           delay(2);

           P2=0x9e;P3=0xdf;

           delay(2); 

       }         

    }else if(m%2==0&&n>5)

    {

       for(q=0;q<160;q++)

       {

           P1=table[n/10];

           P0=wei[1];

           delay(2);

              P1=table[n%10];

           P0=wei[0];

           delay(2);

           P2=0xae;P3=0xef;

           delay(2); 

       }         

    }else if(m%2==0&&n>0)

    {

       for(q=0;q<80;q++)

       {

           P1=table[n/10];

           P0=wei[1];

           delay(2);

              P1=table[n%10];

           P0=wei[0];

           delay(2);

           P2=0xae;P3=0xef;

           delay(2); 

       }

       for(q=0;q<80;q++)

       {

           P0=1;

           delay(2);

           P2=0xbe;

           P3=0xff;

           delay(2);        

       }     

    }

      

      

   

}

void init()

{

    TMOD=0x01;

    TH0=(65536-45872)/256;

    TL0=(65536-45872)%256;

    EA=1;

    ET0=1;

   

}

void T0_time() interrupt 1

{

    TH0=(65536-45872)/256;

    TL0=(65536-45872)%256;

    i++;

    if(i==20)

    {

       i=0;

       n--;

       if(n<1)

           {

              n=30;

              m++;

           }

   

    }

   

}  

void main()

{  

    init();

    TR0=1;

    while(1)

    {

       key();

       if(j==0)

       {

           P2=0xb6;P3=0xf7;

       }else

       if(j==1)

       {

           sun();

       }

    }

   

}


五、实验过程中遇到的问题及解决方法

指导老师签字:

                                                日期:

相关推荐