打印

c语言求助!感激不尽

[复制链接]
1302|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天写了一个流水灯程序,刚开始思路还不错,这个程序写成功了。当我再回头来想改进的时候,在主函数中添加了一个变量来接收函数的返回值的时候,编译没有问题,一切都变了:流水灯不再按照预先那样工作了,而且当你按键的时候,灯在不停的闪烁。(除主函数外,其余都一样)希望有人能伸出友爱之手,把我从疑惑的边缘解救,无以为报,谢谢!!!
错误问题程序
#include <reg51.h>
#include <intrins.h>
void delay(unsigned char ms);
void process(unsigned char key_cess);
unsigned char key_scan();
sbit K1=P0^0;
sbit K2=P0^1;
main()
{
        unsigned char key_cess,K3,key_s;
        P2=0xfe;
        K3=0x03;
        while(1)
        {
                key_s=key_scan();
                if(K3!=key_s)
                {
                        delay(10);
                        key_s=key_scan();
                        if(key_s!=K3)
                        {        
                                key_cess=key_s;
                                process(key_cess);
                        }
                }
        }
}
unsigned char key_scan()
{
        unsigned char key_s;
        key_s=0x00;
        key_s |=K2;
        key_s <<=1;
        key_s |=K1;
        return key_s;
}
void process(unsigned char key_cess)
{
        if((key_cess & 0x01) == 0)
        {
                P2 = _cror_(P2,1);
        }
        else if((key_cess & 0x02) == 0)
        {
                P2 = _crol_(P2, 1);
        }
}
void delay(unsigned char ms)
{
        unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}


正确程序:
#include <reg51.h>
#include <intrins.h>
void delay(unsigned char ms);
void process(unsigned char key_cess);
unsigned char key_scan();
sbit K1=P0^0;
sbit K2=P0^1;
main()
{
        unsigned char key_cess,key_s;
        P2=0xfe;
        key_cess=0x03;
        while(1)
        {
                key_s=key_scan();
                if(key_cess!=key_s)
                {
                        delay(10);
                        key_s=key_scan();
                        if(key_s!=key_cess)
                        {        
                                key_cess=key_s;
                                process(key_cess);
                        }
                }
        }
}
unsigned char key_scan()
{
        unsigned char key_s;
        key_s=0x00;
        key_s |=K2;
        key_s <<=1;
        key_s |=K1;
        return key_s;
}
void process(unsigned char key_cess)
{
        if((key_cess & 0x01) == 0)
        {
                P2 = _cror_(P2,1);
        }
        else if((key_cess & 0x02) == 0)
        {
                P2 = _crol_(P2, 1);
        }
}
void delay(unsigned char ms)
{
        unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}

相关帖子

沙发
cpu51| | 2013-9-8 13:42 | 只看该作者
你的返回值在主程序中不能多次出现。起码在整一个程序循环周期里不应该出现多次。多了就不知道返回时哪次的了。

使用特权

评论回复
板凳
cpu51| | 2013-9-8 13:44 | 只看该作者
再次看了,你的程序编写的没有规划。

使用特权

评论回复
地板
我就是我自己|  楼主 | 2013-9-9 21:07 | 只看该作者
cpu51 发表于 2013-9-8 13:42
你的返回值在主程序中不能多次出现。起码在整一个程序循环周期里不应该出现多次。多了就不知道返回时哪次的 ...

谢谢你!

使用特权

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

本版积分规则

3

主题

18

帖子

0

粉丝