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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17197|回復: 25
收起左側

51單片機+12864做的簡易波形發生器 含源碼 已制作出實物(DAC0832+UA741運放)

  [復制鏈接]
ID:150346 發表于 2017-4-24 15:05 | 顯示全部樓層 |閱讀模式
最近用51單片機+DAC0832+UA741運放 做了個簡易的波形發生器
LCD12864 顯示 ,可以產生正弦波 三角波 方波 按鍵切換波形 調整頻率和步進值(按鍵可長按)
有24C02掉電儲存設置的數據
頻率不高 10HZ~600HZ(頻率高了有點誤差)
由單片機定時器中斷產生數字信號 DAC0832轉換 運放調幅
能力有限 和大家分享一下~ ~

注意原理圖 DA轉換電路的芯片是DAC0832 畫圖的人寫錯了!!!
實物圖:

實物圖

實物圖


原理圖:

原理圖

原理圖


部分單片機源程序預覽:

  1. /****************************************************************************************************************/
  2. /*                                           簡易波形發生器 程序                                                */
  3. /*                                            編寫者 :FHX                                                      */
  4. /*                                  可輸出 正弦波 三角波 方波  按鍵控制波形、頻率、步進值                       */
  5. /*                            由于是單片機定時器控制頻率   經測試頻率只能在10HZ ~ 700HZ 之間                    */
  6. /*                            有掉電儲存功能 再次上電時 顯示掉電前設置好的波形 頻率 步進值                      */               
  7. /****************************************************************************************************************/

  8. #include "lcd12864.h"
  9. #include "key.h"
  10. #include "24c02.h"
  11. #include "function.h"

  12. uchar T1RH = 0;                                //定時器1重載值高位
  13. uchar T1RL = 0;                                //定時器1重載值低位

  14. uchar T0RH = 0;                                //定時器0重載值高位
  15. uchar T0RL = 0;                                //定時器0重載值低位
  16. uchar mode = 0;

  17. extern uchar Wave_Index;                       //聲明 波形變量

  18. uchar code sin[32]={                                             //此數組內的數據為,DA輸出對應電壓值對應的數字量,0是0V,255是5V
  19.         127, 152, 176, 198, 217, 233, 245, 252,
  20.   255, 252, 245, 233, 217, 198, 176, 152,
  21.   127, 102, 78, 56, 37, 21, 9, 2,
  22.   0, 2, 9, 21, 37, 56, 78, 102

  23. };                                          //正弦波取碼
  24. uchar code juxing[32]={                                                 //一個周期是采樣32個點, 所以數組內是32個數據
  25.         255,255,255,255,255,255,255,255,255,255,
  26.   255,255,255,255,255,255,0,0,0,0,0,0,0,0,
  27.         0,0,0,0,0,0,0,0
  28. };                                          //矩形波取碼

  29. uchar code sanjiao[32]={
  30.         0, 16, 32, 48, 64, 80, 96, 112,
  31.   128, 144, 160, 176, 192, 208, 224, 240,
  32.   255, 240, 224, 208, 192, 176, 160, 144,
  33.   128, 112, 96, 80, 64, 48, 32, 16

  34. };                                                //三角波取碼


  35. /*****************子函數聲明*****************/
  36. void Timer1Init(uint ms);
  37. void SetWaveRate(uint num_2);
  38. void Control_Key();
  39. void Refresh_Out();
  40. /*****************************************************************************/
  41. /*                                 主函數                                    */
  42. /*****************************************************************************/
  43. void main()
  44. {
  45.         Timer1Init(1);                          //初始化定時器1 定時1ms
  46.         LcdInit();                              //初始化12864
  47.         Init_Display();                         //顯示固定內容
  48.         Init_OutPut();                          //初始化輸出數據和顯示

  49.         while(1)
  50.         {
  51.                 Refresh_Out();                        //更新輸出 mode=0:輸出波形 獨立按鍵關閉 mode!=0 :關閉波形輸出 可用獨立按鍵調整
  52.                 Control_Key();                        //控制獨立按鍵 調整模式mode
  53.                 KeyDrive();                      //調整波形、頻率及步進值
  54.         }
  55. }

  56. /*****************************************************************************/
  57. /*                             按鍵控制函數                                  */
  58. /*               按鍵KEY_1 :用延時函數判斷按下 控制模式變換                  */
  59. /*****************************************************************************/
  60. void Control_Key()
  61. {
  62.         if(KEY_1==0)                            //按下按鍵1  mode+1
  63.         {
  64.                 DelayMs(2);
  65.                 if(KEY_1==0)
  66.                 {
  67.                         while(!KEY_1);
  68.                         mode++;                              
  69.                         if(mode > 3)mode = 1;
  70.                 }
  71.         }
  72. }

  73. /*****************************************************************************/
  74. /*                            更新輸出函數                                   */
  75. /*                      根據不同的模式變量 打開或關閉波形輸出                */
  76. /*****************************************************************************/
  77. void Refresh_Out()
  78. {
  79.                         if(mode == 0)                                    //不顯示箭頭   輸出波形 獨立按鍵關閉
  80.                   {
  81.                                 ET1=0;
  82.                           TR1=0;
  83.                           ET0=1;        
  84.               TR0=1;
  85.                     EA=1;
  86.                           Display_Arr(0);
  87.                   }
  88.                
  89.                   else if(mode == 1)                               //箭頭指向 "波形"   說明是在切換波形
  90.                   {
  91.                                 ET1=1;
  92.               TR1=1;
  93.                           ET0=0;        
  94.               TR0=0;
  95.                           EA=1;
  96.                           Display_Arr(1);
  97.                   }
  98.                
  99.                   else if(mode == 2)                               //箭頭指向 "頻率"   說明是在加減頻率
  100.                   {
  101.                                 ET1=1;
  102.                           TR1=1;
  103.                           ET0=0;        
  104.               TR0=0;
  105.                     EA=1;
  106.                           Display_Arr(2);
  107.                   }
  108.                
  109.                   else if(mode == 3)                               //箭頭指向 "步進值" 說明在加減步進值
  110.                   {
  111.                                 ET1=1;
  112.                           TR1=1;
  113.                           ET0=0;        
  114.               TR0=0;
  115.                     EA=1;
  116.                           Display_Arr(3);
  117.                   }
  118. }


  119. /*****************************************************************************/
  120. /*                             按鍵動作函數                                  */
  121. /*          按鍵  KEY_2 ~ KEY_4 三個按鍵由定時器1中斷掃描 有長按功能         */
  122. /*****************************************************************************/
  123. void KeyDown(uchar keycode)
  124. {
  125.         /*********************************/
  126.         /*            "+"鍵              */
  127.         /*********************************/        
  128.         if(keycode == 0x26)                          
  129.         {
  130.                 if(mode == 1)                                    //模式1 向右切換波形
  131.                 {
  132.                         Convert_Wave(1);
  133.                 }
  134.                
  135.                 else if(mode == 2)                               //模式2 增加頻率
  136.                 {
  137.                         Change_Rate(1);
  138.                 }
  139.                
  140.                 else if(mode == 3)                               //模式3 增加步進值
  141.                 {
  142.                         Change_Step(1);
  143.                 }
  144.   }
  145.         /*********************************/
  146.         /*            "-"鍵              */
  147.         /*********************************/
  148.         else if(keycode == 0x28)                           
  149.         {
  150.                 if(mode == 1)                                    //模式1 向左切換波形
  151.                 {
  152.                         Convert_Wave(0);
  153.                 }
  154.                
  155.                 else if(mode == 2)                               //模式2 減小頻率
  156.                 {
  157.                         Change_Rate(0);
  158.                 }
  159.                
  160.                 else if(mode == 3)                               //模式3 減小步進值
  161.                 {
  162.                         Change_Step(0);     
  163.                 }
  164.         }
  165.         /*********************************/
  166.         /*          模式清零鍵           */
  167.         /*********************************/        
  168.         else if(keycode == 0x0D)
  169.         {
  170.                 mode = 0;
  171.         }
  172. }



  173. /**********頻率設置函數****************/
  174. /************定時器0控制***************/
  175. void SetWaveRate(uint num_2)
  176. {
  177.         ulong tmp;                                             
  178.         tmp=(12000000/12)/(num_2*32);                            //定時器計數頻率 是波形頻率的32倍                                                                        
  179.         tmp=65536-tmp;                                           //計算定時器重載值                        
  180.   tmp=tmp+18;                                              //補償
  181.         T0RH=(uchar)(tmp>>8);                                    
  182.         T0RL=(uchar)tmp;
  183.         TMOD&=0xF0;                                          
  184.         TMOD|=0x01;                                          
  185.         TH0=T0RH;                                             
  186.         TL0=T0RL;
  187. }

  188. /**********定時器1初始化函數***********/
  189. /**********用于三個獨立按鍵掃

  190. …………限于本文篇幅 余下代碼請從51hei下載附件…………
復制代碼
0.png

所有制作資料下載:
15.12864簡易波形發生器.rar (86.24 KB, 下載次數: 318)

評分

參與人數 3黑幣 +115 收起 理由
swap1 + 5
練氏 + 10
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:192253 發表于 2017-4-27 10:40 | 顯示全部樓層
請問這個波形取碼是用MATLAB得到的嗎?
回復

使用道具 舉報

ID:150346 發表于 2017-4-27 16:00 | 顯示全部樓層
逞強 發表于 2017-4-27 10:40
請問這個波形取碼是用MATLAB得到的嗎?

對 可以用MATLAB取得
回復

使用道具 舉報

ID:192253 發表于 2017-4-27 22:53 | 顯示全部樓層
fhx97 發表于 2017-4-27 16:00
對 可以用MATLAB取得

我是初學者。。。謝謝的,得到這個波形取碼之后是不是根據液晶對電壓的控制,然后就可以顯示出波形了?
回復

使用道具 舉報

ID:150346 發表于 2017-4-28 13:04 | 顯示全部樓層
逞強 發表于 2017-4-27 22:53
我是初學者。。。謝謝的,得到這個波形取碼之后是不是根據液晶對電壓的控制,然后就可以顯示出波形了?

通過單片機發數字信號 再經過DAC0832和運放UA741 輸出波形 液晶只是顯示作用
回復

使用道具 舉報

ID:196178 發表于 2017-5-3 20:01 | 顯示全部樓層
兄弟真的能用嗎
回復

使用道具 舉報

ID:150346 發表于 2017-5-3 20:21 | 顯示全部樓層

你可以試著做一下
回復

使用道具 舉報

ID:196178 發表于 2017-5-5 10:22 來自手機 | 顯示全部樓層
fhx97 發表于 2017-5-3 20:21
你可以試著做一下

我現在波形能做出來了,可是12864的顯示有點問題
回復

使用道具 舉報

ID:150346 發表于 2017-5-6 08:27 | 顯示全部樓層
微涼深處 發表于 2017-5-5 10:22
我現在波形能做出來了,可是12864的顯示有點問題

先看看硬件電路連接有沒有問題,再檢查一下程序
回復

使用道具 舉報

ID:138990 發表于 2017-5-16 11:49 來自手機 | 顯示全部樓層
剛好用到,真的謝謝啦,我們年級賽題目跟這個相似,我自己先做出來再改吧,謝謝啦!
回復

使用道具 舉報

ID:138990 發表于 2017-5-18 14:28 來自手機 | 顯示全部樓層
微涼深處 發表于 2017-5-3 20:01
兄弟真的能用嗎

你的現在成功了嗎?
回復

使用道具 舉報

ID:203640 發表于 2017-5-25 22:42 | 顯示全部樓層
很好,多謝分享
回復

使用道具 舉報

ID:237672 發表于 2017-10-7 20:21 | 顯示全部樓層
能控制電壓的幅值嗎
回復

使用道具 舉報

ID:165330 發表于 2017-10-8 20:13 | 顯示全部樓層
安逸,,,
回復

使用道具 舉報

ID:134692 發表于 2017-10-8 20:33 | 顯示全部樓層
學習學習,謝謝分享
回復

使用道具 舉報

ID:266345 發表于 2017-12-25 10:03 | 顯示全部樓層
好東西,正好有用
回復

使用道具 舉報

ID:266345 發表于 2017-12-27 19:40 | 顯示全部樓層
你好,有沒有這個的電子原理圖啊
回復

使用道具 舉報

ID:166341 發表于 2017-12-28 15:40 | 顯示全部樓層
多謝分享,有空山寨看看
回復

使用道具 舉報

ID:269211 發表于 2018-1-26 20:55 | 顯示全部樓層
很好,多謝分享#在這里快速回復#
回復

使用道具 舉報

ID:295205 發表于 2018-3-25 12:27 | 顯示全部樓層
元器件的封裝庫沒有啊
回復

使用道具 舉報

ID:351420 發表于 2018-6-18 11:47 | 顯示全部樓層
您好,下載程序后,我不能生成hex文件,您知道是什么原因嗎
回復

使用道具 舉報

ID:445996 發表于 2019-4-22 21:32 | 顯示全部樓層
哪個運放我有點不懂 能給我講解一下嗎
回復

使用道具 舉報

ID:87000 發表于 2019-4-23 12:43 | 顯示全部樓層
做著好玩。有時間做做看
回復

使用道具 舉報

ID:421805 發表于 2019-11-13 06:10 來自手機 | 顯示全部樓層
能改變設計的頻率范圍嗎?
回復

使用道具 舉報

ID:755152 發表于 2020-5-20 19:47 | 顯示全部樓層
你好,請問你這個原理圖上面的LCD12864在Proteus中叫什么呀?你上傳附件里的Proteus在我的電腦里面打不開
回復

使用道具 舉報

ID:770821 發表于 2020-9-6 10:06 | 顯示全部樓層
可以直接拿來用嗎?怎么我波形顯示為亂碼。。。。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久久久久下田 | 一区二区影视 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 久99久视频| 色婷婷综合久久久中字幕精品久久 | 午夜在线观看免费 | 成人精品一区亚洲午夜久久久 | 久久久久久av | 99久久精品国产一区二区三区 | 亚洲最新在线视频 | 91视频网| 免费看黄色视屏 | 国产精品一区二区三区在线播放 | 亚洲一区网站 | 一区二区三区av | 蜜桃av鲁一鲁一鲁一鲁 | 成人av免费在线观看 | 91婷婷韩国欧美一区二区 | 免费视频一区二区 | 国产精品亚洲片在线播放 | 成人午夜免费网站 | 亚洲欧美激情网 | 亚洲在线免费观看 | 波多野结衣一区二区三区在线观看 | 国产精品成人一区 | 91p在线观看 | 一级高清视频 | 亚洲永久| 久久亚洲一区二区三区四区 | 国产大片一区 | 国产成人免费网站 | 欧美在线日韩 | 亚州精品天堂中文字幕 | 国产精品不卡视频 | 欧美一区在线视频 | 国产成人aⅴ | 国产精品综合色区在线观看 | 成人久久久 | 一区在线视频 | 不用播放器看的av | 九九伦理电影 |