我這次單片機(jī)考試的最后一個(gè)題目:
(1) 開關(guān)沒有閉合時(shí),8個(gè)LED燈以0.5秒同時(shí)閃爍。
(2) 開關(guān)K1閉合時(shí),D1,D2。。。D8以1秒的速度實(shí)現(xiàn)左移,右移。
(3) 開關(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( ); } }