单片机—心形流水灯(设计及源码)
设计:
源码:
#include<reg52.h>
void delay1(unsigned int i){//延迟函数
unsigned int j;
unsigned char k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void main(){
while(1)
{//字节式控制。
P3 = 0xfe;
delay1(1000);
P3 = 0xfd;
delay1(1000);
P3 = 0xfb;
delay1(1000);
P3 = 0xf7;
delay1(1000);
P3 = 0xef;
delay1(1000);
P3 = 0xdf;
delay1(1000);
P3 = 0xbf;
delay1(1000);
P3 = 0x7f;
delay1(1000);
P3=0xff;
P2 = 0xfe;
delay1(1000);
P2 = 0xfd;
delay1(1000);
P2 = 0xfb;
delay1(1000);
P2 = 0xf7;
delay1(1000);
P2 = 0xef;
delay1(1000);
P2 = 0xdf;
delay1(1000);
P2 = 0xbf;
delay1(1000);
P2 = 0x7f;
delay1(1000);
P2=0xff;
P0 = 0xfe;
delay1(1000);
P0 = 0xfd;
delay1(1000);
P0 = 0xfb;
delay1(1000);
P0 = 0xf7;
delay1(1000);
P0 = 0xef;
delay1(1000);
P0= 0xdf;
delay1(1000);
P0=0xff;
}
}
所遇到的技术问题:
1,怎么快速标号连接。
答:
- Proteus中添加组件后双击引脚可以快速生成一个最近的端口。
-按A调出设置界面
-在字符串中写:net=H#,"H"可以换成自定义前缀,net为所点引脚的名字可以不用管。计数值为起始值,增量每点一次增加的数目。
-依次点击想要编号的引脚。(如果点多了,可以移除,重定尺寸)
-芯片引脚的标号与想连接的器件号码一样。
2,怎么源码控制流水灯。
想亮的灯置为0,不想的置为1。
3,控制某个灯的端口地址怎么表示。
大写的P1,P2即为芯片的引脚地址,通过0xf7(11110111)等16进制来控制想亮的灯为0,其余为1.
unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
while(1)
{
unsigned char m;
for(m=0;m<8;m++){
P3=table[m];
delay1(1000);}
P3=0xff;
for(m=0;m<8;m++){
P2=table[m];
delay1(1000);}
P2=0xff;
for(m=0;m<6;m++){
P0=table[m];
delay1(1000);}
P0=0xff;}
把上面的加入main函数也能实现