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

}

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

二、总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉米子禾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值