我这次单片机考试的最后一个题目:
(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( ); } }