搜索
bottom↓
回复: 8

51做正弦波输出,怎么是会出现这个效果!!

[复制链接]

出0入0汤圆

发表于 2012-5-31 20:28:49 | 显示全部楼层 |阅读模式



仿真没什么问题,就是上实物出现这样的问题。。。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long


sbit key1=P3^2;
sbit key2=P3^3;


unsigned char rate=50;
volatile uchar n=0;
unsigned char ucHigh = 0;
unsigned char ucLow = 0;

uchar code tosin[256]={
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,
0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,
0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,
0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,
0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,
0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,
0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,
0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,
0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,
0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,
0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,
0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,
0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,
0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,
0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,
0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,
0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,
0x76,0x79,0x7c,0x80 };/*正弦波码 */

#if 1
void Delay(uint t)
{
        uint j;
        for(;t>0;t--)
        for(j=100;j>0;j--);
}
#endif

/*******************************************************************************
函数:KeyScan()
功能:键盘扫描
返回:扫描码
*******************************************************************************/
#if 1
unsigned char KeyScan(void)
{
        unsigned char k = '\0';

        if ( !key1 ) k = '1';
        if ( !key2 ) k = '2';

        return k;
}
#endif

void main()
{

        TMOD=0x10;
        rate = 1;       
        ET1=1;
        TR1=1;       
        EA=1;

        ucHigh = (-3922/rate)/256;
        ucLow = (-3922/rate)%256;

        while(1)
        {       
                unsigned char k;
                for (;;)
                {
                        Delay(1);
                        k = KeyScan();
                        if ( k != '\0' )
                        {
                                switch(k)
                                {
                                        case '1':
                                                if (rate <= 50)
                                                {
                                                        rate += 1;
                                                }
                                                break;
                                        case '2':
                                                if (rate > 6)
                                                {
                                                        rate -= 1;
                                                }
                                                break;
                                }
                                break;
                        }
                }
                ucHigh = (-3922/rate)/256;
                ucLow = (-3922/rate)%256;
                for (;;)  //松手检测
                {
                        Delay(1);
                        if ( KeyScan() == '\0' ) break;
                }
        }
}
void t1(void) interrupt 3   using 2                //T1工作在定时状态下,
{            
        TR1=0;
        TH1=ucHigh;       
        TL1=ucLow;
        P0 = tosin[n++];         //0.2V˙秈
        TR1=1;   
}                  



实现功能就是 按键调频。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-5-31 20:29:44 | 显示全部楼层
示波器耦合方式选择错误

出0入0汤圆

 楼主| 发表于 2012-5-31 20:32:00 | 显示全部楼层
i55x 发表于 2012-5-31 20:29
示波器耦合方式选择错误

我当时 用函数信号发生器 接了,那个输出的正弦波也没问题呀

出0入0汤圆

发表于 2012-5-31 20:40:05 | 显示全部楼层
你先把耦合方式改对了再谈软件bug的问题。
现在是耦合方式选择错误导致示波器波形不能正确反应你的软件错误。

出0入0汤圆

发表于 2012-5-31 20:43:49 | 显示全部楼层
你正弦波表是带直流的原码,看看你的DA是原码还是补码的;

出0入0汤圆

 楼主| 发表于 2012-5-31 21:21:54 | 显示全部楼层
好吧 只有明天再看看了。。现在示波器不在这边

出0入0汤圆

发表于 2012-7-8 20:48:21 | 显示全部楼层
我现在也在做这个,敢问楼主你的正弦波码是怎么生成的

出0入0汤圆

发表于 2012-7-27 23:44:05 | 显示全部楼层
正弦波码可以用vc生成

出0入0汤圆

发表于 2012-8-12 00:40:10 | 显示全部楼层
不懂的我路过了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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