我这次单片机考试的最后一个题目:
(1) 开关没有闭合时,8个LED灯以0.5秒同时闪烁。
(2) 开关K1闭合时,D1,D2。。。D8以1秒的速度实现左移,右移。
(3) 开关K2闭合时,先D8,D6,D4,D2 点亮,D7,D5,D3,D1 点亮,重复上述过程5次。
答:程序如下
#include"reg51.h"
#define uchar unsigned char
unsigned char temp;
unsigned char a,b;
unsigned char i;
sbit K1=P1^0;
sbit K2=P1^1;
void delay10ms( )
{
unsigned char i,j,k;
for(i=1;i>0;i--)
for(j=200;j>0;j--)
for(k=248;k>0;k--);
}
void delay05s( )
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=200;j>0;j--)
for(k=248;k>0;k--);
}
void delay1s( )
{
unsigned char i,j,k;
for(i=10;i>0;i--)
for(j=200;j>0;j--)
for(k=248;k>0;k--);
}
void calcShanShuo( ) //8个LED 0.5秒同时闪烁
{
P2=0x00;delay05s( );
P2=0xff;delay05s( );
}
void calcZuoYiYouYi( ) //延迟1秒左移右移
{
temp=0xfe;
P2=temp;
delay1s( );
for(i=1;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P2=a|b;
delay1s( );
}
for(i=2;i<9;i++)
{
a=temp>>i;
b=temp<<(8-i);
P2=a|b;
delay1s( );
}
}
void calc3( ) //LED 2468~1357 0.5秒闪烁5次
{
unsigned char i;
for(i=0;i<5;i++)
{
P2=0xaa;
delay05s( );
P2=0x55;
delay05s( );
}
}
void main(void)
{
while(1)
{
if(K1==0)
{
delay10ms( );
while(K1==0);
delay10ms( );
calcZuoYiYouYi( );
}
if(K2==0)
{
delay10ms( );
while(K2==0);
delay10ms( );
calc3();
}
calcShanShuo( );
}
}
