51单片机实验(LED and KEY)

来源:互联网 发布:冒险岛伴侣官方域名 编辑:程序博客网 时间:2024/05/22 19:17


单片机实验

/***************实验1*********************************************/

Name: LED显示累加和

Function:2~20的累加和,在LED上显示

CPU:STC89C52RC

Date:Sep 13,2017

By:Bolanche L

C code as following:

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

#include<reg52.h>      

#defineuchar unsigned char     

voidmain()    

{

  uchar i,sum=0;

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

  {

      sum+=i;

  }

  P1=sum;

  while(1);

}

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

**************实验1******************************************************/

/**************实验2****************************************/

Name: 3 keys control 3 LEDs

Function: 独立按键控制三个LED,当按下时,LED亮,松开时LED熄灭

CPU:STC89C52RC

Date:Sep 13,2017

By:Bolanche L

C code as following:

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

#include<reg52.h>      

#defineuchar unsigned char     

#defineuint unsigned int

sbitLED1=P1^0;

sbitLED2=P1^1;

sbitLED3=P1^2;

sbitKEY1=P3^2;

sbitKEY2=P3^3;

sbitKEY3=P3^4;

voiddelay(uchar m)

{

   uint i;

   uchar j;   

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

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

}

voidmain()    //主函数

{

   

   while(1)

   {

      if(KEY1==0)

       {

         delay(5);//消抖

         if(KEY1==0)LED1=0;

       }

       else

           LED1=1;

       if(KEY2==0)

       {

         delay(5);

         if(KEY2==0)LED2=0;

       }

       else

           LED2=1;

       if(KEY3==0)

       {

         delay(5);

         if(KEY3==0)LED3=0;

       }

       else

           LED3=1;

   }

}

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

**************实验2**************/

/**************实验3**************/

Name: LED显示自增1

Function: 板上流水灯显示的8位二进制数从0开始每隔200ms自增1,增至255变回0

CPU:STC89C52RC

Date:Sep 13,2017

By:Bolanche L

C code as following:

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

#include<reg52.h>      //文件包含,把必要的头文件reg52.h加载在到程序当中

#defineuchar unsigned char     //宏定义,用字符串uchar代替无符号字符变量

#defineuint unsigned int        //宏定义,用uint代替无符号整形变量

voiddelay(void) //定义一个无参数无返回值的延迟函数

{

   uchar j;   //定义一个无符号字符变量j

   uint i;    //定义一个无符号整型变量i

   for(i=1000;i>0;i--)   //for语句,外循环,给i赋初值,i自减1直到不满足条件为止

      for(j=250;j>0;j--)  //for语句,内循环,给j赋初值,j自减1直到不满足条件为止

       ;  //空语句,程序运行到这里,不执行其他的操作,直到ij不满足条件为止,会消耗CPU时间,从而起到延时的作用

}

voidmain() //主函数   

{

   P1=0;   //P1端口赋初值,将P1端口所有的电平置为零

   while(1) //while循环,条件永远为真

   {

       P1++;    //P1的值自加1

        delay();  //调用延时函数delay().

   }

}

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

/**************实验3**************/

/**************实验4**************/

Name: sanshuodeng

Function: LED每次间隔一个亮,每次亮四个,第二次亮另外四个,延迟函数时间控制好就可以起到闪烁的效果

CPU:STC89C52RC

Date:Sep 13,2017

By:Bolanche L

C code as following:

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

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

#include<reg52.h>      

#defineuchar unsigned char     

#defineuint unsigned int

voiddelay(uchar m)

{

uchar i,j; 

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

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

}

voidmain()    //主函数

{

while(1)

   {

      P1=0xaa;

       delay(255);

       P1=0x55;

       delay(255);

   }

}

/**************实验4**************/

/**************实验5**************/

Name: liushuideng

Function: one bitliushuideng

CPU:STC89C52RC

Date:Sep 13,2017

By:Bolanche L

C code as following:

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

#include<reg52.h>

#include<intrins.h>   //method中移位函数的使用需要加载头文件intrins.h

#defineuint unsigned int

#defineuchar unsigned char

uchartable[]={0xfe,0xfc,0xfb,0xf7,0xef,0xcf,0xbf,0x7f};   //method 5中赋值使用

voiddelay1s()

{

   uchar j;

   uint z;

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

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

}

voidmain()

{

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

   //method 1

   uchar i, temp;

   while(1)

   {

      temp=0xfe;

      P1= temp;

      for(i=1;i<=8;i++)

       {

          delay1s();

          temp<<=1;

           P1=temp;

       }

   }

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

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

   //method 2 老师您写的

   P1 = 0xFE;

   while(1)

   {

       delay1s();

       P1 <<= 1;

       if(CY) P1 +=1;    //打开reg52.h可以看到sbit CY   = PSW^7;特殊功能寄存器PSW的第7端口,进位标志位,用于表示加法或减法运算时最高位是否有进位或借位,如有则被置1

   }

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

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

   //method 3

   uchar i, temp;

   while(1)

   {

      temp=0x01;

      P1= ~temp;

      for(i=1;i<=8;i++)

       {

          delay1s();

          temp=0x01;

           P1=~(temp<<i);

       }

   }

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

   /********method 4   移位函数的使用************

   uchar i;

   while(1)

   {

     char temp=0xFe;

     P1=temp;

     for(i=1;i<=8;i++)

     {

         P1=0xFE;

         P1=(_crol_(P1,1)) ;

         delay1s();

     }

   }

   /******method 5直接赋值的思想**************

   uchar i;

   while(1)

   {

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

     {

         P1=table[i];

         delay1s();

     }

   }

   ***********method 6将某一位置零的思想************/

   uchar i;

   while(1)

   {

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

       {

           P1=0xff;

          P1 &=~(1<<i);

           delay1s();

       }  

   }

}

/**************实验5**************/

/**************实验6**************/

Name: liushuideng

Function: 2bit liushuideng

CPU:STC89C52RC

Date:Sep 13,2017

By:Bolanche L

C code as following:

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

#include<reg52.h>

#defineuchar unsigned char

#defineuint unsigned int

uchartable[]={0xfc,0xf3,0xcf,0x3f};//method 2使用

voiddelay1s()

{

   uchar z;

   uint j;

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

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

}

 

main()

{  /********* method 1*************

   uchar i,temp;

   while(1)

   {

      temp=0x03;

      P1= ~temp;

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

       {

         delay1s();

         temp<<=2;

         P1=~temp;

       }

   }

   ********* method 1*************/

   //method 2

   uchar i;

   while(1)

   {

      P1= 0xff;

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

       {

         P1=table[i];

         delay1s();

       }

   }

}

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

/**************实验6**************/

实验感想:

  每次做实验的时候,我都会想一想,这道题该怎么去构建自己的思维。因为我以前学的时候也是比较零散,思维比较混乱,所以现在应该好好的考虑一下怎么去优化代码之类的,虽然说条条大路通罗马,但是我们还是得考虑一下单片机的负担,思维是很重要的东西,虽然我以后不一定学单片机之类的,但是,编程对我的思维训练是一种很大的提升。51单片机编程的时候,需要看电路原理图,还有一个就是芯片手册,它对你的编程是有很大的帮助。对一位流水灯的编程,我们可以会有很多很多的方法,所以说我们在编程的时候,可以去考虑很多很多的东西,它能够帮助你实现你需要的功能,它既可以帮助你去复习很多的知识,还可以帮助你去锻炼一种发散的思维,何乐而不为?有时我也觉得自己的思维太死板了,应该多尝试一下天马行空的感觉,不管能不能实现,but I believe there can be miracle when you believe!

原创粉丝点击