找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7601|回复: 3
打印 上一主题 下一主题
收起左侧

求51单片机做正弦波发生器(100HZ-1KHZ)

[复制链接]
跳转到指定楼层
楼主
ID:10866 发表于 2009-4-8 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
那位大侠给说说
51单片机做正弦波发生器(100HZ-1KHZ)的基本原理
和流程啊!!
初学单片机没有头绪啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:8179 发表于 2009-4-9 21:52 | 只看该作者
查表
回复

使用道具 举报

板凳
ID:11650 发表于 2009-4-23 10:42 | 只看该作者

用正弦值做一个表,看你的精度要求了,输出用DA转换器

回复

使用道具 举报

地板
ID:51300 发表于 2013-6-26 20:25 | 只看该作者
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit dawr=P3^6;
sbit dacs=P3^2;

uchar val,i,temp,t;
unsigned int  code  sin[] =        //正弦波输出表
{
     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,0xDF,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,0x7E
};
void delayms(uint xms)
{

  uint i,j;
  for(i=xms;i>0;i--)
         for(j=110;j>0;j--);
}
void main()
{
  
  dula=0;
  wela=0;
  dacs=0;
  dawr=0;
          P0=0;
        P1=0xFF;
        while(1)
        {
          
                 {
                 
                  
                   val=sin[i];
                         i++;
                         val=sin[i];
                   P0=val;
                   temp=P1;
               
                 
                 if(sin[i]>=0x80)
                  {
                           P1=~P1;
                     t++;
                   temp=P1;
                        if(t==128)
                            t=0;
                           delayms(10);
                 }
                 else
                   P1=0xFF;


                   if(i==256)
                   {
                            i=0;
               
                         delayms(100);
                       
                  
                   }
                 
                   delayms(50);
                 
                 
                 
                 }
       
       
       
       
       
       
        }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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