使LED灯亮10种模式(简单)

来源:互联网 发布:网络直播推广软文 编辑:程序博客网 时间:2024/06/11 21:55

使用延时函数编写10种led灯亮的模式:
实现按下k18:
1次单灯从左往右亮(循环);
2次单灯从左往右灭(循环);
3次单灯从右往左亮(循环);
4次单灯从右往左灭(循环);
循环往复。
按下k19:
1次两侧各一个灯从外往里亮(循环);
2次两侧各一个灯从外往里灭(循环);
3次从中间两个灯分别往两侧亮(循环);
4次从中间两个灯分别往两侧灭(循环);
循环往复。
按下k20:
一次:两侧各一个灯从外往里亮 , 然后两侧各一个灯从外往里灭,接着中间两个灯分别往两侧亮,最后中间两个灯分别往两侧灭(循环);
再按一次:从中间两个灯分别往两侧灭,然后中间两个灯分别往两侧亮,接着两侧各一个灯从外往里灭,最后两侧各一个灯从外往里亮。
此程序非常简单,只适用于新人练手。
明天这个时候将尝试用中断系统书写实现本功能的程序。
代码如下。

#include <reg51.h>#include <intrins.h>sbit key1st = P1^4;     //k18sbit key2nd = P1^5;     //k19sbit key3rd = P1^6;     //k20void delay(){    unsigned int k;    for(k = 0; k < 30000;k++)    {        if(key1st != 1 )        {            break;        }        else if(key2nd != 1)        {            break;        }        else if(key3rd != 1)        {            break;        }    }}unsigned char i;void model1st(){    for(i=8;i>0;i--)    {        P2=_cror_(P2,1);        delay();    }}void model2nd(){    for(i=8;i>0;i--)    {        P2=_cror_(P2,1);        delay();    }}void model3rd(){    for(i=8;i>0;i--)    {        P2=_crol_(P2,1);        delay();    }}void model4th(){    for(i=8;i>0;i--)    {        P2=_crol_(P2,1);        delay();    }}void model5th(){        P2=0x81;        delay();        P2=0x42;        delay();        P2=0x24;        delay();        P2=0x18;        delay();}void model6th(){        P2=0x7e;        delay();        P2=0xbd;        delay();        P2=0xdb;        delay();        P2=0xe7;        delay();}void model7th(){        P2=0x18;        delay();        P2=0x24;        delay();        P2=0x42;        delay();        P2=0x81;        delay();}void model8th(){        P2=0xe7;        delay();        P2=0xdb;        delay();        P2=0xbd;        delay();        P2=0x7e;        delay();}void model9th(){        model5th();        model6th();        model7th();        model8th();}void model10th(){        model8th();        model7th();        model6th();        model5th();}void delay1st(){    unsigned int i;    for(i=0;i<2000;i++);}void main(){    unsigned int a,b,c,mark1st,mark2nd,mark3rd;    a = 0;    b = 0;    c = 0;    while(1)    {        if(key1st!= 1)        {            delay1st();            if(key1st!=1)            {                a++;                b = 0;                c = 0;                mark1st = 1;                mark2nd = 0;                mark3rd = 0;            }        }                if(mark1st == 1)        {            switch(a%4)            {                case 1:P2=0x80;model1st();break;                case 2:P2=0x7f;model2nd();break;                case 3:P2=0x01;model3rd();break;                case 0:P2=0xfe;model4th();break;                default: ; break;            }        }        if(key2nd!=1)        {            delay1st();            if(key2nd!=1)            {                b++;                a = 0;                c = 0;                mark1st = 0;                mark2nd = 1;                mark3rd = 0;            }        }        if(mark2nd == 1)        {            switch(b%4)            {                case 1:model5th();break;                case 2:model6th();break;                case 3:model7th();break;                case 0:model8th();break;                default: ; break;            }            if(i==1)            {                i=8;            }        }        if(key3rd!=1)        {            delay1st();            if(key3rd!=1)            {                c++;                b = 0;                a = 0;                mark1st = 0;                mark2nd = 0;                mark3rd = 1;            }        }        if(mark3rd == 1)        {            if(c%2==1)             model9th();             else             model10th();        }    }}
原创粉丝点击