ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【单片机】滑稽AT89C52表情实现

2020-11-13 21:33:55  阅读:285  来源: 互联网

标签:cnt P1 滑稽 单片机 while delay400ms sbit 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有