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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

低成本AVR單片機+LCD示波器(源碼+原理圖)

[復制鏈接]
跳轉到指定樓層
樓主
低成本AVR+LCD示波器,內有源碼,原理圖等 。


電路原理圖如下:




單片機源程序如下:

  1. /* AVR oscilloscope with 128x64 graphic LCD.

  2.    Created by Serasidis Vassilis and finished at 03.Aug.2007
  3.    e-mail: info@serasidis.gr and avrsite@yahoo.gr

  4.    This code is ditributed under GPL licence.
  5. */


  6. #include <avr/io.h>                // include I/O definitions (port names, pin names, etc)
  7. #include <avr/interrupt.h>
  8. #include "glcd.c"

  9. void USART_Init(unsigned int baudrate);
  10. void timePause(unsigned long count);
  11. void ADC_init (void);
  12. void initTimer (void);

  13. /* define CPU frequency in Mhz here if not defined in Makefile */
  14. #ifndef F_CPU
  15. #define F_CPU 16000000UL
  16. #endif

  17. #define msUp                                1
  18. #define msDwn                                4      
  19. #define YposUp                                0
  20. #define YposDwn                                3
  21. #define freeze                                2

  22. #define AC                                         0
  23. #define DC                                         1
  24. #define SQUARE                                2
  25. #define TRUE                                0
  26. #define FALSE                                1

  27. unsigned int counter = 0;
  28. unsigned int dataCounter = 0;
  29. unsigned int timeDiv = 52;
  30. unsigned int analogInput = 0;
  31. unsigned char trigger = 2;
  32. unsigned char cnt = 0;
  33. unsigned char empty = 0;
  34. unsigned int out = 0;
  35. unsigned char findZero = 0;
  36. unsigned char pressedButton = 0;
  37. unsigned char upLimit = 0;
  38. unsigned char dnLimit = 255;
  39. unsigned char limitBkup = 0;
  40. unsigned char  voltageType = AC;
  41. unsigned char  complete = TRUE;

  42. signed char Ypos   = 0;
  43. signed char Ypos2   = 0;
  44. signed char position  = 0;

  45. int main (void)
  46. {
  47.         DDRC = 0b00000000;
  48.         PORTC = 0b11111111;

  49.         DDRA = 0b00000000;

  50.         unsigned char temp1;
  51.         unsigned int temp2;
  52.         unsigned char i;

  53.         glcdInit();
  54.         ADC_init();
  55.         createWelcomeScreen();
  56.         showTheWave();
  57.         timePause(10000000);

  58.         for(;;)
  59.         {
  60.         //---------


  61.                         if (pressedButton == 0)
  62.                         {
  63.                         if (~PINC & (1<<msUp) && (timeDiv <= 1000))
  64.                                 {
  65.                                         if(timeDiv == 0)
  66.                                                 timeDiv = 52;
  67.                                         else
  68.                                     timeDiv += 145;
  69.                                         pressedButton = 1;
  70.                                 }
  71.                                 
  72.                                 if (~PINC & (1<<msDwn) && (timeDiv >= 52))
  73.                                 {
  74.                                         if(timeDiv <= 145)
  75.                                                 timeDiv = 0;
  76.                                         else
  77.                                                 timeDiv -= 145;
  78.                                         pressedButton = 1;
  79.                                 }
  80.                         
  81.                                 if (~PINC & (1<<YposUp) && (Ypos2 <= 60))
  82.                             Ypos2++;
  83.                                 
  84.                                 if (~PINC & (1<<YposDwn) && (Ypos2 >= -60))
  85.                                         Ypos2--;

  86.                                 if (~PINC & (1<<freeze))
  87.                                         while (~PINC & (1<<freeze)); // It freezes the display to watch the wave.
  88.                                 
  89.                         }
  90.                         else
  91.                         {
  92.                                 temp1 = PINC;
  93.                                 if (temp1 == 255)
  94.                                         pressedButton = 0;
  95.                         }
  96.                         
  97. //--------v
  98. // This routine makes the trigger.

  99.                         dataCounter = 0;
  100.                         findZero = 0;
  101.                         upLimit = 0;
  102.                         dnLimit = 255;


  103.                 for (i=99; i>0; i--)
  104.                 {
  105.                         ADCSRA |= (1 << ADSC); // Enable ADC
  106.                         loop_until_bit_is_set(ADCSRA, ADIF);                // wait until conversion complete.
  107.                         temp1 = ADCL;
  108.                         temp2 = ADCH;
  109.                         timePause(timeDiv); //(7);

  110.                         if (upLimit < temp2) // find the higher voltage level of the input waveform.
  111.                                 upLimit = temp2;
  112.                         if (dnLimit > temp2) // find the lower voltage level of the input waveform.
  113.                                 dnLimit = temp2;

  114.                         if (temp2 > 0)
  115.                         {
  116.                                 temp2 += 5;
  117.                                 temp2 /= 5;
  118.                                 temp2 += 2;
  119.                         }else temp2 = 2;
  120.                         
  121.                         position = temp2 + Ypos2 +5;
  122.                         if (position <= 63 && position >= 0)  // Adjust Up-Down the wave.
  123.                                 fillDataLcdBuffer(i,position);
  124.                         else
  125.                                 fillDataLcdBuffer(i,0);

  126.                 }
  127.                 if(upLimit != dnLimit)
  128.                         trigger = (((upLimit - dnLimit)/2)+ dnLimit); // find the middle of the wave, to be used it as a trigger.
  129. //--------^


  130.                 createRaster();
  131.                 createWave();
  132.                 showTheWave();

  133.                                 
  134.                                 dataCounter = 0;
  135.                                 do
  136.                                 {
  137.                                         limitBkup = temp2;

  138.                                         ADCSRA |= (1 << ADSC); // Enable ADC
  139.                                         loop_until_bit_is_set(ADCSRA, ADIF);
  140.                                         temp1 = ADCL;
  141.                                         temp2 = ADCH;
  142.                                         //timerPause(timeDiv);

  143.                                         if(limitBkup == temp2)
  144.                                         {
  145.                                                 dataCounter++;
  146.                                                 if(dataCounter >= 500)
  147.                                                         voltageType = DC;
  148.                                                 else
  149.                                                         voltageType = AC;
  150.                                         }

  151.                                         if((voltageType == AC) && ((temp2 == trigger) && (limitBkup < temp2)))
  152.                                                 complete = TRUE;
  153.                                         else
  154.                                         if((voltageType == DC) && (limitBkup == temp2) && (upLimit != dnLimit))
  155.                                         {
  156.                                                 dataCounter = 0;
  157.                                                 do
  158.                                                 {
  159.                                                         ADCSRA |= (1 << ADSC); // Enable ADC
  160.                                                         loop_until_bit_is_set(ADCSRA, ADIF);
  161.                                                         temp1 = ADCL;
  162.                                                         temp2 = ADCH;
  163.                                                         complete = TRUE;
  164.                                                         dataCounter++;
  165.                                                 }while ((temp2 > trigger) && (dataCounter <1000));
  166.                                        
  167.                                                 dataCounter = 0;
  168.                                                 do
  169.                                                 {
  170.                                                         ADCSRA |= (1 << ADSC); // Enable ADC
  171.                                                         loop_until_bit_is_set(ADCSRA, ADIF);
  172.                                                         temp1 = ADCL;
  173.                                                         temp2 = ADCH;
  174.                                                         complete = TRUE;
  175.                                                         dataCounter++;
  176.                                                 }while ((temp2 < trigger) && (dataCounter <1000));
  177.                                         }
  178.                                         else
  179.                                         if((voltageType == DC) && (limitBkup == temp2))
  180.                                                 complete = TRUE;
  181.                                         else
  182.                                                 complete = FALSE;
  183.                                                                                 

  184. ……………………

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

所有資料51hei提供下載:
低成本AVR LCD示波器.rar (920.44 KB, 下載次數: 54)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:79874 發表于 2019-1-30 07:13 | 只看該作者
能上傳pcb嗎
回復

使用道具 舉報

板凳
ID:91346 發表于 2019-1-30 10:24 | 只看該作者
能實現具體哪些基本功能?謝謝
回復

使用道具 舉報

地板
ID:480245 發表于 2019-2-25 10:16 來自手機 | 只看該作者
好東西,我喜歡。
回復

使用道具 舉報

5#
ID:486279 發表于 2019-3-7 15:03 | 只看該作者
確實厲害了   我也想做一個
回復

使用道具 舉報

6#
ID:486279 發表于 2019-3-7 15:04 | 只看該作者

這個當然可以上傳
回復

使用道具 舉報

7#
ID:467922 發表于 2019-3-19 14:56 | 只看該作者
這個很好呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人自拍 | 日韩欧美一区二区三区四区 | 99精品久久 | 国产精品成人一区 | 精品国产一区二区三区久久久四川 | 国产一极毛片 | 日韩五月天 | 美女视频黄色的 | 国产伦精品一区二区三区在线 | 二区三区在线观看 | 98成人网| 一级黄色片在线免费观看 | 亚洲视频一区 | 久久久久久久av麻豆果冻 | 国产精品美女一区二区 | 做a视频在线观看 | 亚洲欧美日韩电影 | 精品www| 情侣黄网站免费看 | 欧美成人精品欧美一级 | 亚洲欧美激情精品一区二区 | 国产精品久久久久久久久久了 | 国产中文字幕在线观看 | 日本在线视| 羞羞网站在线观看 | 日韩精品一区二区三区四区视频 | 亚洲最大的黄色网址 | 国产精品久久久久久久久久久久冷 | 天天爽天天操 | 久久尤物免费一区二区三区 | 久久九九影视 | 久久成人人人人精品欧 | 日韩日韩日韩日韩日韩日韩日韩 | 在线一区 | 一区二区精品 | 精品亚洲一区二区三区 | 日韩一区二区久久 | 成人一级视频在线观看 | 91视视频在线观看入口直接观看 | 久久久国产亚洲精品 | 国产视频中文字幕 |