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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17265|回復: 25
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
樓主
最近用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下載附件…………
復制代碼


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

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏14 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
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取得

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

使用道具 舉報

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

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

使用道具 舉報

6#
ID:196178 發表于 2017-5-3 20:01 | 只看該作者
兄弟真的能用嗎
回復

使用道具 舉報

7#
ID:150346 發表于 2017-5-3 20:21 | 只看該作者

你可以試著做一下
回復

使用道具 舉報

8#
ID:196178 發表于 2017-5-5 10:22 來自手機 | 只看該作者
fhx97 發表于 2017-5-3 20:21
你可以試著做一下

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

使用道具 舉報

9#
ID:150346 發表于 2017-5-6 08:27 | 只看該作者
微涼深處 發表于 2017-5-5 10:22
我現在波形能做出來了,可是12864的顯示有點問題

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

使用道具 舉報

10#
ID:138990 發表于 2017-5-16 11:49 來自手機 | 只看該作者
剛好用到,真的謝謝啦,我們年級賽題目跟這個相似,我自己先做出來再改吧,謝謝啦!
回復

使用道具 舉報

11#
ID:138990 發表于 2017-5-18 14:28 來自手機 | 只看該作者
微涼深處 發表于 2017-5-3 20:01
兄弟真的能用嗎

你的現在成功了嗎?
回復

使用道具 舉報

12#
ID:203640 發表于 2017-5-25 22:42 | 只看該作者
很好,多謝分享
回復

使用道具 舉報

13#
ID:237672 發表于 2017-10-7 20:21 | 只看該作者
能控制電壓的幅值嗎
回復

使用道具 舉報

14#
ID:165330 發表于 2017-10-8 20:13 | 只看該作者
安逸,,,
回復

使用道具 舉報

15#
ID:134692 發表于 2017-10-8 20:33 | 只看該作者
學習學習,謝謝分享
回復

使用道具 舉報

16#
ID:266345 發表于 2017-12-25 10:03 | 只看該作者
好東西,正好有用
回復

使用道具 舉報

17#
ID:266345 發表于 2017-12-27 19:40 | 只看該作者
你好,有沒有這個的電子原理圖啊
回復

使用道具 舉報

18#
ID:166341 發表于 2017-12-28 15:40 | 只看該作者
多謝分享,有空山寨看看
回復

使用道具 舉報

19#
ID:269211 發表于 2018-1-26 20:55 | 只看該作者
很好,多謝分享#在這里快速回復#
回復

使用道具 舉報

20#
ID:295205 發表于 2018-3-25 12:27 | 只看該作者
元器件的封裝庫沒有啊
回復

使用道具 舉報

21#
ID:351420 發表于 2018-6-18 11:47 | 只看該作者
您好,下載程序后,我不能生成hex文件,您知道是什么原因嗎
回復

使用道具 舉報

22#
ID:445996 發表于 2019-4-22 21:32 | 只看該作者
哪個運放我有點不懂 能給我講解一下嗎
回復

使用道具 舉報

23#
ID:87000 發表于 2019-4-23 12:43 | 只看該作者
做著好玩。有時間做做看
回復

使用道具 舉報

24#
ID:421805 發表于 2019-11-13 06:10 來自手機 | 只看該作者
能改變設計的頻率范圍嗎?
回復

使用道具 舉報

25#
ID:755152 發表于 2020-5-20 19:47 | 只看該作者
你好,請問你這個原理圖上面的LCD12864在Proteus中叫什么呀?你上傳附件里的Proteus在我的電腦里面打不開
回復

使用道具 舉報

26#
ID:770821 發表于 2020-9-6 10:06 | 只看該作者
可以直接拿來用嗎?怎么我波形顯示為亂碼。。。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区性色av | 久久精品中文字幕 | 一级女毛片 | 亚洲视频一区 | 日本欧美在线观看视频 | 日本精品在线观看 | 欧美日韩一区二区三区四区 | 日韩三级 | 黄色在线免费观看视频网站 | 精品国产一区二区三区久久久四川 | 欧美伊人久久久久久久久影院 | 99九九久久 | 久久99蜜桃综合影院免费观看 | 国产999精品久久久久久绿帽 | 久久精品国产免费高清 | 色妞av| 日韩av成人| 天天想天天干 | 日韩在线视频免费观看 | 亚洲一二视频 | 久久国产婷婷国产香蕉 | 国产免费一区二区 | 天天躁日日躁狠狠躁白人 | 亚洲一区二区三区 | 国产精品久久久久久吹潮 | av中文字幕在线 | 免费成人在线网 | 欧美最猛黑人 | 国产精品视频一区二区三区不卡 | 国产精品精品久久久 | 先锋资源站| 免费一区二区 | 久久伊人青青草 | 青青草在线视频免费观看 | 色999视频 | 精品日韩| 超级乱淫av片免费播放 | 久草网在线视频 | 久久久亚洲精品视频 | 91精品一区二区 | 亚洲黄色在线 |