新手51单片机程序求助大神!!!

2019-07-16 04:08发布

代码:
#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit beep = P2^3;    //蜂鸣器
sbit key = P3^4;    //按键

uchar num3 = 0, num4 = 0, num2000 = 0;

void init()    //T0方式1计时初始化
{
    TMOD = 0x01;
    TH0 = (65536 - 65305) / 256;
    TL0 = (65536 - 65305) % 256;
    EA = 1;
    ET0 = 1;
//    TR0 = 1;
}

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

void main()
{
    init();
    while(1)
    {
        if (0 == key)
        {
            delay(10);
            if(0 == key)
            {
                TR0 = 1;    //T0开始计时
            }
            while(!key);    //松手检测
        }

        if (num2000 < 2000)    //头0.5秒
        {
            if (3 == num3)    //700HZ
            {
                num3 = 0;
                beep = ~beep;
            }
        }
        else if (num2000>2000 && num2000<4000)    //后0.5秒
        {
            if (4 == num4)    //500HZ
            {
                num4 = 0;
                beep = ~beep;
            }   
        }
        else if (num2000 > 4000)    //归零,并停止计时
        {
            num2000 = 0;
            TR0 = 0;   
        }
    }
}

void T0_time() interrupt 1
{
    TH0 = (65536 - 65305) / 256;
    TL0 = (65536 - 65305) % 256;
    ++ num3;
    ++ num4;
    ++ num2000;   
}
声音频率实现不出来,求助大神!!!(PS:我用的天翔的51单片机。)

要实现的内容!! 要实现的内容!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
n109
1楼-- · 2019-07-16 06:55
本帖最后由 n109 于 2012-10-30 18:08 编辑

原来是这样
lstcspring
2楼-- · 2019-07-16 09:56
 精彩回答 2  元偷偷看……
960441337
3楼-- · 2019-07-16 11:41
#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit beep = P2^3;    //蜂鸣器
sbit key = P3^4;    //按键

uchar num3 = 0, num4 = 0,num2000 = 0;

void init()    //T0方式1计时初始化
{
    TMOD = 0x01;
    TH0 = (65536 - 65305) / 256;
    TL0 = (65536 - 65305) % 256;
    EA = 1;
    ET0 = 1;
//    TR0 = 1;
}

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

void main()
{
    init();
    while(1)
    {
        if (0 == key)
        {
            delay(10);
            if(0 == key)
            {
                TR0 = 1;    //T0开始计时
            }
            while(!key);    //松手检测
        }

        if (num2000 < 40)    //头0.5秒
        {
            if (2 == num3)    //700HZ
            {
                num3=0;
                                num4=0;
                beep = ~beep;
            }
        }
        else if (num2000>40 && num2000<80)    //后0.5秒
        {
            if (4 == num4)    //500HZ
            {
                num4 = 0;
                       
                beep = ~beep;
            }   
        }
        if (num2000 > 80)    //归零,并停止计时
        {
            num2000 = 0;
                        num3=0;
            TR0 = 0;   
        }
    }
}

void T0_time() interrupt 1
{
    TH0 = (65536 - 65305) / 256;
    TL0 = (65536 - 65305) % 256;
    ++num3;
    ++num4;
    ++num2000;   
}


这个程序可以实现不同频率,你自己对照下,你错在哪里了。
还有就是,num2000的类型限制它不能大于256,你居然还取到4000.要注意这点。希望可以帮到你。
str_drmer
4楼-- · 2019-07-16 14:09
lstcspring 发表于 2012-10-28 21:41
//    TR0 = 1;
你的定时器没有启动,为什么要把这句注释掉呢?

我是key按键按先后TR0 = 1了。

str_drmer
5楼-- · 2019-07-16 17:31
960441337 发表于 2012-10-28 22:19
#include

#define uint unsigned int

我下载下去,还是么有反应、、、

一周热门 更多>