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

標題: 單片機可調周期參數波形發生器源程序(dac0832、矩陣鍵盤、lcd12864、Proteus仿真) [打印本頁]

作者: wzh1787684166    時間: 2021-4-21 20:20
標題: 單片機可調周期參數波形發生器源程序(dac0832、矩陣鍵盤、lcd12864、Proteus仿真)
單片機設計—波形發生器,波形可選擇、幅值周期可編輯、含有lcd0832顯示屏、led數碼管、矩陣鍵盤輸入。通過lcd12864顯示屏顯示當前狀態,根據提示通過矩陣鍵盤輸入波形類型、波形幅值周期等參數,通過led顯示屏顯示實時電壓,通過dac0832輸出波形。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


1.    輸出矩形波、梯形波、三角波、鋸齒波、正弦波五種波形;
2.    每種波形的周期可更改;
3.    每種波形的幅值可更改;
4.    采用lcd12864中文顯示屏顯示波形輸入輸出信息;
5.    采用數碼管顯示實時電壓。

單片機源程序如下:
  1. /**************************************************************************************
  2. * 設計一個能產生正弦、方波、三角波、梯形波等波形的波形發生器,周期頻率可調。
  3. * 其他附加功能:
  4. *
  5. 總得看一下有沒有重復定義的io口

  6. ***************************************************************************************/

  7. #include "reg52.h"    //此文件中定義了單片機的一些特殊功能寄存器
  8. #include "DAC0832.h"
  9. #include "lcd12864.h"
  10. #include "key.h"


  11. sbit test_led=P3^0;
  12. sbit test_led1=P3^1;

  13. sbit seg_k1=P3^3;
  14. sbit seg_k2=P3^4;

  15. int boxing=0;
  16. int zhouqi=0;
  17. float fuzhi=0;


  18. char code Hz_0[]=
  19. {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
  20. 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,};
  21. char code Hz_1[]=
  22. {0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,
  23. 0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,};
  24. char code Hz_2[]=
  25. {0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,
  26. 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
  27. };
  28. char code Hz_3[]=
  29. {0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,
  30. 0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,
  31. };
  32. char code Hz_4[]=
  33. {0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,
  34. 0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,
  35. };
  36. char code Hz_5[]=
  37. {0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,
  38. 0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,
  39. };
  40. char code Hz_6[]=
  41. {0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,
  42. 0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,
  43. };
  44. char code Hz_7[]=
  45. {0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,
  46. 0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,
  47. };
  48. char code Hz_8[]=
  49. {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
  50. 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
  51. };
  52. char code Hz_9[]=
  53. {0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,
  54. 0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,
  55. };
  56. char code Hz_dian[]=
  57. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  58. 0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
  59. };

  60. extern u8 KeyValue;

  61. int flag=1;//推出while
  62. unsigned int key_time;//判斷輸入了幾個數

  63. unsigned int time_count=0;//幅值換算
  64. unsigned int time_loop=0;  //周期換算
  65. unsigned int time_count_h=0;  //周期換算H
  66. unsigned int time_count_l=0;  //周期換算L

  67. void main_delay(int x)
  68. {while(x--);}

  69. void Int0Init()
  70. {
  71. //設置 INT0
  72. IT0=1;//跳變沿出發方式(下降沿)
  73. EX0=1;//打開 INT0 的中斷允許。
  74. EA=1;//打開總中斷
  75. }

  76. /*******************************************************************************
  77. * 函 數 名       : main
  78. * 函數功能                 : 主函數
  79. * 輸    入       : 無
  80. * 輸    出             : 無
  81. *******************************************************************************/
  82. void main()
  83. {
  84.         Int0Init();
  85.         output_xinxi();//顯示姓名信息
  86.         
  87.         while(flag);
  88.         test_led=1;
  89.         test_led1=1;
  90.         while(1)
  91.         {
  92.                 flag=1;
  93.                 switch (boxing)
  94.                         {case (0): //矩形波
  95.                                                                 time_loop=zhouqi*100/65;
  96.                                                                 time_count_l=(int)(fuzhi*10)%10;
  97.                                                                 time_count_h=fuzhi;
  98.                                                                 time_count=(51*time_count_h+5*time_count_l);                                                               
  99.                                                                 while (flag)
  100.                                                                          {P2=Rectangular_wave(time_loop,time_count_h,time_count_l,time_count);}
  101.                                                                  break;//
  102.                          case (1):time_count=fuzhi*52;    //幅值換算結果   //鋸齒波
  103.                                                                          time_loop=(zhouqi*1000/time_count-195)/20;
  104.                                                                          while(flag)
  105.                                                                          {P2=Sawtooth_wave(time_loop,time_count);}   
  106.                                                                          break;
  107.                                                                         
  108.                          case (2):time_count=zhouqi*10/30;
  109.                                                                          test_led=0;
  110.                                                                          while(flag)
  111.                                                                          {P2=Sine_wave(time_count,fuzhi);}
  112.                                                                                 break;
  113.                         case (3):time_count=fuzhi*52;    //幅值換算結果   //三角波
  114.                                                                          time_loop=(zhouqi*1000/time_count-195)/20;
  115.                                                                          while(flag)
  116.                                                                          {P2=Triangle_wave(time_loop,time_count);}   
  117.                                                                          break;                                         
  118.                         case (4):time_count=fuzhi*104;    //幅值換算結果   //梯形波
  119.                                                                          time_loop=(zhouqi*1000/time_count-195)/20;
  120.                                                                          while(flag)
  121.                                                                          {P2=Trapezoidal_wave(time_loop,time_count);}   
  122.                                                                          break;                                                
  123.                   }
  124.                 }
  125. }

  126. void Int0() interrupt 0 //外部中斷 0 的中斷函數
  127. {        
  128.         main_delay(1000); //延時消抖
  129.         Clr_Scr();
  130.         seg_k1=1;
  131.         seg_k2=1;
  132.         boxing=0;
  133.         zhouqi=0;
  134.         fuzhi=0;
  135.         main_delay(1000);
  136.         KeyValue=0;
  137.         
  138.         output_shuru();
  139.         main_delay(100000);
  140.                
  141.         //檢測波形        
  142.         while((KeyValue!=11))
  143.                                 {KeyDown();}                        
  144.         output_boxing();
  145.         main_delay(100000);
  146.         KeyValue=0;                                 
  147.         key_time=0;                        
  148.         while((KeyValue!=11))                 
  149.           {
  150.                         KeyValue=15;                     
  151.                                 while(KeyValue==15)
  152.                                         {KeyDown();}
  153.                                         main_delay(100000);
  154.                                 LCDMcs=1; //右屏開顯示
  155.                                 LCDScs=0;
  156.                         switch(KeyValue)
  157.                                 {
  158.                                  case(0):hz_LCDDisp8(2,key_time+0,Hz_0);key_time=key_time+8;break;
  159.                                  case(1):hz_LCDDisp8(2,key_time+0,Hz_1);key_time=key_time+8;break;
  160.                                  case(2):hz_LCDDisp8(2,key_time+0,Hz_2);key_time=key_time+8;break;
  161.                                  case(3):hz_LCDDisp8(2,key_time+0,Hz_3);key_time=key_time+8;break;
  162.                                  case(4):hz_LCDDisp8(2,key_time+0,Hz_4);key_time=key_time+8;break;
  163.                                  case(5):hz_LCDDisp8(2,key_time+0,Hz_5);key_time=key_time+8;break;
  164.                                  case(6):hz_LCDDisp8(2,key_time+0,Hz_6);key_time=key_time+8;break;
  165.                                  case(7):hz_LCDDisp8(2,key_time+0,Hz_7);key_time=key_time+8;break;
  166.                                  case(8):hz_LCDDisp8(2,key_time+0,Hz_8);key_time=key_time+8;break;
  167.                                  case(9):hz_LCDDisp8(2,key_time+0,Hz_9);key_time=key_time+8;break;
  168.                            case(10):hz_LCDDisp8(2,key_time+0,Hz_dian);key_time=key_time+8;break;

  169.                                  default:break;
  170.                     }
  171.                                 if (KeyValue!=11)
  172.                                 boxing=KeyValue;
  173.                         }

  174. //檢測周期
  175. while((KeyValue!=11))
  176.                                 {KeyDown();}                        
  177.         output_zhouqi();                        
  178.                         KeyValue=0;                                 
  179.         key_time=0;                        
  180.         while((KeyValue!=11))                 
  181.           {
  182.                         KeyValue=15;                     
  183.                                 while(KeyValue==15)
  184.                                         {KeyDown();}
  185.                                         main_delay(100000);
  186.                                 LCDMcs=1; //右屏開顯示
  187.                                 LCDScs=0;
  188.                         switch(KeyValue)
  189.                                 {
  190.                                  case(0):hz_LCDDisp8(4,key_time+0,Hz_0);key_time=key_time+8;break;
  191.                                  case(1):hz_LCDDisp8(4,key_time+0,Hz_1);key_time=key_time+8;break;
  192.                                  case(2):hz_LCDDisp8(4,key_time+0,Hz_2);key_time=key_time+8;break;
  193.                                  case(3):hz_LCDDisp8(4,key_time+0,Hz_3);key_time=key_time+8;break;
  194.                                  case(4):hz_LCDDisp8(4,key_time+0,Hz_4);key_time=key_time+8;break;
  195.                                  case(5):hz_LCDDisp8(4,key_time+0,Hz_5);key_time=key_time+8;break;
  196.                                  case(6):hz_LCDDisp8(4,key_time+0,Hz_6);key_time=key_time+8;break;
  197.                                  case(7):hz_LCDDisp8(4,key_time+0,Hz_7);key_time=key_time+8;break;
  198.                                  case(8):hz_LCDDisp8(4,key_time+0,Hz_8);key_time=key_time+8;break;
  199.                                  case(9):hz_LCDDisp8(4,key_time+0,Hz_9);key_time=key_time+8;break;
  200.                            case(10):hz_LCDDisp8(4,key_time+0,Hz_dian);key_time=key_time+8;break;
  201.                                  default:break;
  202.                     }
  203.                                 if (KeyValue!=11)
  204.                                 zhouqi=KeyValue+zhouqi*10;
  205.                         }
  206.                         
  207.         //檢測幅值
  208. while((KeyValue!=11))
  209.                                 {KeyDown();}                        
  210.         output_fuzhi();                        
  211.                         KeyValue=0;                                 
  212.         key_time=0;                        
  213.         while((KeyValue!=11))                 
  214.           {
  215.                         KeyValue=15;                     
  216.                                 while(KeyValue==15)
  217.                                         {KeyDown();}
  218. ……………………

  219. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

Keil代碼與Proteus8.8版本仿真下載:
波形發生器.7z (1.18 MB, 下載次數: 170)

作者: rrqxx    時間: 2021-4-22 19:31
生成方波頻率最高能到多少啊?
作者: heicad    時間: 2022-5-5 18:21
需要用Proteus8.8打開才可以,然后按圖1操作







作者: Mxd19991114    時間: 2022-5-5 22:46
學習了51的波形輸出,便于stm32的開發






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩伦理电影免费在线观看 | 日韩欧美国产不卡 | 国产精品一区在线观看你懂的 | 视频在线一区二区 | 国产精品亚洲一区二区三区在线观看 | 国产中文字幕在线 | 九九亚洲| 欧美性久久 | 亚洲国产偷 | 开操网| 蜜桃特黄a∨片免费观看 | 91免费在线视频 | 成人精品一区亚洲午夜久久久 | 狠狠干2020 | 日韩免费视频一区二区 | 在线播放亚洲 | 国产日韩一区 | 欧美成人激情 | 久久9精品| 91看片网 | 99精品网 | www.奇米| 在线播放国产一区二区三区 | 色婷婷精品国产一区二区三区 | 成人在线观看免费爱爱 | 国产精品伦一区二区三级视频 | 欧美日韩免费在线 | 爱爱免费视频网站 | 国产韩国精品一区二区三区 | 宅女噜噜66国产精品观看免费 | 二区精品| 国产精品国产成人国产三级 | 久久久久一区 | 亚洲一区二区 | 国产一区二区视频在线 | 羞羞视频在线观看网站 | 亚洲国产精品一区 | 日韩av一区二区在线观看 | 久久国产亚洲 | 一区在线视频 | 精品欧美视频 |