分享

系列教程|缘缘学单片经验手记—5、驿动的心

 Zmflc 2016-04-29

随着前面的讲解说明,缘缘想信你已经对LED的控制了如指掌了吧,那么现在就跟缘缘一起,来玩点动感的吧,想念你肯定会喜欢的!为了方便讲解,我们就以P0口为例进行说明,P0口接8个LED!

一、制作一个流水灯:

相信这个现在对亲们都不难了吧,我们只要用总线定义端口,然后加上延时,再弄个死循环就OK了:

系列教程|缘缘学单片经验手记—5、驿动的心然后我们按照第三章讲的,把生成hex的选项选上,晶震选成12Mhz的,编译一下看:

系列教程|缘缘学单片经验手记—5、驿动的心

可以看到,我们的程序没有任何问题,那还等什么,烧录看看吧,如果时间太大或是太短,我们就调节yanshi(200);这句语句中的值就行了,是不是有奇妙的情况发生了,缘缘看着那组灯在一个个地闪,心情好激动啊;

那么,只有这一种方法吗,答案是否定的,还有一种方法叫做循环移动,分为循环左移和循环右移,在解释这两个循环移动前,我们先看看位移是怎么回事:

数据位移:

认识数值位移对外部的控制:

首先,明确一个关点,就是数值在程序中以十六进制定义,但在程序中以二进制计算的,怎么回事呢,我们看看下图,对于二进制,左右与高低位是怎么判断的:

系列教程|缘缘学单片经验手记—5、驿动的心

好了,我们知道它的左右与高低位了,那么我们以左移为例,看看它们是怎么移动的,移动后会是什么样子:

系列教程|缘缘学单片经验手记—5、驿动的心通过上图我们看到,当数据在进行左移时(右移也一样)高位会移出去,低位就补0了,那么左移与右移的怎么写呢,还记得缘缘在前面的第一章就说过的东西吗,不清楚了就先看看吧,缘缘这里先写一个左移的程序来:

系列教程|缘缘学单片经验手记—5、驿动的心

把这个程序烧写到单片机执行时,你会发现,灯一个个地被点亮了,然后除第一个外,其它的都灭了,又从第1个开始慢慢地点亮,依次循环,通过这个例程,你应该明白了左移是怎么回事,在这个程序中,while和for循环,我们看到,for除了用作延时外还用于和程序的循环处理,对于for,我们前一章就讲了,不明白的可以看看前面的那一章哦。

循环位移:

在Keil文件的帮助文件下,有个叫循环左移的函数,其基本介绍如下:

系列教程|缘缘学单片经验手记—5、驿动的心

相信对于英文很懂的人来说,一看就知道是怎么回事,但是对于缘缘这样不懂英文的来说,看懂它是件很吃力的事,缘缘就发张图给各位吧:

系列教程|缘缘学单片经验手记—5、驿动的心

看了这张图你是不是明白一些了,那么我们来说说这个程序该怎么写,首先,我们得写上#include < intrins.h="">,这是关于循环位移专用的头文件,不写它,咱们的循环位移函数没能执行,下一步,随便定义个变量,然后先给这个变量赋个值,再让这个数进行循环位移,然后把值赋给P0,让它输出,下面是循环左移程序的书规则:

位移名称(参考变量,位移数),位移名称crol是左移,cror就是右移了,参考变量就是位移是以那个数为准的,位移数就是一次移动几位,好了,说了这么多,我们就写个程序看看这个结果吧:

系列教程|缘缘学单片经验手记—5、驿动的心

烧写单片机看看效果吧,是不是很神奇呢,那么对于LED控制就算是说完了,其实LED对于单片实验是很重要的,主要用于端口检测,这个缘缘以后告诉你怎么用吧,我们刚才一直用左移或是循环左移在做,现在,亲们,自己弄成右移的吧,不难的哦!

二、LED终极变换,舞动的心,绝对是哄MM的利器,俺也喜欢这个

教程项目之心形变幻灯:

1、制作过程,首先准备的东西:

8根针一组的单排针4组,电阻32个(阻值330欧—1K),LED32个,颜色不限,万用板一个,导线若干。

系列教程|缘缘学单片经验手记—5、驿动的心2、先在万用板下用白板笔画点出要画心的大概位置,先找个点,固定心的中心位置,然后以中心位置为主,画出其它的的点固定心的大概位置:

系列教程|缘缘学单片经验手记—5、驿动的心

系列教程|缘缘学单片经验手记—5、驿动的心3、用白板笔把所有的点连接起来,组成一个心形图:

系列教程|缘缘学单片经验手记—5、驿动的心

系列教程|缘缘学单片经验手记—5、驿动的心4、把这个心四等分:

系列教程|缘缘学单片经验手记—5、驿动的心5、我们把这四等分分别标记上用那组单片机的P口去控制:

系列教程|缘缘学单片经验手记—5、驿动的心6、我们从P0的那边开始,在这段内均匀地插上8个LED,暂时先不要固定哦:

系列教程|缘缘学单片经验手记—5、驿动的心7、然后依次把其它的都排也和P0的一样均匀地插上:

系列教程|缘缘学单片经验手记—5、驿动的心8、在心形图的下方,我们插上四组排针,为了方便区分,我们也标记上端口名称:

系列教程|缘缘学单片经验手记—5、驿动的心

9、当固定好位置,再不更改时,我们把LED的正极全部接到一起,然后引一根线与单片机的电源正极相连,所有的负极都与电阻相连,然后用导线把电阻按标记的P口分类地接在下面的排针上,这样,我们就完了心型LED的硬件制作,缘缘建议为了好看点,把导线、电阻放在板子的下面,焊接完成后,四个P口插在单片机小系统对应的四个P口,这时,我们就用下面的程序编译烧写,看看那动感的效果吧!对于程序,相信你已经能够看出明白了。

程序1:

#include< reg52.h="">

#include< intrins.h="">//这个头文件对左移或是右移函数有用,本程序无用

unsigned int x,y;

void delayms(unsigned int z)

{

unsigned int i,j;

for(i=z;i>0;i--)

for(j=110;j>0;j--);

}

void offall();//函数声明

void onall();

void ls();

void fxls();

void bsb();

void fbsb();

void ss(y);

void zxsz();

void fxsz();

void main()//这是主函数,一个程序中一定要有个主函数,

//主函数之后的为分函数,一定要在主函数前面声明,也可以写在主函数之前不声明

{

offall();

delayms(50);

onall();

delayms(50);

while(1)

{

ls();//等时流水灯【这里对声明的函数进行引用】

fxls();//反向等时流水灯

bsb();//半双边流水 由上至下

fbsb();//半双边流水 由下至上

ss(200);//这是你说的显示的时间,按自己的需要改里面的数值【闪烁(y为闪烁间隔时间)】

zxsz();//正向生长

fxsz();//反向生长

}

}

void offall()//开启所有灯

{

P0=0xff;P1=0x00;P2=0x00;P3=0x00;

}

void onall()//关闭所有灯

{P0=0x00;P1=0xff;P2=0xff;P3=0xff;}

void ls()//等时流水灯

{

P0=0xff;

P0=0xfe;delayms(50);

P0=0xfd;delayms(50);

P0=0xfb;delayms(50);

P0=0xf7;delayms(50);

P0=0xef;delayms(50);

P0=0xdf;delayms(50);

P0=0xbf;delayms(50);

P0=0x7f;delayms(50);

P0=0xff;

P2=0x00;

P2=0x80;delayms(50);

P2=0x40;delayms(50);

P2=0x20;delayms(50);

P2=0x10;delayms(50);

P2=0x08;delayms(50);

P2=0x04;delayms(50);

P2=0x02;delayms(50);

P2=0x01;delayms(50);

P2=0x00;

P3=0x00;

P3=0x80;delayms(50);

P3=0x40;delayms(50);

P3=0x20;delayms(50);

P3=0x10;delayms(50);

P3=0x08;delayms(50);

P3=0x04;delayms(50);

P3=0x02;delayms(50);

P3=0x01;delayms(50);

P3=0x00;

P1=0x00;

P1=0x80;delayms(50);

P1=0x40;delayms(50);

P1=0x20;delayms(50);

P1=0x10;delayms(50);

P1=0x08;delayms(50);

P1=0x04;delayms(50);

P1=0x02;delayms(50);

P1=0x01;delayms(50);

P1=0x00;

P0=0xfe;delayms(50);

P0=0xff;

}

void fxls()//反向等时流水灯

{

P0=0xff;

P0=0xfe;delayms(50);

P0=0xff;

P1=0x00;

P1=0x01;delayms(50);

P1=0x02;delayms(50);

P1=0x04;delayms(50);

P1=0x08;delayms(50);

P1=0x10;delayms(50);

P1=0x20;delayms(50);

P1=0x40;delayms(50);

P1=0x80;delayms(50);

P1=0x00;

P3=0x00;

P3=0x01;delayms(50);

P3=0x02;delayms(50);

P3=0x04;delayms(50);

P3=0x08;delayms(50);

P3=0x10;delayms(50);

P3=0x20;delayms(50);

P3=0x40;delayms(50);

P3=0x80;delayms(50);

P3=0x00;

P2=0x00;

P2=0x01;delayms(50);

P2=0x02;delayms(50);

P2=0x04;delayms(50);

P2=0x08;delayms(50);

P2=0x10;delayms(50);

P2=0x20;delayms(50);

P2=0x40;delayms(50);

P2=0x80;delayms(50);

P2=0x00;

P0=0xff;

P0=0x7f;delayms(50);

P0=0xbf;delayms(50);

P0=0xdf;delayms(50);

P0=0xef;delayms(50);

P0=0xf7;delayms(50);

P0=0xfb;delayms(50);

P0=0xfd;delayms(50);

P0=0xfe;delayms(50);

P0=0xff;

}

void bsb()//半双边流水 由上至下

{

offall();

P0=0xfe;delayms(50);

P0=0xfd;P1=0x01;delayms(50);

P0=0xfb;P1=0x02;delayms(50);

P0=0xf7;P1=0x04;delayms(50);

P0=0xef;P1=0x08;delayms(50);

P0=0xdf;P1=0x10;delayms(50);

P0=0xbf;P1=0x20;delayms(50);

P0=0x7f;P1=0x40;delayms(50);

P0=0xff;

P2=0x80;P1=0x80;delayms(50);P1=0x00;

P2=0x40;P3=0x01;delayms(50);

P2=0x20;P3=0x02;delayms(50);

P2=0x10;P3=0x04;delayms(50);

P2=0x08;P3=0x08;delayms(50);

P2=0x04;P3=0x10;delayms(50);

P2=0x02;P3=0x20;delayms(50);

P2=0x01;P3=0x40;delayms(50);

P2=0x80;delayms(50);

offall();

}

void fbsb()//半双边流水 由下至上

{

offall();

P3=0x80;delayms(50);

P2=0x01;P3=0x40;delayms(50);

P2=0x02;P3=0x20;delayms(50);

P2=0x04;P3=0x10;delayms(50);

P2=0x08;P3=0x08;delayms(50);

P2=0x10;P3=0x04;delayms(50);

P2=0x20;P3=0x02;delayms(50);

P2=0x40;P3=0x01;delayms(50);

offall();

P2=0x80;P1=0x80;delayms(50);

offall();

P0=0x7f;P1=0x40;delayms(50);

P0=0xbf;P1=0x20;delayms(50);

P0=0xdf;P1=0x10;delayms(50);

P0=0xef;P1=0x08;delayms(50);

P0=0xf7;P1=0x04;delayms(50);

P0=0xfb;P1=0x02;delayms(50);

P0=0xfd;P1=0x01;delayms(50);

offall();

P0=0xfe;

offall();

}

void ss(y)//闪烁(y为闪烁间隔时间)

{

offall();

delayms(y);

onall();

delayms(y);

}

void zxsz()//正向生长

{

offall();

P0=0xfe;delayms(50);

P0=0xfc;delayms(50);

P0=0xf8;delayms(50);

P0=0xf0;delayms(50);

P0=0xe0;delayms(50);

P0=0xc0;delayms(50);

P0=0x80;delayms(50);

P0=0x00;delayms(50);

P2=0x80;delayms(50);

P2=0xc0;delayms(50);

P2=0xe0;delayms(50);

P2=0xf0;delayms(50);

P2=0xf8;delayms(50);

P2=0xfc;delayms(50);

P2=0xfe;delayms(50);

P2=0xff;delayms(50);

P3=0x80;delayms(50);

P3=0xc0;delayms(50);

P3=0xe0;delayms(50);

P3=0xf0;delayms(50);

P3=0xf8;delayms(50);

P3=0xfc;delayms(50);

P3=0xfe;delayms(50);

P3=0xff;delayms(50);

P1=0x80;delayms(50);

P1=0xc0;delayms(50);

P1=0xe0;delayms(50);

P1=0xf0;delayms(50);

P1=0xf8;delayms(50);

P1=0xfc;delayms(50);

P1=0xfe;delayms(50);

P1=0xff;delayms(50);

}

void fxsz() //反向生长

{

offall();

P0=0xfe;delayms(50);

P1=0x01;delayms(50);

P1=0x03;delayms(50);

P1=0x07;delayms(50);

P1=0x0f;delayms(50);

P1=0x1f;delayms(50);

P1=0x3f;delayms(50);

P1=0x7f;delayms(50);

P1=0xff;delayms(50);

P3=0x01;delayms(50);

P3=0x03;delayms(50);

P3=0x07;delayms(50);

P3=0x0f;delayms(50);

P3=0x1f;delayms(50);

P3=0x3f;delayms(50);

P3=0x7f;delayms(50);

P3=0xff;delayms(50);

P2=0x01;delayms(50);

P2=0x03;delayms(50);

P2=0x07;delayms(50);

P2=0x0f;delayms(50);

P2=0x1f;delayms(50);

P2=0x3f;delayms(50);

P2=0x7f;delayms(50);

P2=0xff;delayms(50);

P0=0x7e;delayms(50);

P0=0x3e;delayms(50);

P0=0x1e;delayms(50);

P0=0x0e;delayms(50);

P0=0x06;delayms(50);

P0=0x02;delayms(50);

P0=0x00;delayms(50);

}

程序2:

使用4组I/O控制心形流水灯,花样多种。已经通过硬件测试,效果不错。

(硬件:用32个led做成一个 爱心 ,直接用4组I/O控制)

#include< reg51.h="">

#include < intrins.h="">//包含单片机寄存器的头文件

char code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,};//P0123向下合拢

char code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,};//P0123向下合拢

char code table2[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,};//P0123向上收回

char code table3[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,};//P0123向上收回

char code table4[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//P0123 一个灯走动

char code table5[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,};//P0123 两个灯走动

char code table6[]={0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,};//P0123 三个灯走动

char code table7[]={0xf0,0xe1,0xc3,0x87,0x0f,};//P0123 四个灯走动

char code table8[]={0xe0,0xc1,0x83,0x07,};//P0123 五个灯走动

char code table9[]={0xc0,0x81,0x03,};//P0123 六个灯走动

char code table10[]={0x80,0x01,};//P0123 七个灯走动

/***************************** 函数功能:延时一段时间 *****************************/

void delay(unsigned int z)

{

unsigned int n,k;

for(n=0;n<>

for(k=0;k ;

}

/***************************** 函数功能:主函数 *****************************/

void main(void)

{

char i,j,k;

while(1)

{

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(i=0;i<8;i++)>

{ P0=P0>>1;

P1=P1>>1;

P2=P2>>1;

P3=P3>>1;

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(k=0;k<8;k++)>

{ P0=P0<>

P1=P1<>

P2=P2<>

P3=P3<>

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<8;j++)>

{ P0=table[j];

P1=table1[j];

delay(5);

}

for(j=0;j<8;j++)>

{ P2=table[j];

P3=table1[j];

delay(5);

}

for(j=0;j<8;j++)>

{ P2=table2[j];

P3=table3[j];

delay(5);

}

P2=0xff;P3=0xff;

for(j=0;j<8;j++)>

{ P0=table2[j];

P1=table3[j];

delay(5);

}

for(j=0;j<10;j++)>

{ P0=0xaa;

P1=0xaa;

P2=0xaa;

P3=0xaa;

delay(10);

P0=0x55;

P1=0x55;

P2=0x55;

P3=0x55;

delay(10);

}

for(j=0;j<3;j++) p0123="">

{ P0=0x00;

P1=0xff;

P2=0xff;

P3=0x00;

delay(10);

P0=0xff;

P1=0x00;

P2=0x00;

P3=0xff;

delay(10);

}

for(j=0;j<3;j++)>

{ P0=0x00;

P1=0x00;

P2=0xff;

P3=0xff;

delay(10);

P0=0xff;

P1=0xff;

P2=0x00;

P3=0x00;

delay(10);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(i=0;i<8;i++)>

{ P0=P0<>

delay(5);

}P0=0x00;

for(i=0;i<8;i++)>

{ P2=P2<>

delay(5);

}P2=0x00;

for(i=0;i<8;i++)>

{ P3=P3<>

delay(5);

}P3=0x00;

for(i=0;i<8;i++)>

{ P1=P1<>

delay(5);

}P1=0x00;

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(i=0;i<8;i++)>

{ P1=P1>>1;

delay(5);

}P1=0x00;

for(i=0;i<8;i++)>

{ P3=P3>>1;

delay(5);

}P3=0x00;

for(i=0;i<8;i++)>

{ P2=P2>>1;

delay(5);

}P2=0x00;

for(i=0;i<8;i++)>

{ P0=P0>>1;

delay(5);

}P0=0x00;

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<8;j++) p0123="">

{ P0=table4[j];

P1=table4[j];

P2=table4[j];

P3=table4[j];

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<7;j++) p0123="">

{ P0=table5[j];

P1=table5[j];

P2=table5[j];

P3=table5[j];

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<6;j++) p0123="">

{ P0=table6[j];

P1=table6[j];

P2=table6[j];

P3=table6[j];

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<5;j++) p0123="">

{ P0=table7[j];

P1=table7[j];

P2=table7[j];

P3=table7[j];

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<4;j++) p0123="">

{ P0=table8[j];

P1=table8[j];

P2=table8[j];

P3=table8[j];

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<3;j++) p0123="">

{ P0=table9[j];

P1=table9[j];

P2=table9[j];

P3=table9[j];

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<2;j++) p0123="">

{ P0=table10[j];

P1=table10[j];

P2=table10[j];

P3=table10[j];

delay(5);

} P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(5);

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(j=0;j<8;j++) p0123="">

{ P0=table4[j];

delay(5);

} P0=0xff;

for(j=0;j<8;j++) p0123="">

{ P2=table4[j];

delay(5);

} P2=0xff;

for(j=0;j<8;j++) p0123="">

{ P3=table4[j];

delay(5);

} P3=0xff;

for(j=0;j<8;j++) p0123="">

{ P1=table4[j];

delay(5);

} P1=0xff;

for(j=0;j<7;j++) p0123="">

{ P0=table5[j];

delay(5);

} P0=0x7f;P2=0xfe;delay(5);P0=0xff;

for(j=1;j<7;j++) p0123="">

{ P2=table5[j];

delay(5);

} P2=0x7f;P3=0xfe;delay(5);P2=0xff;

for(j=1;j<7;j++) p0123="">

{ P3=table5[j];

delay(5);

} P3=0x7f;P1=0xfe;delay(5);P3=0xff;

for(j=1;j<7;j++) p0123="">

{ P1=table5[j];

delay(5);

} P1=0xff;

for(j=0;j<6;j++) p0123="">

{ P0=table6[j];

delay(5);

} P0=0x3f;P2=0xfe;delay(5);P0=0x7f;P2=0xfc;delay(5);P0=0xff;

for(j=0;j<6;j++) p0123="">

{ P2=table6[j];

delay(5);

}P2=0x3f;P3=0xfe;delay(5);P2=0x7f;P3=0xfc;delay(5);P2=0xff;

for(j=0;j<6;j++) p0123="">

{ P3=table6[j];

delay(5);

} P3=0x3f;P1=0xfe;delay(5);P3=0x7f;P1=0xfc;delay(5);P3=0xff;

for(j=0;j<6;j++) p0123="">

{ P1=table6[j];

delay(5);

}P1=0x3f;P0=0xfe;delay(5);P1=0x7f;P0=0xfc;delay(5);P1=0xff;

P0=0xf8;delay(5);

for(j=0;j<5;j++) p0123="">

{ P0=table7[j];

delay(5);

} P0=0x1f;P2=0xfe;delay(5);P0=0x3f;P2=0xfc;delay(5);P0=0x7f;

P2=0xf8;delay(5);P0=0xff;

for(j=0;j<5;j++) p0123="">

{ P2=table7[j];

delay(5);

} P2=0x1f;P3=0xfe;delay(5);P2=0x3f;P3=0xfc;delay(5);P2=0x7f;

P3=0xf8;delay(5);P2=0xff;

for(j=0;j<5;j++) p0123="">

{ P3=table7[j];

delay(5);

} P3=0x1f;P1=0xfe;delay(5);P3=0x3f;P1=0xfc;delay(5);P3=0x7f;

P1=0xf8;delay(5);P3=0xff;

for(j=0;j<5;j++) p0123="">

{ P1=table7[j];

delay(5);

}P1=0x1f;P0=0xfe;delay(5);P1=0x3f;P0=0xfc;delay(5);P1=0x7f;

P0=0xf8;delay(5);P1=0xff;P0=0xf0;delay(5);

for(j=0;j<4;j++) p0123="">

{ P0=table8[j];

delay(5);

} P0=0x0f;P2=0xfe;delay(5);P0=0x1f;P2=0xfc;delay(5);P0=0x3f;

P2=0xf8;delay(5);P0=0x7f;P2=0xf0;delay(5);P0=0xff;

for(j=0;j<4;j++) p0123="">

{ P2=table8[j];

delay(5);

} P2=0x0f;P3=0xfe;delay(5);P2=0x1f;P3=0xfc;delay(5);P2=0x3f;

P3=0xf8;delay(5);P2=0x7f;P3=0xf0;delay(5);P2=0xff;

for(j=0;j<4;j++) p0123="">

{ P3=table8[j];

delay(5);

} P3=0x0f;P1=0xfe;delay(5);P3=0x1f;P1=0xfc;delay(5);P3=0x3f;

P1=0xf8;delay(5);P3=0x7f;P1=0xf0;delay(5);P3=0xff;

for(j=0;j<4;j++) p0123="">

{ P1=table8[j];

delay(5);

} P1=0x0f;P0=0xfe;delay(5);P1=0x1f;P0=0xfc;delay(5);P1=0x3f;

P0=0xf8;delay(5);P1=0x7f;P0=0xf0;delay(5);P1=0xff;

for(j=0;j<3;j++) p0123="">

{ P0=table9[j];

delay(5);

}P0=0x07;P2=0xfe;delay(5);P0=0x0f;P2=0xfc;delay(5);P0=0x1f;P2=0xf8;delay(5);

P0=0x3f;P2=0xf0;delay(5);P0=0x7f;P2=0xe0;delay(5);P0=0xff;

for(j=0;j<3;j++) p0123="">

{ P2=table9[j];

delay(5);

} P2=0x07;P3=0xfe;delay(5);P2=0x0f;P3=0xfc;delay(5);P2=0x1f;P3=0xf8;delay(5);

P2=0x3f;P3=0xf0;delay(5);P2=0x7f;P3=0xe0;delay(5);P2=0xff;

for(j=0;j<3;j++) p0123="">

{ P3=table9[j];

delay(5);

} P3=0x07;P1=0xfe;delay(5);P3=0x0f;P1=0xfc;delay(5);P3=0x1f;P1=0xf8;delay(5);

P3=0x3f;P1=0xf0;delay(5);P3=0x7f;P1=0xe0;delay(5);P3=0xff;

for(j=0;j<3;j++) p0123="">

{ P1=table9[j];

delay(5);

} P1=0x07;P0=0xfe;delay(5);P1=0x0f;P0=0xfc;delay(5);P1=0x1f;P0=0xf8;delay(5);

P1=0x3f;P0=0xf0;delay(5);P1=0x7f;P0=0xe0;delay(5);P1=0xff;

for(j=0;j<2;j++) p0123="">

{ P0=table10[j];

delay(5);

} P0=0x03;P2=0xfe;delay(5); P0=0x07;P2=0xfc;delay(5);

P0=0x0f;P2=0xf8;delay(5);P0=0x1f;P2=0xf0;delay(5);

P0=0x3f;P2=0xe0;delay(5);P0=0x7f;P2=0xc0;delay(5);P0=0xff;

for(j=0;j<2;j++) p0123="">

{ P2=table10[j];

delay(5);

} P2=0x03;P3=0xfe;delay(5); P2=0x07;P3=0xfc;delay(5);

P2=0x0f;P3=0xf8;delay(5);P2=0x1f;P3=0xf0;delay(5);

P2=0x3f;P3=0xe0;delay(5);P2=0x7f;P3=0xc0;delay(5);P2=0xff;

for(j=0;j<2;j++) p0123="">

{ P3=table10[j];

delay(5);

} P3=0x03;P1=0xfe;delay(5); P3=0x07;P1=0xfc;delay(5);

P3=0x0f;P1=0xf8;delay(5);P3=0x1f;P1=0xf0;delay(5);

P3=0x3f;P1=0xe0;delay(5);P3=0x7f;P1=0xc0;delay(5);P3=0xff;

for(j=0;j<2;j++) p0123="">

{ P1=table10[j];

delay(5);

} P1=0xff;

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(i=0;i<8;i++)>

{ P0=P0<>

P1=P1>>1;

P2=P2>>1;

P3=P3<>

delay(5);

}

P0=0xff;P1=0xff;P2=0xff;P3=0xff;

for(k=0;k<8;k++)>

{ P0=P0>>1;

P1=P1<>

P2=P2<>

P3=P3>>1;

delay(5);

}

}

}

关于LED,缘缘就说完了,对于上面两个程序,通过前面的内容我们已经不难理解了,只不过是多用了几个延时,for循环,总线法控制LED等这些程序,所以看这个程序时,我们要分开来一条条地看,去看看它们都代表着啥意思,缘缘祝大家学得愉快,下节我们将进军数码管,这个可与LED也有关系哦!

补充内容:

关于code table的问题:这就是无符号字符型表,存储在程序存储器(rom)中,不占用随机存储器(ram),这样用是因为令一些不用修改的常值不占用宝贵的ram。若将第一个值赋给i,就写i=table[0];,和普通的表的用法是一样的。所以我们要看的就是table[0]{}后面括号中的数值是多少,中括号里面的数字表示后面布大括号中的第几个数值,打个比方:i=table[2]{5,7,9,11,15};那么通过分析,我们得知,这时的i就是table大括号中的第三个数值,因为在C语言中,0表示第一位,所以2就是第三位了,那么我们可以看到,第三位是9,所以i=table[2]{5,7,9,11,15}这条语句的最后含义就是i=9.

了解更多缘缘系列教程请关注“云汉电子社区”微信公众号平台ickeybbs,或者登录云汉电子社区官网(bbs.ickey.cn)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约