飞翔科技电子爱好者论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2650|回复: 5

大神帮我看看这个程序问题出在哪里

[复制链接]

5

主题

32

帖子

103

积分

注册会员

Rank: 2

积分
103
发表于 2016-1-21 20:06:19 | 显示全部楼层 |阅读模式
一个简单按键输入,指示灯输出的小程序,编译现在没有报错,烧录进单片机运行不起来。看不出那里有问题。下面是程序:

//--包含的头文件--//
#include <reg51.h>         
#include <intrins.h>
#define uchar unsigned char

//--定义要使用的IO口--//
sbit USB_SPDIF=P0^0;         //USB_SPDIF选择

//sbit 62429_CLK=P0^1;    //62429_CLK
//sbit 62429_DATA=P0^2;   //62429_DATA

sbit LedFreq0=P0^3;   //频率显示0指示
sbit LedFreq1=P1^0;   //频率显示1指示

sbit LedFs0=P1^4;          //频率输入0
sbit LedFs1=P1^5;     //频率输入1

sbit LedCoax=P1^1;    //同轴输入指示
sbit LedOpt=P1^2;     //光纤输入指示
sbit LedUSB=P1^3;     //USB输入指示

sbit KeyInput=P3^2;          //输入模式选择
sbit KeyDown=P3^3;    //音量减
sbit KeyUp=P3^4;      //音量加
uchar conunt=0;

//--声明全局函数--//
void Delay10ms();  //延时子函数
void scan_key();  //按键子函数


/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能                   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;        //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }

        }      
}


/*******************************************************************************
* 函 数 名         : scan_key()
* 函数功能                   : 扫描键盘
* 输    入         : 无
* 输    出         : 读取到的键值
*******************************************************************************/
void scan_key (void)
{
        if (KeyInput==0)
        {
                Delay10ms(1);
                if (KeyInput==0)
                {
                    Delay10ms(1);
                        while (KeyInput==0);
                        conunt++;
                        if (conunt==3)
                        {
                                conunt = 0;
                        }
                }
        }        
}

/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main (void)
{
uchar count = 0;
LedFreq0 = 1;  //初始化LED
LedFreq1 = 1;
LedCoax = 1;  
LedOpt = 1;
LedUSB = 1;        
USB_SPDIF=1;
{
        while (1)
        {
            LedFreq0=LedFs0;
                LedFreq1=LedFs1;
                scan_key ();
                if (count==0)
                {
                        LedUSB = 0;
                        LedCoax = 1;
                        LedOpt = 1;
                        USB_SPDIF =1;

                }
                if (count==1)
                {
                        LedUSB = 1;
                        LedCoax = 0;
                        LedOpt = 1;
                        USB_SPDIF =0;
                }
                if (count==2)
                {
                        LedUSB = 1;
                        LedCoax = 1;
                        LedOpt = 0;
                        USB_SPDIF =0;
                }
        }
}
}
回复

使用道具 举报

28

主题

137

帖子

1625

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1625
发表于 2016-1-21 20:08:58 | 显示全部楼层
你可以注释掉部分代码,然后一点一点释放,查找一下,问题出在哪里
回复 支持 反对

使用道具 举报

17

主题

62

帖子

195

积分

注册会员

Rank: 2

积分
195
发表于 2016-1-21 20:12:45 | 显示全部楼层
你那个scan_key函数中,while(key_input=0);不知道是想做什么判断的,你这貌似压根不起作用。即使key_input=1了,对语句的执行没有任何影响啊,因为那里加了分号啊~~
回复 支持 反对

使用道具 举报

5

主题

32

帖子

103

积分

注册会员

Rank: 2

积分
103
 楼主| 发表于 2016-1-21 20:14:52 | 显示全部楼层
admin 发表于 2016-1-21 20:08
你可以注释掉部分代码,然后一点一点释放,查找一下,问题出在哪里

谢谢版主,这个方法可行
回复 支持 反对

使用道具 举报

5

主题

32

帖子

103

积分

注册会员

Rank: 2

积分
103
 楼主| 发表于 2016-1-23 20:49:04 | 显示全部楼层
lyssb 发表于 2016-1-21 20:12
你那个scan_key函数中,while(key_input=0);不知道是想做什么判断的,你这貌似压根不起作用。即使key_input ...

现在没问题了。是这个子程序有问题,修改为        if (!KeyInput)就可以了。
回复 支持 反对

使用道具 举报

5

主题

32

帖子

103

积分

注册会员

Rank: 2

积分
103
 楼主| 发表于 2016-1-23 21:02:20 | 显示全部楼层
哈哈,现在没问题了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|飞翔科技电子爱好者论坛  

GMT+8, 2019-4-20 16:47 , Processed in 0.274089 second(s), 26 queries .

Powered by Discuz X3.2

© 2001-2011 Comsenz 源码论坛

返回顶部