51单片机运用C语言编程,对正弦波的编程的方式使用的是查表发,那 为什么输出频率变化这些表仍能够使用呢?

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,0x78,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(P1_0==0&&P1_1==0) //正弦
{
s1++;
ss1=tosin[s1];
P0=ss1;
tp=0;
}

第1个回答  2012-06-21
我来告诉你吧。如果你查表执行的速度快,那么这个正弦波(基波)的频率就高;如果你查表的速度慢,那么这个基波的频率就低。查表速度一般通过定时器来控制,需要比较的稳定才行。追问

那表内的内容的编排是否有一定的规律可循?
是否是利用了人眼的视觉暂留?本身表内的都是一些点,如果速度极慢,看到的是不连贯的,但是速度较快看到的是连贯的……是这个意思吗?

本回答被网友采纳
第2个回答  2012-06-21
查表直接把值送给了P0口了,P0口接的DA转换器吗?(如果是AT89S51注意接上拉电阻)
如果是DA,你这里直接把数值送给了P0口,DA转换的速度跟的上吗,建议DELAY一下!
第3个回答  2012-06-21
神马东东
第4个回答  2012-06-21
我来学习一下

如何用51单片机控制DAC0832产生不同频率正弦波,键盘改变频率,求具体的...
假设你把一个正弦波的一周期分成180个点,那么每个点相差是2度,那么每个点是有一个对应的SIN值的,比如SIN0 SIN2 SIN4等。假设1ms发送一个点(即单片机向DA写一个该SIN值所对应的电压大小), 那么写完一个正弦波,要180ms。如果2ms写一个点,这就改变了正弦波的频率了。一周期所分的点越...

怎样提高 用51单片机做的正弦波的 频率?
第一,可以使用1T单片机使得速度更快 第二,程序上可以减少输出的采样值精度,比如8位da,应存在255个值,我们可以删减掉一些点,保留关键点,比如波风波谷,使得存正弦信号的数组数据变小,精度降低,在DA输出端接电容接地,使信号在电容冲放电作用下又回归正弦的波形。第三,第二个解决方案是灵活的,...

单片机或者 FPGA能不能通过设计程序 输出正弦波 锯齿波以及其他波形...
用DDS方法去产生你需要的任意波形,比如AD9850,单片机控制其产生正弦波或者锯齿波,频率可以任意调整。一个DDS芯片AD9850,一片单片机AT89S52,全搞定,比你用FPGA简单多了吧?

51 单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程 ...
\/\/输出电压从0到最小值(正弦波1\/4部分)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 ,...

单片机编程DA输出正弦波为什么上半为平的???求大神指导
第一个可能是你D\/A芯片的基准电压Vref超过了电源电压VDD.第二个可能是你D\/A芯片坏了.还有你的数组里那么多连续的 0xff ,表示这一段时间输出都是最高的,而且电压值是相等的,输出这样的波形也很有可能,你看看电压到了几伏。还有可能是你哪里限制了输出幅度(硬件上)....

请问如何用51单片机生成频率可调的方波?请给出方案或者修改我的方案...
P0 口,应该加上上拉电阻。AD 转换的结果,应该是:0~255。使用真实的硬件,结果是多少?可以在 P2 口,接上八个 LED,当场显示出来看看。另外,对于这一批数据,你所期望得到的频率范围,究竟是多少?还有,采用软件定时,并不准确。

用89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角...
利用单片机的晶振控制输出周期的速度,也就是控制了输出的波形的频率。这样就控制了输出的波形及其幅值和频率。 四、 软件设计 主程序和子程序都存放在AT89S51单片机中。 主程序的功能是:开机以后负责查键,即做键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理,主程序框图如图1所示。 子程序的功能...

新概念51单片机C语言教程的作品目录
4.2十六进制1.5二进制的逻辑运算1.5.1与1.5.2或1.5.3非1.5.4同或1.5.5异或1.6单片机的C51基础知识介绍1.6.1利用C语言开发单片机的优点1.6.2C51中的基本数据类型1.6.3C51数据类型扩充定义1.6.4C51中常用的头文件1.6.5C51中的运算符1.6.6C51中的基础语句1.6.7学习单片机应该...

低频信号发生器的设计
然后在rQ—UD(频率更新时钟)上升沿到来时将这40位数据从输入寄存器装入到频率\/相位寄存器,这时DDS输出频率和相位更新一次,同时把地址指针复位到第一个输入寄存器以等待下一次的频率\/相位控制字输入。 6 硬件设计 要产生两路相位正交、频率可由外部控制的正弦信号,必须通过单片机编程来完成外部输入的频率数据(3个字节)...

STC单片机PWM编程!
3. 了解Keil软件中逻辑分析仪的使用方法。4. 了解用单片机产生正弦信号的基本方法。二、实验原理 ADuC848中包含一个12位电压输出DAC模块,DAC模块中寄存器的设置如下:DAC控制寄存器:DACCON NC表示未定义;DACPIN为DAC输出引脚选择;1 = 设置DAC输出引脚为Pin 13 (AINCOM);0 = 设置DAC输出引脚...

相似回答