【单片机】滑稽AT89C52表情实现
【单片机】滑稽AT89C52表情实现
零、原因
在群里看到了这样一个表情:

这是用51做的,刚好开发板上有8个小灯,想实现一下。
一、代码
新建工程,写入如下代码:
#include<reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void delay400ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=19;c>0;c--)
        for(b=20;b>0;b--)
            for(a=130;a>0;a--);
}
void main()
{
	unsigned char cnt = 0,n,i;
	ADDR0 = 0;
	ADDR1 = 1;
	ADDR2 = 1;
	ADDR3 = 1;
	ENLED = 0;
	while(1)
	{
		switch(cnt)
		{
			case 0:
			{/*第一部分,灯从左至右依次点亮*/	
				n = 0xFF;
				while(1)
				{
					P0 = n;
					delay400ms();
					
					if(n == 0x00)break;
					n = n>>1;
				}
				cnt++;
			}
			case 1:
			{/*第二部分,灯从右至左依次熄灭*/
				n = 0xFF;
				while(1)
				{
					P0 = ~n;
					delay400ms();
					
					if(n == 0x00)break;
					n = n<<1;
				}
				cnt++;
			}
			case 2:
			{/*第三部分,灯从左至右依次点亮且熄灭上一个*/
				n = 0x80;
				while(1)
				{
					P0 = ~n;
					delay400ms();
					
					if(n == 0x01)break;
					n = n>>1;
				}
				cnt++;
			}
			case 3:
			{/*第四部分,灯从右至左依次点亮且熄灭上一个*/
				n = 0x01;
				while(1)
				{
					P0 = ~n;
					delay400ms();
					
					if(n == 0x80)break;
					n = n<<1;
				}
				cnt++;
			}
			
			case 4:
			{/*第五部分,灯同时点亮后又同时熄灭10次*/
				n = 0x00;
				for(i = 0; i<20 ;i++)
				{
					P0 = ~n;
					delay400ms();
					n = ~n;
				}
				cnt++;
			}
			case 5:
			{/*第六部分,前后四个灯为一组两组灯交替点亮8次*/
				n = 0xF0;
				for(i = 0; i<16 ;i++)
				{
					P0 = n;
					delay400ms();
					n = ~n;
				}
				cnt++;
			}
			case 6:
			{/*第七部分,第3,7,1,4,6个灯依次点亮且熄灭上一个灯3次*/
				for(i = 0; i<3 ;i++)
				{
					n = 0x20;
					P0 = ~n;
					delay400ms();
					P0 = 0xFF;
					delay400ms();
					n = 0x02;
					P0 = ~n;
					delay400ms();
					P0 = 0xFF;
					delay400ms();
					n = 0x80;
					P0 = ~n;
					delay400ms();
					P0 = 0xFF;
					delay400ms();
					n = 0x10;
					P0 = ~n;
					delay400ms();
					P0 = 0xFF;
					delay400ms();
					n = 0x04;
					P0 = ~n;
					delay400ms();
					P0 = 0xFF;
					delay400ms();
				}
				cnt++;
			}
			/*大家还可以再加更多组合,记得cnt++*/
			default :	cnt = 0;break;
			/*组合结束,重新开始*/
		}
	}
}
保存,下载到单片机里:

成功实现效果~
二、总结
兴趣很重要,单片机很好玩,哈哈
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号