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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12834|回復: 13
收起左側(cè)

用MSP430自帶ADC做個簡易示波器

  [復制鏈接]
ID:140725 發(fā)表于 2016-10-11 22:56 | 顯示全部樓層 |閱讀模式
  發(fā)現(xiàn)用msp430做簡易示波器的不多,感覺430還不錯
  msp430轉(zhuǎn)換速率200KSPS,2系列16M,算是比較快的了吧,用的msp430f2274做的
  因為硬件比較簡單,基本上是最小系統(tǒng),程序應該通用的
  屏幕12864 (ST7920) 19264(KS0108),程序?qū)懙暮軄y,功能不全,但基本功能有了,而且基本上是東挪西借,呵呵
16303050vnv155xffxhx1v.jpg.thumb.jpg

163032oqswfxswsw55srzz.jpg.thumb.jpg


163034d86jskxzdreeg588.jpg.thumb.jpg
 

1630350bcgcdcgbccy7ynz.jpg.thumb.jpg
 

163037oan255nc5uoq265c.jpg.thumb.jpg
 

163039dtr56a5h64r4655s.jpg.thumb.jpg
163041ynpy7nczfq4t7gn4.jpg.thumb.jpg
 原理圖沒有畫,前級衰減畫上了,但沒有裝,直接進單片機。
沒有畫原理圖,基本上是最小系統(tǒng)
LCD接口定義和按鍵都可以在程序中看出來原理圖沒有畫,前級衰減畫上了,但沒有裝,直接進單片機。
沒有畫原理圖,基本上是最小系統(tǒng)
LCD接口定義和按鍵都可以在程序中看出來

開發(fā)工具用的ez430f2013。SPY-BI-WIRE,兩線制JTAG,下載比較方便,呵呵
跟1系列區(qū)別應該不大,就是頻率高點,一些外設不一樣而已

12864液晶的主程序部分預覽:
  1. #include<msp430f2274.h>
  2. #include"math.h"
  3. #include"font 3X6.h"
  4. #include"12864.c"
  5. #define S1 7
  6. #define S2 6
  7. #define S3 5
  8. #define S4 4
  9. #define S5 3

  10. #define   Num_of_Results   100
  11. static unsigned int results[Num_of_Results];
  12. unsigned char index = 0;


  13. void ADC_Init(void)
  14. {
  15.   ADC10CTL1 = INCH_7 + CONSEQ_2;                     //Repeat single channel
  16.   ADC10CTL0 = ADC10SHT_3 + MSC + ADC10ON + ADC10IE;   //ADC10ON , Interrupt enale  
  17.   ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
  18.   ADC10AE0 |= 0X80;
  19. }
  20. /*******************測量電壓峰峰值********************/
  21. void Disp_Vpp(unsigned char hang,unsigned char lie,unsigned int VPP)
  22. {
  23.   float real_vpp;
  24.   unsigned int Uintvpp;
  25.   unsigned char ge,shi,bai;   //,i;
  26.   real_vpp = (VPP*3.3)/1024;
  27.   Uintvpp = real_vpp*100;
  28.   bai = Uintvpp/100%10;
  29.   shi = Uintvpp/10%10;
  30.   ge = Uintvpp%10;
  31.   
  32.   Draw_Font(hang,lie+0,font3x6+9+bai*3);
  33.   Draw_Font(hang,lie+3,font3x6+3);
  34.   Draw_Font(hang,lie+6,font3x6+9+shi*3);
  35.   Draw_Font(hang,lie+10,font3x6+9+ge*3);
  36.   
  37. }

  38. void Measure_Vol(void)
  39. {
  40.    unsigned int Max_voltage = 0,Min_voltage = 1024;
  41.    unsigned int c;
  42. //   float Real_Voltage;
  43.    uchar i,e;
  44.    
  45.    for(i=0;i<100;i++)
  46.    {
  47.       if(results[i] > Max_voltage)
  48.         Max_voltage = results[i];
  49.       else
  50.         if(results[i] < Min_voltage)
  51.           Min_voltage = results[i];
  52.    }
  53.    
  54.    c = Max_voltage - Min_voltage;
  55.    e++;
  56.    if(e > 5)
  57.    {
  58.      Disp_Vpp(10,102,Max_voltage);
  59.      Disp_Vpp(17,102,Min_voltage);
  60.      Disp_Vpp(24,102,c);
  61.      e = 0;
  62.    }
  63. }

  64. /********************測量電壓峰峰值********************/


  65. /********************ADC中斷服務函數(shù)********************/

  66. #pragma vector = ADC10_VECTOR
  67. __interrupt void ADC10ISR (void)
  68. {

  69.   results[index] = ADC10MEM;               // Move results
  70.   index++;
  71.   if(index == 100)
  72.   ADC10CTL0 &=~ ADC10IE;   

  73. }

  74. main()
  75. {
  76.   uchar y1=0,y2=0,i,j;          //y坐標
  77.   uchar TimeDiv = 3;
  78.   WDTCTL = WDTPW + WDTHOLD;
  79.   P1DIR = 0X00;                //P1.7--P1.3設為輸入,檢測按鍵
  80.   DCOCTL  = CALBC1_16MHZ;
  81.   BCSCTL1 = CALBC1_16MHZ;
  82.   Ini_lcd();
  83.   Clear_GDRAM();
  84.   Draw_PM(tab);
  85.   ADC_Init();
  86.   _EINT();
  87.   while(1)
  88.   {

  89. /**********************檢測按鍵**************************/
  90.     if(!(P1IN&(0x01<<S2)))
  91.     {
  92.       while(!(P1IN&(0x01<<S2)));
  93.       TimeDiv--;
  94.       ADC10CTL0 &=~ ENC;
  95.       ADC10CTL0 = ADC10SHT_0;
  96.       ADC10CTL1 = INCH_7 + CONSEQ_2;                     //Repeat single channel
  97.       ADC10CTL0 = TimeDiv*0x800 + MSC + ADC10ON + ADC10IE;   //ADC10ON , Interrupt enale  
  98.       ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
  99.       if(TimeDiv == 0) TimeDiv = 4;
  100.     }
  101.    
  102.     if(index == 100)                           //測完99次再顯示
  103.   {
  104.     index = 0;
  105.     for(i=0;i<=99;i++)                      //顯示時把99次測量的值畫點在12864上   
  106.     {
  107.       y1 = y2;
  108.       y2 = 61 - (results[i]/17);            //17表示 滿量程1024除以60個點
  109.       LCD_Set_Dot1(i,y2);
  110.       
  111.       if((abs(y2 - y1)>=3)&&(i!=0))        //如果下一點的縱坐標比前一個點的縱坐標大3,為了看起來連續(xù),兩個點畫線
  112.       Lcd_DrawLine_Y(y1,y2,i);
  113.     }
  114.     Measure_Vol();                         //測量最大值最小值     
  115.     Delay_Nms(200);                       //等待1秒左右時間

  116. /**********************檢測按鍵S1**************************/
  117.       while(!(P1IN&(0x01<<S1)));                // FREEZE,鎖定屏幕
  118. /**********************檢測按鍵S1**************************/

  119.    
  120.     for(i=0;i<=99;i++)                    //顯示過后刪除,不能清屏,因為清屏的話看起來屏幕會閃爍
  121.     {
  122.       y1 = y2;
  123.       y2 = 61 - (results[i]/17);
  124.       if((! ((i%10 == 9)&&(y2%10 == 1) ||(i==0) )))
  125.       LCD_ReSet_Dot1(i,y2);
  126.       
  127.       if((abs(y2 - y1)>=3)&&(i!=0))
  128.       Lcd_ReDrawLine_Y(y1,y2,i);
  129.       
  130.     }
  131.    
  132.       for(j=1;j<100;j=j+2)                                  //畫中心X,Y軸
  133.       {
  134.         LCD_Set_Dot1(49,j);
  135.         LCD_Set_Dot1(j,31);
  136.         for(i=1;i<62;i=i+10)                                
  137.         {
  138.           if( ( ((j%10 == 9)||j==1))&&(i%10 == 1) )           //保存背景的點
  139.           LCD_Set_Dot1(j,i);
  140.         }
  141.       }
  142.    ADC10CTL0 |= ADC10IE;   
  143.   }
  144.   
  145.   }
  146. }
復制代碼
19264液晶屏:
  1. #include<msp430f2274.h>
  2. #include"math.h"
  3. #include"font 3X6.h"
  4. #include"19264-KS0108.c"
  5. #include"ADC.c"


  6. #define S1 7
  7. #define S2 6
  8. #define S3 5
  9. #define S4 4
  10. #define S5 3

  11. void main(void)
  12. {
  13.    unsigned char y1,y2,i,j;
  14.    P2DIR |= BIT2;
  15.    P3DIR |= BIT0;
  16.    DCOCTL  = CALBC1_16MHZ;
  17.    BCSCTL1 = CALBC1_16MHZ;
  18.    WDTCTL = WDTPW + WDTHOLD;
  19.    LCD19264Initial();
  20.    LCD19264Draw_PM(tab);
  21.    ADC_Init();   
  22.    _EINT();
  23.    
  24.    
  25.    while(1)
  26.    {
  27.      
  28. /**********************檢測按鍵S2**************************/
  29.       if(!(P1IN&(0x01<<S2)))
  30.       {
  31.         if(Delay_Time<16384)
  32.         {
  33.          while(!(P1IN&(0x01<<S2)));
  34.          Delay_Time = Delay_Time<<2;
  35.         }
  36.       }
  37.      
  38. /**********************檢測按鍵S3**************************/
  39.       if(!(P1IN&(0x01<<S3)))
  40.       {
  41.         if(Delay_Time>4)
  42.         {
  43.          while(!(P1IN&(0x01<<S3)));
  44.          Delay_Time = Delay_Time>>2;
  45.         }
  46.       }
  47.      
  48. /******************************************************************/
  49. /***************************顯示一屏數(shù)據(jù)***************************/
  50.      
  51.       if(index == Num_of_Results)                 //在主程序中顯示一屏數(shù)據(jù)
  52.       {
  53.          index = 0;
  54.          for(i=1;i<=Num_of_Results-1;i++)
  55.          {
  56.             y1 = y2;
  57.             y2 = 61 - (results[i]/17);
  58.             LCD19264WriteDot(i,y2,1);                      //打點
  59.             
  60.            if((abs(y2 - y1) >=3)&(i!=1) )                  //為了看起來連續(xù),當y軸間距大于等于3,畫線
  61.            {
  62.               LCD19264DrawLine_Y(y1,y2,i,1);
  63.            }
  64.            
  65.          }
  66.          
  67. /***************************測量最大值,最小值,Vpp并且顯示***************************/
  68.          
  69.       Measure_Vol();                         //測量最大值最小值     
  70.       
  71.       Delay_Nms(500);                        //延時一段時間,使屏幕變化不那么快
  72.       
  73. /**********************檢測按鍵S1**************************/
  74.       while(!(P1IN&(0x01<<S1)));                // FREEZE,鎖定屏幕
  75. /**********************檢測按鍵S1**************************/
  76.       
  77. /***************************刪除之前顯示一屏的數(shù)據(jù)********************************/
  78.       
  79.       for(i=1;i<=Num_of_Results-1;i++)
  80.          {
  81.             y1 = y2;
  82.             y2 = 61 - (results[i]/17);
  83.             LCD19264WriteDot(i,y2,0);
  84.            if( (abs(y2 - y1) >=3)&(i!=1) )                //因y1初始值為0,有可能比y2小,所以i!=1時畫線
  85.            {
  86.               LCD19264DrawLine_Y(y1,y2,i,0);
  87.            }
  88.          }
  89.          
  90. /***************************顯示背景界面的點********************************/
  91.       
  92.          for(i=1;i<162;i+=10)
  93.          {
  94.              for(j=1;j<62;j+=15)
  95.              {
  96.                  LCD19264WriteDot(i,j,1);
  97.              }
  98.          }
  99.       
  100. /***************************顯示橫軸和縱軸********************************/
  101.       
  102.          for(i=0;i<80;i++)
  103.          {
  104.            LCD19264WriteDot((2*i+1),31,1);
  105.            
  106.            if(i<31)
  107.            LCD19264WriteDot(81,(2*i+1),1);
  108.          }
  109.       ADC10CTL0 |= ADC10IE;                               //開ADC中斷
  110.       }
  111.       _NOP();
  112.    }
  113. }
復制代碼
全部源碼下載:

12864 自制版示波器.rar (85.12 KB, 下載次數(shù): 115)

19264 自制示波器.rar (142.62 KB, 下載次數(shù): 61)


回復

使用道具 舉報

ID:79034 發(fā)表于 2016-10-12 08:10 | 顯示全部樓層
贊一個,可是我不會MSP430.我想用STM32或者51帶彩屏做一個。
回復

使用道具 舉報

ID:141118 發(fā)表于 2016-10-15 13:47 | 顯示全部樓層
看看 啥效果
回復

使用道具 舉報

ID:168687 發(fā)表于 2017-3-6 21:59 | 顯示全部樓層
真的不錯!!贊一個
回復

使用道具 舉報

ID:169871 發(fā)表于 2017-3-26 16:11 | 顯示全部樓層
真的厲害
回復

使用道具 舉報

ID:224571 發(fā)表于 2017-8-4 01:14 | 顯示全部樓層
學習了
回復

使用道具 舉報

ID:91165 發(fā)表于 2017-8-4 09:03 | 顯示全部樓層
學習了,謝謝樓主分享
回復

使用道具 舉報

ID:417443 發(fā)表于 2018-10-29 18:34 來自手機 | 顯示全部樓層
真的贊
回復

使用道具 舉報

ID:418150 發(fā)表于 2018-10-30 21:39 | 顯示全部樓層
電路原理圖可以提供一下嗎
回復

使用道具 舉報

ID:325030 發(fā)表于 2019-10-30 12:26 | 顯示全部樓層
厲害的,可以一看
回復

使用道具 舉報

ID:126173 發(fā)表于 2020-10-9 09:33 | 顯示全部樓層
學習了 ,不錯,而且 電路 源程序都開源了,可以給大家做為參考。謝謝你
回復

使用道具 舉報

ID:236060 發(fā)表于 2020-10-9 17:45 | 顯示全部樓層
感謝分享,太詳細了
回復

使用道具 舉報

ID:64696 發(fā)表于 2020-10-16 10:22 | 顯示全部樓層
謝謝大俠無私奉獻學習了、論壇有你更精彩!
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 婷婷色国产偷v国产偷v小说 | 国产美女一区二区 | 欧美日韩成人一区二区 | 亚洲欧洲精品成人久久奇米网 | 91人人视频在线观看 | 欧美黄色性生活视频 | 97超级碰碰 | 亚洲va欧美va天堂v国产综合 | 日韩高清不卡 | 特级做a爰片毛片免费看108 | 亚洲免费视频播放 | 免费a在线 | 精品视频在线观看 | 99国产精品99久久久久久 | 免费a国产 | 国产高清精品一区二区三区 | 精产国产伦理一二三区 | 久久久久久高潮国产精品视 | 精品视频99 | 久久亚洲国产精品 | 国产精品一二区 | 婷婷在线视频 | 罗宾被扒开腿做同人网站 | 午夜视频在线观看网站 | 怡红院怡春院一级毛片 | 午夜视频一区二区三区 | 三级在线观看 | 欧美性生活免费 | 国产高清视频在线观看 | 欧美 日韩 在线播放 | 亚洲国产视频一区二区 | av一级在线观看 | 国产精品视频久久久 | 精品在线观看一区二区 | 精品久久99 | 国产成人午夜高潮毛片 | 麻豆毛片 | 欧美在线视频一区 | 日本三级日产三级国产三级 | 激情久久网| 农村妇女毛片精品久久久 |