高手帮忙看下这个小程序问题出在那里?

2019-07-15 15:07发布

写的一个简单按键输入,指示灯输出的小程序,编译现在没有报错,烧录进单片机运行不起来。看不出那里有问题。望有51单片机高手帮忙看下程序问题出在那里,不胜感激,先行谢过!


//--包含的头文件--//
#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;
                }
        }
}
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
LHL太阳
1楼-- · 2019-07-15 19:11
51的一些知识都忘记了,但是你那个scan_key函数中,while(key_input=0);不知道是想做什么判断的,你这貌似压根不起作用。即使key_input=1了,对语句的执行没有任何影响啊,因为那里加了分号啊~~是不是这么理解的还请告知。 最佳答案
破力达
2楼-- · 2019-07-16 00:00
是没有任何反应
破力达
3楼-- · 2019-07-16 00:51
你能确定硬件是正常的吗
破力达
4楼-- · 2019-07-16 06:07
 精彩回答 2  元偷偷看……
破力达
5楼-- · 2019-07-16 07:30
打错了,你加的花括号是什么意思
破力达
6楼-- · 2019-07-16 13:12
按照逻辑分析好像这样多加了个花括号也不会引起运行不起来的,会不会硬件有问题

一周热门 更多>