课件例题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++ );
}
}
按下按键停止闪烁