其他分享
首页 > 其他分享> > 【单片机】滑稽AT89C52表情实现

【单片机】滑稽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;
			/*组合结束,重新开始*/
		}
	}

}

保存,下载到单片机里:
效果
成功实现效果~

二、总结

兴趣很重要,单片机很好玩,哈哈

标签:cnt,P1,滑稽,单片机,while,delay400ms,sbit,AT89C52
来源: https://www.cnblogs.com/minuy/p/13971433.html