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

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条回答
zds110
1楼-- · 2019-07-17 10:41
破力达 发表于 2016-1-17 12:38
仿真是正常的,实际情况不正常,那应该说明是硬件问题才对

仿真只能在第一个判断循环,外部硬件表现也正常。
zds110
2楼-- · 2019-07-17 15:30
 精彩回答 2  元偷偷看……
破力达
3楼-- · 2019-07-17 16:18
zds110 发表于 2016-01-17 13:35
仿真只能在第一个判断循环,外部硬件表现也正常。

你仿真不是连电路都一起仿真的吗?
zds110
4楼-- · 2019-07-17 19:17
破力达 发表于 2016-1-17 14:40
你仿真不是连电路都一起仿真的吗?

用的Keil uVision4。。。。
柠檬守护
5楼-- · 2019-07-18 00:44
软件仿真是OK的, 那楼主,查一下板子上面按键是不是跟你仿真接的方式一样的, 建议排查一下。
litwyf
6楼-- · 2019-07-18 05:02
找不到问题,就用排除法,一个一个模块分别测试

一周热门 更多>