久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1790|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)大家?guī)兔纯搓P(guān)于波形發(fā)生器的單片機(jī)代碼,有一些小問題需要大家?guī)兔獯?/span>

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 50 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:941176 發(fā)表于 2022-5-6 21:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "reg51.H"
#include "ad9834.h"
#include "LCD1602.h"
#include "keyScan.h"        

#define  MAX_VOLT   47   //為啥47代表4.7V

//sbit LED = P0^0;
//sbit key1 = P1^2;
//sbit key2 = P1^3;
//sbit key3 = P1^4;        
//sbit key4 = P1^5;
//sbit key5 = P1^6;
//sbit FSK = P3^6;

/*
*********************************************************************************************************
*        函 數(shù) 名: DelayMs                        ‘i
*        功能說明: 時(shí)鐘延時(shí)
*        形    參: ms 以毫秒為單位.
*        返 回 值: 無
*********************************************************************************************************
*/
void DelayMs( unsigned int ms)
{
        unsigned int i,j;
        for (i = 0; i < ms; i++)
                for(j=0;j<1000;j++);        //單片機(jī)晶振12MHZ,j是隨便取嗎
}


void main()
{
        unsigned long FreqData=20000;
  unsigned int volt=MAX_VOLT;
                unsigned int ratio;
        unsigned char AmpData=255;        //不懂這兩行,255是啥
        unsigned char WaveModle=0;
        unsigned char  keyNum = 16;
        unsigned char SetFreq_flag=0;//設(shè)置頻率的標(biāo)志

        ratio=2550/MAX_VOLT;// 5.7= 255/47; ratio放大10倍了取整數(shù), 44最高輸出4.7V

   InitLCD();
   DelayMs( 100);
   DispStrAt("AD9834", 0, 0);
         DispStrAt("sinWave", 8, 0);
          DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);        //0,1,7的0是啥

    AD9834_WaveSeting(FreqData,0,SIN_WAVE,0 );//2KHz,        頻率寄存器0,正弦波輸出 ,初相位0
    AD9834_AmpSet(AmpData);        //設(shè)置幅值,幅值最大 255        

           DispStrAt("am   V", 10, 1);
                 DispDecShiftAt(volt, 12, 1, 1);

        while(1)
        {

          keyNum = keyScan();
    if(keyNum!=16)
                {

                        if(SetFreq_flag==0) //不是鍵盤輸入設(shè)置頻率狀態(tài), 步進(jìn)設(shè)置狀態(tài)
                        {
                                                if(keyNum==10 && SetFreq_flag==0)
                                                {
                                                        SetFreq_flag=1;
                                                        FreqData=0;
                                                        DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("  ", 7, 1);
                                                        //AD9833_WaveSeting(FreqData,0,SIN_WAVE,0 );                                       
                                                }                        
                                        if(keyNum==12)
                                        {
                                                FreqData=FreqData+1000;
                                                AD9834_WaveSeting(FreqData,0,WaveModle,0 );
                                                DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);
                                                //while(key1==0);
                                        }
                                 else if(keyNum==13)
                                        {
                                                if(FreqData>=1000)
                                                FreqData=FreqData-1000;
                                                AD9834_WaveSeting(FreqData,0,WaveModle,0 );
                                                DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);
                                                //while(key2==0);
                                        }        
                                 else if(keyNum==14)
                                        {  
                                                if(volt<MAX_VOLT)
                                                volt=volt+1;                        
                                                AmpData=volt*ratio/10;
                                                AD9834_AmpSet(AmpData);        
                                                //DispDecSpaceAt(AmpData, 13, 1, 3);
                                                DispDecShiftAt(volt, 12, 1, 1);                                

                                                //while(key3==0);
                                        }                        
                                 else if(keyNum==15)
                                        {  
                                                        if(volt>0)
                                                        volt=volt-1;                        
                                                        AmpData=volt*ratio/10;
                                                        AD9834_AmpSet(AmpData);        
                                                        //DispDecSpaceAt(AmpData, 13, 1, 3);
                                                        DispDecShiftAt(volt, 12, 1, 1);
                                                        //while(key4==0);
                                        }        

                                 else if(keyNum==11)
                                        {  
                                         WaveModle=WaveModle+1;
                                         if(WaveModle==3)WaveModle=0;
                                         if(WaveModle==0){AD9834_WaveSeting(FreqData,0,SIN_WAVE,0 );DispStrAt("sinWave", 8, 0);}
                                         else if(WaveModle==1){AD9834_WaveSeting(FreqData,0,TRI_WAVE,0 );DispStrAt("TriWave", 8, 0);}
                                         else if(WaveModle==2){AD9834_WaveSeting(FreqData,0,SQU_WAVE,0 );DispStrAt("SquWave", 8, 0);}               
                                         //else if(WaveModle==3){AD9834_SetFSK(1000,5000);DispStrAt("FSKWave", 8, 0);}                 
                                         //else if(WaveModle==4){AD9834_SetPSK(0,180,5000);DispStrAt("PSKWave", 8, 0);}                 
                                                //while(key5==0);
                                        }
                                }
                                 else if(SetFreq_flag==1) //是矩陣鍵盤輸入設(shè)置頻率狀態(tài)
                                         {
                                                if(keyNum<10)//輸入頻率
                                                {                                                        
                                                        FreqData=FreqData*10+keyNum;
                                                        DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("  ", 7, 1);               
                                                }
                                                else if(keyNum==15)//輸錯(cuò)倒退
                                                {
                                                        FreqData=FreqData/10;
                                                        DispDecSpaceAt(FreqData, 0, 1,7);                                                                                                
                                                }
                                                else if(keyNum==10)//HZ確定輸出
                                                {
                                                        DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);   
                                                        AD9834_WaveSeting(FreqData,0,WaveModle,0 );
                                                        SetFreq_flag=0;
                                                }                                                
                                                else if(keyNum==11)////KHZ確定輸出
                                                {
                                                        DispDecSpaceAt(FreqData, 0, 1, 6);DispStrAt("KHZ", 6, 1);   
                                                        FreqData=FreqData*1000;
                                                        AD9834_WaveSeting(FreqData,0,WaveModle,0 );
                                                        SetFreq_flag=0;

                                                }        
                                                else if(keyNum==12)////MHZ確定輸出
                                                {
                                                        DispDecSpaceAt(FreqData, 0, 1, 6);DispStrAt("MHZ", 6, 1);   
                                                        FreqData=FreqData*1000000;
                                                        AD9834_WaveSeting(FreqData,0,WaveModle,0 );
                                                        SetFreq_flag=0;

                                                }                                                               

                                         }                                       


                        }
        }

}
以上是主程序,問題放在了程序中,還請(qǐng)大家?guī)兔纯?br />
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:973695 發(fā)表于 2022-5-15 10:45 | 只看該作者
for(j=0;j<1000;j++);        //單片機(jī)晶振12MHZ,j是隨便取嗎
j 得根據(jù)晶振頻率來計(jì)算

AD9834_AmpSet(AmpData);        //設(shè)置幅值,幅值最大 255   

DispDecSpaceAt(FreqData, 0, 1, 7);DispStrAt("HZ", 7, 1);        //0,1,7的0是啥

具體看DispDecSpaceAt函數(shù)的定義
回復(fù)

使用道具 舉報(bào)

板凳
ID:881498 發(fā)表于 2023-6-6 10:18 | 只看該作者
你好,請(qǐng)問你有這段代碼里面LCD1602的顯示程序嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:205485 發(fā)表于 2023-6-6 20:34 | 只看該作者
我以前用過AD9833的程序,不是我寫的,只是用過。你這個(gè)是AD9834,總體框架是差不多的
void main()
{
        unsigned long FreqData=20000;
  unsigned int volt=MAX_VOLT;
                unsigned int ratio;
        unsigned char AmpData=255;        //不懂這兩行,255是啥
        unsigned char WaveModle=0;

第一行的20000是開機(jī)的初始頻率;
255應(yīng)該是設(shè)置振幅;值在1-255之間,255是最高值;
WaveModle, 0,1,2 分別代表正弦,方波,三角波(大概是這個(gè)順序,記不清了,可自己驗(yàn)證)。
回復(fù)

使用道具 舉報(bào)

5#
ID:1080331 發(fā)表于 2023-6-6 22:08 | 只看該作者
代碼本身沒有語法錯(cuò)誤,但是由于缺少上下文和注釋,無法確認(rèn)代碼的具體錯(cuò)誤和目的。

在代碼中有一些變量名、注釋和字符串描述可能需要進(jìn)一步修改,以便于更好地理解代碼。同時(shí),還需要注意以下問題:

延時(shí)函數(shù)DelayMs中的循環(huán)次數(shù)是否合適,是否能夠?qū)崿F(xiàn)所需延時(shí)。
MAX_VOLT值為47,在ratio計(jì)算中放大了10倍取整數(shù),44最高輸出4.7V,這里的數(shù)值計(jì)算可能存在精度問題。
在設(shè)置頻率狀態(tài)下,輸入KHz或MHz確定頻率輸出時(shí)應(yīng)將FreqData乘以對(duì)應(yīng)的系數(shù),否則會(huì)導(dǎo)致頻率輸出不正確。
根據(jù)代碼中的注釋,代碼使用一個(gè)AD9834芯片生成正弦波、三角波和方波等信號(hào)輸出,可以通過鍵盤輸入調(diào)整輸出頻率和幅值。同時(shí),還支持FSK和PSK調(diào)制方式的輸出。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 97国产成人 | 精品欧美一区二区三区久久久 | 亚洲一区亚洲二区 | 久久一区二区视频 | 中文av在线播放 | 女女爱爱视频 | 中文字幕免费观看 | 我爱操| 久久久99国产精品免费 | 国产男女精品 | 久在线视频播放免费视频 | 激情伊人网 | 欧美夜夜 | 91在线视频免费观看 | 午夜影院| 欧美日韩三区 | 亚洲一区二区三区在线视频 | 亚洲成人午夜在线 | 亚洲激情一区二区三区 | 91中文视频 | 美女天堂 | 国产偷录视频叫床高潮对白 | 国产精品高潮呻吟久久av野狼 | 久久久国产精品 | 精品国产一区二区三区免费 | 欧美精品在线观看 | 日韩在线免费电影 | 天天操综合网 | 亚洲久在线 | 久久久爽爽爽美女图片 | 精品中文在线 | 中文字幕日韩欧美一区二区三区 | 一区二区伦理电影 | 99久久99 | 欧美一区二区综合 | 欧美一级在线观看 | 亚洲视频在线看 | www.久久精品视频 | 欧美视频在线播放 | 亚洲激情在线 | 国产精品久久久久久久久久久久 |