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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

可調頻調幅、多種波形切換的信號發生器仿真及源程序

  [復制鏈接]
跳轉到指定樓層
樓主
這個信號發生器可以產生多種波形,可以調頻、調幅,功能很強大.用按鍵切換波形.




仿真及源碼下載:
信號發生器.rar (73.64 KB, 下載次數: 173)


信號發生器源程序:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit WR1  = P2^4;
  5. sbit CS = P2^5;

  6. #define DA0832 P1
  7. sbit VPP=P3^4;

  8. sbit RS = P2^0;
  9. sbit RW = P2^1;
  10. sbit E  = P2^2;

  11. uchar c=0,tl,th,t;

  12. bit wave_change=0,is_stop=0;

  13. uint code T_WAVE_INIT_code[]={1,5,6,7,8,10,13,17,25,50,500,
  14. 526,556,588,625,667,714,769,833,909,1000,1111,1250,1429,1667,2000,2500,3333,5000};
  15. uint code f_code[]={1,100,80,70,60,50,40,30,20,10,1,
  16. 950,900,850,800,750,700,650,600,550,500,450,400,350,300,250,200,150,100};

  17. uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,
  18. 0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,
  19. 0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  20. 0xff,0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,
  21. 0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,
  22. 0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,
  23. 0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,
  24. 0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,
  25. 0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,
  26. 0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,
  27. 0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};

  28. char T_WAVE_INIT_code_num=28;
  29. uint temp;
  30. uint T_WAVE_INIT,H_count,T_count;

  31. bit is_L_H=0;
  32. uchar VPP_num=10,real_VPP_num=0xff;

  33. uchar Display_Buffer[2][16] ={
  34.                                  {"square  Vpp=5.0V"},
  35.                                  {"010KHz step=50Hz"}
  36.                                                      };


  37. #include"1602.c"
  38. //函數聲明
  39. void Refesh_Disp_Buffer();// 刷新顯示緩沖

  40. //--------------------------------------------------------------
  41. // 主程序
  42. //-----------------------------------------------------------------
  43. void main()
  44. {   
  45.         uchar VPP_num_temp;
  46.         CS=0;
  47.         WR1=0;

  48.         T_WAVE_INIT=T_WAVE_INIT_code[T_WAVE_INIT_code_num];                  
  49.         th=(65536-T_WAVE_INIT)/256;
  50.         tl=(65536-T_WAVE_INIT)%256;
  51.         temp=f_code[T_WAVE_INIT_code_num];
  52.         TMOD=0X11;
  53.         TH0=th;
  54.         TL0=tl;
  55.         ET0=1;
  56.         TR0=0;         

  57.         TH1=th;
  58.         TL1=tl;
  59.         ET1=1;
  60.         TR1=0;         

  61.         EX0=1;
  62.         IT0=1;
  63.         EX1=1;
  64.         IT1=1;
  65.         PX1=1;
  66.         EA=1;           

  67.         Initialize_LCD1602();//液晶初始化函數
  68.         LCD_Write_Command(0x80);
  69.         LCD_Display(Display_Buffer[0]);
  70.         LCD_Write_Command(0xC0);       
  71.         LCD_Display(Display_Buffer[1]);
  72.         TR0=1;
  73.         while(1)
  74.         {
  75.           
  76.                 Refesh_Disp_Buffer();
  77.                 if(VPP==0)
  78.                 {
  79.                         DelayMS(5);
  80.                         if(VPP==0)                         //調節并顯示頻率的幅度
  81.                         {
  82.                                
  83.                                 VPP_num--;
  84.                                 if(VPP_num==0)VPP_num=10;
  85.                                 VPP_num_temp=VPP_num*5;

  86.                                 LCD_Write_Command(0x80+12);       
  87.                                 Write_LCD_Data(VPP_num_temp/10+'0');
  88.                                 Write_LCD_Data('.');
  89.                                 Write_LCD_Data(VPP_num_temp%10+'0');

  90.                                 real_VPP_num=255.0/10*VPP_num;

  91.                                 while(!VPP);
  92.                         }
  93.                 }
  94.         }          
  95. }


  96. //--------------------------------------------------------------------------
  97. // 刷新顯示緩沖
  98. //-------------------------------------------------------------------------
  99. void Refesh_Disp_Buffer()
  100. {
  101.         //temp;                //temp表示需顯示的頻率值
  102.         Display_Buffer[1][0] = temp/100+'0';         //整數位   頻率
  103.         Display_Buffer[1][1] = temp/10%10+'0';         //整數位
  104.         Display_Buffer[1][2] = temp%10+'0';         //兩個小數位
  105.         if(T_WAVE_INIT_code_num<11)                        //顯示頻率1K---100K                 T_WAVE_INIT:500-5       
  106.         {
  107.                 Display_Buffer[1][3] = 'K';

  108.                 LCD_Write_Command(0xC0+12);                         //顯示步進值         高頻
  109.                 Write_LCD_Data('1');
  110.                 Write_LCD_Data('0');
  111.                 Write_LCD_Data('K');
  112.                 Write_LCD_Data('H');
  113.         }
  114.         else
  115.         {                                  
  116.                 Display_Buffer[1][3]  = ' ';  
  117.                 LCD_Write_Command(0xC0+12);                                          //顯示步進值                   低頻
  118.                 Write_LCD_Data('5');
  119.                 Write_LCD_Data('0');
  120.                 Write_LCD_Data('H');
  121.                 Write_LCD_Data('z');
  122.         }         

  123.         LCD_Write_Command(0xC0);                                  //顯示當前頻率值
  124.         Write_LCD_Data(Display_Buffer[1][0]);
  125.         Write_LCD_Data(Display_Buffer[1][1]);
  126.         Write_LCD_Data(Display_Buffer[1][2]);
  127.         Write_LCD_Data(Display_Buffer[1][3]);

  128.           if(wave_change==0)        
  129.         {
  130.                 LCD_Write_Command(0x80);       
  131.                 Write_LCD_Data('s');
  132.                 Write_LCD_Data('q');
  133.                 Write_LCD_Data('u');
  134.                 Write_LCD_Data('a');
  135.                 Write_LCD_Data('r');
  136.                 Write_LCD_Data('e');
  137.                 Write_LCD_Data(' ');                   
  138.            }
  139.         else
  140.         {
  141.                 LCD_Write_Command(0x80);       
  142.                 Write_LCD_Data('s');
  143.                 Write_LCD_Data('i');
  144.                 Write_LCD_Data('n');
  145.                 Write_LCD_Data('w');
  146.                 Write_LCD_Data('a');
  147.                 Write_LCD_Data('v');
  148.                 Write_LCD_Data('e');
  149.         }

  150.         if(wave_change==1&&is_stop==1){TR1=1;is_stop=0;}
  151.         if(wave_change==0&&is_stop==1){TR0=1;is_stop=0;}
  152. }


  153. //-------------------------------------------------

  154. void INT0_int(void) interrupt 0 //中斷服務程序          波形切換
  155. {
  156.         wave_change=!wave_change;
  157.         if(wave_change)        
  158.         {       
  159.                  TR0=0;
  160.                 TR1=1;                                 
  161.            }
  162.         else
  163.         {
  164.                    TR1=0;
  165.                 TR0=1;                          //輸出方波形                                                  
  166.         }
  167. }
  168. void INT1_int(void) interrupt 2 //按鍵中斷服務程序          調頻
  169. {
  170.         if(wave_change) {TR1=0;is_stop=1;}
  171.         else {TR0=0;is_stop=1;}

  172.         T_WAVE_INIT_code_num=T_WAVE_INIT_code_num-1;                                        //i增加,于是f減少
  173.         if(T_WAVE_INIT_code_num==0)T_WAVE_INIT_code_num=28;

  174.         T_WAVE_INIT=T_WAVE_INIT_code[T_WAVE_INIT_code_num];

  175.         th=(65536-T_WAVE_INIT)/256;
  176.         tl=(65536-T_WAVE_INIT)%256;

  177.         temp=f_code[T_WAVE_INIT_code_num];        
  178. }
  179. void time0_int(void) interrupt 1 //中斷服務程序           輸出方波形
  180. {  
  181.         static bit d;
  182.                                   
  183.         TH0=th;
  184.         TL0=tl;

  185.         d=~d;  
  186.         if(d)
  187.                 DA0832=0x00;  
  188.         else   
  189.                 DA0832=real_VPP_num;   
  190. }
  191. void time1_int(void) interrupt 3 //中斷服務程序           輸出正弦波形
  192. {                    
  193.         static uchar b=0;
  194.         TH0=th;
  195.         TL0=tl;

  196.         DA0832=tosin[b]/10*VPP_num; ; //正弦波
  197.         b+=8;           
  198. }
復制代碼


評分

參與人數 1黑幣 +1 收起 理由
18237143985 + 1 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:145318 發表于 2016-11-3 17:03 | 只看該作者
下了,希望程序別再出錯吧。。。。 找了幾天 程序總有問題
回復

使用道具 舉報

板凳
ID:128725 發表于 2017-2-10 14:00 | 只看該作者
正弦波形不能看
回復

使用道具 舉報

地板
ID:167165 發表于 2017-3-6 09:02 | 只看該作者
你這個正弦波失真得有點嚴重啊。。。。看不出正弦波的樣子了,一點弧度都沒有
回復

使用道具 舉報

5#
ID:197660 發表于 2017-5-11 22:09 | 只看該作者
剛好需要信號發生器的研究,謝謝分享
回復

使用道具 舉報

6#
ID:213573 發表于 2017-6-26 15:39 | 只看該作者
如果使用矩陣鍵盤的話會更好一些
回復

使用道具 舉報

7#
ID:213573 發表于 2017-6-26 16:00 | 只看該作者
幅度可調范圍是多少?
回復

使用道具 舉報

8#
ID:213573 發表于 2017-6-26 16:26 | 只看該作者
只能實現方波和正弦波,而且波形太不理想了
回復

使用道具 舉報

9#
ID:82098 發表于 2021-4-28 16:03 | 只看該作者
電路有問題。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久果冻传媒 | 久久久久久综合 | 色一情一乱一伦一区二区三区 | 天天操天天拍 | 国产午夜精品一区二区三区四区 | 日本h片在线观看 | 国产精品精品久久久 | 国产欧美精品区一区二区三区 | 一级片视频免费观看 | 国产午夜精品一区二区 | 中文字幕在线二区 | 久久精品国产一区 | 狠狠撸在线视频 | 欧美精品久久久 | 蜜桃视频成人 | 欧美日韩中文在线 | 国产一二三视频在线观看 | 欧美成人在线免费 | 男女网站视频 | 自拍视频网站 | 欧美精品一区二区三区四区五区 | 国产精品自产拍在线观看蜜 | 一级毛片高清 | 91中文在线观看 | 成人国内精品久久久久一区 | a在线v| 99亚洲精品视频 | 欧美自拍一区 | 久久国产综合 | 亚洲精品免费在线观看 | av一区二区在线观看 | 亚洲欧洲日本国产 | av一级久久 | 狠狠的干狠狠的操 | www国产亚洲精品久久网站 | 成人一区av | 九九免费在线视频 | 爱爱免费视频 | 视频二区| 久久久久久久久久久91 | 天天操夜夜操 |