本文主要是介绍【单片机】滑稽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;/*组合结束,重新开始*/}}}
保存,下载到单片机里:
成功实现效果~
二、总结
兴趣很重要,单片机很好玩,哈哈
这篇关于【单片机】滑稽AT89C52表情实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!