打印

大虾们帮刚入门菜鸟看看程序,恳请指导

[复制链接]
1725|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thanksgiving|  楼主 | 2009-5-26 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谢谢

/*****************************************
间隔300ms先奇数亮再偶数亮,循环三次;
一个灯上下循环三次;
两个分别从两边往中间流动三次,再从中间往两边流动三次;(这个还不会)
8个全部闪烁3次;
关闭发光管,程序停止。


******************************************/


#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void main()
{
    uint x,y,z;
    uchar temp1,temp2,temp3,temp4;
    temp1=0xaa;
    temp2=0xfe;
    temp3=0x00;
    temp4=0xff;
    
/************************/
    for(x=6;x>0;x--)   //间隔300ms先奇数亮再偶数亮,循环三次
    {
        P1=temp1;
        delay(340);
        temp1=_crol_(temp1,1);
        
    };    

/************************/
        P1=temp4;
        delay(340);
        P1=temp2;
    for(x=3;x>0;x--)      //一个灯左右循环三次
    {
        

        for(y=7;y>0;y--)  //向左流动7位
        {
            temp2=_crol_(temp2,1);
            P1=temp2;
            delay(340);
        };
        
        for(z=0;z<7;z++)     //向右流动7位
        {
            temp2=_cror_(temp2,1);
            P1=temp2;
            delay(340);
        };
    };
/*************************
两个分别从两边往中间流动三次,再从中间往两边流动三次;
这个算法还不会,请大虾们给个解。谢谢。

*************************/



    for(x=3;x>0;x--)        //8个全部闪烁3次
    {
        P1=temp4;
        delay(340);
        P1=temp3;
        delay(340);

    } 
         P1=temp4;
}

/****************************/

void delay(uint z)//延时
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=100;y>0;y--);
}

相关帖子

沙发
九浩| | 2009-5-27 11:28 | 只看该作者

换个思路很简单的!

/*两个分别从两边往中间流动三次,再从中间往两边流动三次;*/

你编的程序大概都用的是一个思路吧:循环左移或右移,遇到同时向两边移动就进行不下去了!其实完全可以换个思路吗!  x:灯灭   o:灯亮
xxxooxxx    0xe7
xxoxxoxx    0xdb
xoxxxxox    0xbd
oxxxxxxo    0x7e

接着你的程序写:

uchar code table[]={0,0xe7,0xdb,0xbd,0x7e};// 对需要亮的灯进行编码

uchar count1,num1,count2,num2;

void main()
{
    while(1)
    {
        for(count1=1;count1<4;count1++)//两边往中间流动三次
         }
            for(num1=4;num1>0;num1--)
            {
                P1=table[num1];
                delay_ms(300);
            }
         }
        if(count1==4)//再从中间往两边流动三次
        {
            for(count2=1;count2<4;count2++)
            {
                for(num2=1;num2<5;num2++)
                {
                    P1=table[num2];
                    delay_ms(300);
                }
            }
        }
    }
}
建议:最好一次只问一个问题!参考一下吧!

使用特权

评论回复
板凳
thanksgiving|  楼主 | 2009-5-27 14:26 | 只看该作者

谢谢。。

我当时想用个函数,不过不会写
如下:
1111 1111
0111 1110=2^7-2^0
0011 1100=0100 0000-10-1=2^6-2^1-2^0
。。。。。。
(^表示上标,也就是几次方)


呵呵

使用特权

评论回复
地板
ayb_ice| | 2009-5-27 21:17 | 只看该作者

直接查表,方便又简单

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

153

帖子

0

粉丝