我這次單片機(jī)考試的最后一個(gè)題目:
(1) 開(kāi)關(guān)沒(méi)有閉合時(shí),8個(gè)LED燈以0.5秒同時(shí)閃爍。
(2) 開(kāi)關(guān)K1閉合時(shí),D1,D2。。。D8以1秒的速度實(shí)現(xiàn)左移,右移。
(3) 開(kāi)關(guān)K2閉合時(shí),先D8,D6,D4,D2 點(diǎn)亮,D7,D5,D3,D1 點(diǎn)亮,重復(fù)上述過(guò)程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個(gè)LED 0.5秒同時(shí)閃爍
{
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( );
}
}
