找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 257|回复: 24
收起左侧

请问各位大神我这个单片机电子琴程序实物为何无法实现呢?

   关闭 [复制链接]
王论夜舞111 发表于 2020-11-24 13:13 | 显示全部楼层 |阅读模式
(89C51)通过proteus ISIS已经仿真确诊没有问题16按键矩阵各方面都没毛病。但通过开发板烤制出来连接电路为什么就不能发音呢?
同样是仿真软件烤制,同学的 计算机、测距仪等等通过仿真烤制程序配合各模块都能实现,可我的就是不行,莫非我RP不好?

电子琴设计.zip (76.07 KB, 下载次数: 12)
回复

使用道具 举报

T_Trigger 发表于 2020-11-24 16:10 | 显示全部楼层
既然已经成功的例子了,那就更容易的对比试验找到问题所在了。
有成功的证明程序不会有什么问题!一点一点的排查,可以慢慢确定到底是你的电脑烧写程序设置,还是单片机,还是单片某个模块。。。
回复

使用道具 举报

适得府君书 发表于 2020-11-24 17:53 | 显示全部楼层
理论与实践还是存在着一定的距离。仿真软件里面的电子元件都是工作在理想状态。而实物就是实物。仿真没问题那你就看看连接,电源方面有没有问题。
回复

使用道具 举报

器车人 发表于 2020-11-24 18:39 | 显示全部楼层
电路图有吗,有就发出来看看
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-24 22:45 | 显示全部楼层
T_Trigger 发表于 2020-11-24 16:10
既然已经成功的例子了,那就更容易的对比试验找到问题所在了。
有成功的证明程序不会有什么问题!一点一点 ...

我用的就是开发板烧的,然后定义十六种不同频率的声音,我也不知道仿真为什么就可以做到十六个声音信号(我也觉得新奇)
但实际开发板上操作矩阵按键就只有四个按键可以按同频沙哑的声音
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-24 22:47 | 显示全部楼层
适得府君书 发表于 2020-11-24 17:53
理论与实践还是存在着一定的距离。仿真软件里面的电子元件都是工作在理想状态。而实物就是实物。仿真没问题 ...

就是正常的可以考烤程序开发板,理论来说没问题
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-24 22:48 | 显示全部楼层
器车人 发表于 2020-11-24 18:39
电路图有吗,有就发出来看看

51hei截图20201124224754.png


回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-24 22:50 | 显示全部楼层
程序/图如下,希望懂哥帮我看看
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-24 22:54 | 显示全部楼层
51hei截图20201124225313.png
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-24 23:06 | 显示全部楼层
51hei截图20201124225313.png 51hei截图20201124224754.png 51hei截图20201124225110.png
回复

使用道具 举报

权威人物 发表于 2020-11-25 09:16 | 显示全部楼层
蜂鸣器用上拉驱动试试,有条件的可以检测下驱动口的信号频率是否正确
回复

使用道具 举报

TTQ001 发表于 2020-11-25 09:59 | 显示全部楼层
模拟并不总是适用于实际电路。
回复

使用道具 举报

13487086265 发表于 2020-11-25 20:01 | 显示全部楼层
你看看那个矩阵接线对吗
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-25 22:57 | 显示全部楼层
13487086265 发表于 2020-11-25 20:01
你看看那个矩阵接线对吗

仿真的时候没问题,我就是在开发板上直接将hex烤进单片机实物然后就不行了
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-25 22:58 | 显示全部楼层
权威人物 发表于 2020-11-25 09:16
蜂鸣器用上拉驱动试试,有条件的可以检测下驱动口的信号频率是否正确

我用的各种模块来做的
蜂鸣器,矩阵,单片机
就这仨模块接上来做,感觉还是有点小问题
回复

使用道具 举报

glinfei 发表于 2020-11-25 23:26 | 显示全部楼层
看程序,我算了一下,晶振应该是12M的,你的是不是太低了?另外,你这个音频是方波,谐波太多了,应该滤波,否则声音会非常嘈杂,听起来就怪怪的;最后,你用什么放音的,别是嗡鸣器吧?反正,好多无源的播音有频率限制,eg:2KHz以上,它就放不出你这么低的频率。
回复

使用道具 举报

你你摸摸你的 发表于 2020-11-26 05:01 | 显示全部楼层
你的频率不对,#include <reg51.h>

#define uint unsigned int

#define uchar unsigned char

#define output P1

#define input P1

//方便移植在其他电路板上,我的电路使用P1口做键盘输入接口

//定义16个按键

enum KEY{key0,key1,key2,key3,key4,key5,key6,key7,key8,key9,key10,key11,key12,key13,key14,key15};

uchar code table[]={                                  //数组定义,显示数码管

            0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

            0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

unsigned int code Freqtab[] = {         //定时半周期的初始值

     64021,64103,64260,64400,      //低音3 4 5 6

     64524,64580,64684,64777,      //低音7,中音1 2 3

     64820,64898,64968,65030,      //中音4 5 6 7

     65058,65110,65157,65178};     //高音1 2 3 4

uint FreqTemp;

//蜂鸣器声音不怎么样,我们使用扬声器,接P3.7口

sbit SPEAK = P3^7;

void delay1ms(uint n)   //误差 0us ,延时n毫秒

{

    uint a,b,c;

        for(c=n;c>0;c--)

            for(b=199;b>0;b--)

                for(a=1;a>0;a--);

}



uint key_input(void)

{

        uchar temp1,temp2;                        //临时保存读取的行或者列

        uchar num = 16;                                   //返回按键的值

        output = 0x0f;               

           temp1 = input;                                //先读取行

        if(0x0f != temp1)                   //按键按下

        {                                          

                delay1ms(5);                        //延时,消除抖动

                temp1 = input;                        //再次读取行

                if(0x0f != temp1)                //说明按键确实按下       

                {

                        temp1 = temp1 & 0x0f;        //保留低4位

                        output = 0xf0;                        //准备读取列

                        delay1ms(1);                        //延时一下,防止下一句读不到

                        temp2 = input;                        //直接读取列

                        temp2 = temp2 & 0xf0;        //保留高4位

                        temp1 = temp1 | temp2;        //将temp1和temp2的值合并

                }

        }

        switch(temp1)

        {

                case 0xee:num=0;break;  

        case 0xde:num=1;break;  

        case 0xbe:num=2;break;   

        case 0x7e:num=3;break;

                case 0xed:num=4;break;               

        case 0xdd:num=5;break;           

        case 0xbd:num=6;break;            

        case 0x7d:num=7;break;   

                case 0xeb:num=8;break;   

        case 0xdb:num=9;break;   

        case 0xbb:num=10;break;   

        case 0x7b:num=11;break;   

                case 0xe7:num=12;break;   

        case 0xd7:num=13;break;   

        case 0xb7:num=14;break;   

        case 0x77:num=15;break;      

                default:break;

        }

        return num;

}

void T0_INT(void) interrupt 1

{

     TL0 = FreqTemp;                //载入定时半周期的初始值

     TH0 = FreqTemp >> 8;

     SPEAK = ~SPEAK;                    //发音

}

int main()

{

        TMOD = 0X01;                //定时器T0设置为方式1

        EA = 1;

        ET0 = 1;

        TR0 = 0;

        while(1)

        {

                uint num,temp;

                num = key_input();

                temp = num;

                P0 = table[num];

                if(16 != num)

                {

                        FreqTemp = Freqtab[num];

                        TR0 = 1;

                        while(0xf0 != output);                //检测按键松开

                        TR0 = 0;

                        SPEAK = 1;       

                }               

        }

        return 0;

}
回复

使用道具 举报

莎娃迪卡 发表于 2020-11-26 08:40 来自手机 | 显示全部楼层
多次实践
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-26 21:23 | 显示全部楼层
glinfei 发表于 2020-11-25 23:26
看程序,我算了一下,晶振应该是12M的,你的是不是太低了?另外,你这个音频是方波,谐波太多了,应该滤波 ...

就是蜂鸣器,但按理说没超过2Khz 这个杂音就一直很烦
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-26 21:27 | 显示全部楼层
glinfei 发表于 2020-11-25 23:26
看程序,我算了一下,晶振应该是12M的,你的是不是太低了?另外,你这个音频是方波,谐波太多了,应该滤波 ...

难道蜂鸣器模块不行吗?
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-26 21:28 | 显示全部楼层
你你摸摸你的 发表于 2020-11-26 05:01
你的频率不对,#include  

#define uint unsigned int

谢谢,我参考试试
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-26 23:06 | 显示全部楼层
各位hxdm,我发现问题了。
好像我开发板的上的1.3脚 因矩阵脚和蜂鸣器脚雷同有冲突,貌似这样就会有干扰对吗???
回复

使用道具 举报

wulin 发表于 2020-11-27 07:59 | 显示全部楼层
王论夜舞111 发表于 2020-11-26 23:06
各位hxdm,我发现问题了。
好像我开发板的上的1.3脚 因矩阵脚和蜂鸣器脚雷同有冲突,貌似这样就会有干扰对 ...

如果开发板上矩阵键盘有端口与蜂鸣器共用那只能把程序改成3*4矩阵键盘,另外开发板上多为有源蜂鸣器,发声频率固定,不适合播放音乐。
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-27 18:51 | 显示全部楼层
wulin 发表于 2020-11-27 07:59
如果开发板上矩阵键盘有端口与蜂鸣器共用那只能把程序改成3*4矩阵键盘,另外开发板上多为有源蜂鸣器,发 ...

我测试了一下,好想是的,发出来基本顶多就几个音调,一点都不抑扬顿挫
回复

使用道具 举报

 楼主| 王论夜舞111 发表于 2020-11-28 20:59 | 显示全部楼层
此贴终结,谢谢各位hxd
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表