单片机实训题第四章

课件例题9: 如图所示,编程实现LED从左到右的流水灯功能,间隔时间为100ms,12MHz晶振。(联合Keil C和 Protues,或者只用Protues完成仿真测试,并测试功能是否能实现)

#include < reg52.h >

#define  uchar unsigned  char

void  delayms( uchar  ms )    

{  

  uchar  i;

    while( ms-- )

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

}                        

void  main( void )  

{  

  P2 = 0xfe ;  

    while( 1 )

{

  delayms( 100 );

       P2=( P2<<1 )|( P2>>7 );

    }

}   

ms中间多余空格删掉

课件例题2:如图所示,P2.0接一个发光二极管,P1.0接一个按键,要求按键按下时,发光二极管发光,当按键弹开时,发光二极管不发光。(联合Keil C和 Protues,或者只用Protues完成仿真测试,并测试功能是否能实现)

#include < reg51.h >

sbit  LED = P2^0 ;

sbit  S = P1^0 ;

void  main( void )

{

   while( 1 )

   {

     if( S == 0 )LED = 0 ;

     else  LED = 1 ;

  }

}

按下发光

弹开熄灭

课件例题3:如图所示,P2口接8只发光二极管,P1.0、P1.1分别接一个按键S1、S2,要求当没有键按下时,8个LED全灭,当S1按键按下时,左边4个LED亮,当S2按键按下时,右边4个LED亮,当两个按键按下时,8个LED全亮。(联合Keil C和 Protues,或者只用Protues完成仿真测试,并测试功能是否能实现)

#include < reg51.h >

sbit  S1 = P1^0 ;

sbit  S2 = P1^1 ;

void  main( void )

{

   while( 1 )

   {

      if((S1 ==0)&&(S2 == 0))P2 = 0 ;

         else  if((S1 ==0)&&(S2 == 1))P2 = 0xf0;   

            else  if((S1 ==1)&&(S2 == 0))P2 = 0x0f ;   

               else  P2 = 0xff ;

  }

}

S1按下右边四个亮灯

S2按下左边四个亮灯

同时按下同时亮灯

课件例题4:如图所示,P2.0~P2.3接4个发光二极管,P2.4~P2.7接4个按键,现要求一般情况下,4个发光二极管全亮,如果只按S1时,D1灭,只按S2时,D2灭,以此类推。(联合Keil C和 Protues,或者只用Protues完成仿真测试,并测试功能是否能实现)

#include<reg51.h>

#define  uchar   unsigned  char

void  main( void )

{

   uchar  temp ;

   P2 = 0xf0 ;  

   while(1)

{

        temp = P2 ;

        temp =temp & 0xf0 ;

     switch( temp )                        

      {

          case  0xe0 : P2 = 0xf1 ; break ;

           case  0xd0 : P2 = 0xf2 ; break ;

          case  0xb0 : P2 = 0xf4 ; break ;

           case  0x70 : P2 = 0xf8 ; break ;

           default : P2 = 0xf0 ;

     }

   }

}

只按下s1,d1灭以此类推

课件例题6:如图所示,若与P2.0相连的发光二极管D1不停地闪烁,当与P1.0相连的按键按S1下时停止闪烁。(联合Keil C和 Protues,或者只用Protues完成仿真测试,并测试功能是否能实现)

#include <reg51.h>

#define  uint  unsigned  int 

sbit  LED=P2^0;

sbit  S=P1^0;

void  main( void )

{

    uint i;

    while(1)

    {

       LED =~LED ;

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

       if(S==0)break ;

    }

  while(1);

}

闪烁

P1按下时停止闪烁

扩展训练题6:仿真电路如图所示,编写程序,使图中的发光二极管D1闪烁10次

#include < reg51.h >

#define  uint  unsigned  int 

sbit  LED= P1^0 ;

void  main( void )

{

uint i,j;

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

 {

 LED=0;

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

 LED=1;

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

    }

 while(1)

 {

 LED=1;

 }

}

D1闪烁十次

课件例题7:如图所示,当与P1.0相连的S1按下时,与P2.0相连的发光二极管D1暂停闪烁,S1放开时,发光二极管继续闪烁,试编写程序实现。(联合Keil C和 Protues,或者只用Protues完成仿真测试,并测试功能是否能实现)

#include < reg51.h >

#define  uint  unsigned  int 

sbit  LED = P2^0 ;

sbit  S = P1^0 ;

void  main( void )

{

   uint  i ;

   while(1)

   {

      if( S == 0 )continue ;

     LED = ~ LED ;

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

    }

}

按下按键停止闪烁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值