51单片机实验(LED and KEY)

简介: 51单片机实验(LED and KEY)

单片机实验


/***************实验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直到不满足条件为止


      ;  //空语句,程序运行到这里,不执行其他的操作,直到i、j不满足条件为止,会消耗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!


相关文章
|
7月前
4-2 51单片机点亮LED
4-2 51单片机点亮LED
63 2
|
7月前
|
数据格式
用C51单片机制作LED流水的灯
用C51单片机制作LED流水的灯
|
7月前
|
芯片
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计
|
7月前
|
物联网
STC51单片机-实验开发装置仿真-物联网应用系统设计
STC51单片机-实验开发装置仿真-物联网应用系统设计
144 0
|
7月前
|
物联网
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
86 0
|
7月前
|
物联网 人机交互 开发工具
STC51单片机-阵列LED显示-物联网应用系统设计项目开发
STC51单片机-阵列LED显示-物联网应用系统设计项目开发
130 0
|
7月前
|
物联网
STC51单片机-中断控制LED-物联网应用系统设计项目开发
STC51单片机-中断控制LED-物联网应用系统设计项目开发
108 0
单片机实验:外部中断系统实验 如何1357,2468灯交替亮
单片机实验:外部中断系统实验 如何1357,2468灯交替亮
203 0
单片机实验:兰花草
单片机实验:兰花草
99 0
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)