迅维网

查看: 2420|回复: 3
打印 上一主题 下一主题

arduino单片机便携式数字示波器DIY过程

[复制链接]
跳转到指定楼层
1#
发表于 2017-2-7 12:50:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x

                               
登录/注册后看高清大图


程序:
  • #include <U8glib.h> //声明库
  • U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 声明液晶屏  13=sck, 12=mosi, 11=cs
  • int Input = A0;  //声明输入引脚
  • int Key_add = 8;  //声明按钮引脚
  • int Key_sub = 9;
  • int Key_hold = 10;
  • int x, y; //声明坐标
  • int i, i1, i2, V_min, V_max, V_mid, t, t0, t1, sta, Key = 1, hold = 0;
  • long Freq;
  • float Vpp;
  • int Y[96]; //声明信号值储存数组
  • int Buffer[192];
  • const uint8_t L[] PROGMEM = {
  •   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x60,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x18,0x00,
  • 0x00,0x70,0x40,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x3F,0xFC,0x00,
  • 0x00,0x76,0x70,0x00,0x83,0xFC,0x00,0x0F,0xF0,0x00,0x03,0x80,0x01,0xFF,0x9C,0x00,
  • 0x01,0x7E,0x70,0x01,0x9F,0xFC,0x00,0x3F,0xE0,0x01,0xC1,0x80,0x01,0x99,0x98,0x00,
  • 0x01,0xFC,0x60,0x01,0xFC,0x1E,0x00,0x1C,0x00,0x01,0xC1,0x9C,0x01,0x99,0xF8,0x00,
  • 0x01,0xF0,0xE0,0x01,0x83,0xB8,0x00,0x00,0x00,0x00,0xC3,0xFE,0x01,0xFE,0xC0,0x00,
  • 0x00,0x7E,0xC6,0x03,0x87,0xE0,0x00,0x00,0x00,0x00,0x3F,0xFE,0x00,0x86,0x1E,0x00,
  • 0x07,0xF8,0xFF,0x03,0x7D,0xC0,0x00,0x07,0xFF,0x00,0x39,0x98,0x00,0x06,0xFE,0x00,
  • 0x01,0xFD,0xF8,0x00,0x33,0x80,0x0F,0xFF,0xFF,0x86,0x39,0x80,0x01,0xFF,0xF8,0x00,
  • 0x01,0xFF,0xB0,0x00,0x07,0x00,0x0F,0xFF,0x00,0x07,0x39,0x80,0x01,0xFF,0x00,0x00,
  • 0x07,0x27,0x30,0x00,0x07,0xFF,0x00,0x07,0x00,0x07,0x3F,0xF0,0x00,0x1F,0x80,0x00,
  • 0x0E,0xFB,0x30,0x01,0xFF,0xFF,0x80,0x87,0x00,0x00,0x3F,0x70,0x00,0x38,0xF0,0x00,
  • 0x08,0xFF,0xF0,0x0F,0xFF,0x80,0x00,0x87,0x38,0x00,0xBC,0x60,0x00,0x78,0x7E,0x00,
  • 0x07,0xFD,0xE0,0x0F,0x03,0x80,0x01,0x87,0x3E,0x01,0xBF,0xE0,0x01,0xE0,0x3F,0x80,
  • 0x1F,0xD8,0xE0,0x00,0x03,0x80,0x01,0x87,0x1E,0x03,0x33,0xE0,0x07,0x9C,0x7C,0x00,
  • 0x08,0xD8,0xE0,0x00,0x03,0x80,0x03,0x87,0x0F,0x03,0x31,0xC0,0x01,0xFF,0xFE,0x00,
  • 0x00,0xF1,0xF8,0x00,0x03,0x80,0x03,0x07,0x06,0x07,0x31,0xF0,0x01,0x8D,0x8C,0x00,
  • 0x00,0xFF,0x3C,0x00,0x03,0x80,0x01,0x1F,0x00,0x07,0x67,0xFE,0x01,0x9D,0x9C,0x00,
  • 0x01,0xFE,0x1F,0x00,0x3F,0x80,0x00,0x1F,0x00,0x06,0xDF,0x3F,0x81,0xFD,0xFC,0x00,
  • 0x07,0x88,0x1F,0x80,0x1F,0x00,0x00,0x0F,0x00,0x00,0xB8,0x0F,0xC0,0xE0,0xC0,0x00,
  • 0x06,0x00,0x00,0x00,0x0F,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,
  • 0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x3C,0x0C,0x7F,0xC0,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x7C,0x0C,0x7F,0xC0,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xDC,0xEE,0x3C,0x7F,0xC0,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x8F,0xC7,0x7C,0x03,0x80,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC7,0x6C,0x03,0x80,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0xC7,0x0C,0x07,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0xC7,0x0C,0x06,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x39,0xC7,0x0C,0x0E,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0xC7,0x0C,0x0E,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xC7,0x0C,0x0C,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0xEE,0x0C,0x1C,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x7E,0x0C,0x1C,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x7C,0x0C,0x1C,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  • 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  • };
  • void setup( )
  • {
  •   pinMode(Key_add, INPUT);
  •   digitalWrite(Key_add, HIGH);
  •   pinMode(Key_sub, INPUT);
  •   digitalWrite(Key_sub, HIGH);
  •   pinMode(Key_hold, INPUT);
  •   digitalWrite(Key_hold, HIGH);
  •   ADMUX = 0xe0;
  •   ADCSRA = 0xe2;
  •   u8g.setFont(u8g_font_5x7);
  •   u8g.firstPage();
  •   do {
  •     u8g.drawBitmapP( 0, 0, 16, 64, L);
  •   } while ( u8g.nextPage() );
  •   delay(2000);
  • }
  • void sample( )
  • { for (i = 0; i < 192; i++)
  •   {
  •     Buffer = ADCH;
  •     switch (Key)
  •     {
  •       case 1:
  •         break;
  •       case 2:
  •         delayMicroseconds(4);
  •         break;
  •       case 3:
  •         delayMicroseconds(10);
  •         break;
  •       case 4:
  •         delayMicroseconds(23);
  •         break;
  •       case 5:
  •         delayMicroseconds(60);
  •         break;
  •       case 6:
  •         delayMicroseconds(123);
  •         break;
  •       case 7:
  •         delayMicroseconds(248);
  •         break;
  •       case 8:
  •         delayMicroseconds(623);
  •         break;
  •       case 9:
  •         delayMicroseconds(1247);
  •         break;
  •       default: break;
  •     }
  •   }
  • }
  • void Measure()
  • {
  •   V_max = Buffer[0];
  •   V_min = Buffer[0];
  •   for (i = 0; i < 192; i++)
  •   {
  •     if (Buffer > V_max)
  •       V_max = Buffer;
  •     if (Buffer < V_min)
  •       V_min = Buffer;
  •   }
  •   V_mid = (V_max + V_min) / 2;
  •   Vpp = (V_max - V_min) * 1.1 / 255;
  •   for (i = 0; i < 97; i++)
  •   {
  •     if (Buffer < V_mid && Buffer[i + 1] >= V_mid)
  •     {
  •       i1 = i;
  •       break;
  •     }
  •   }
  •   for (i = i1 + 1; i < 98 + i1; i++)
  •   {
  •     if (Buffer < V_mid && Buffer[i + 1] >= V_mid)
  •     {
  •       i2 = i;
  •       break;
  •     }
  •   }
  •   t = i2 - i1;
  •   if (t > 0)
  •     Freq = 8000 / t;
  •   else
  •     Freq = 0;
  • }
  • void Transform( )
  • {
  •   for (sta = 0; sta < 96; sta++)
  •   {
  •     if (Buffer[sta] < 128 && Buffer[sta + 2] > 128)
  •       break;
  •   }
  •   for (i = 0; i < 96; i++)
  •     Y =  63 - (Buffer[i + sta] >> 2);
  • }
  • void draw( )
  • {
  •   for (x = 0; x < 95; x++)
  •     u8g.drawLine(x, Y[x], x, Y[x + 1]); //画线
  •   //画边框
  •   u8g.drawFrame(0, 0, 97, 64);
  •   // 画坐标轴
  •   u8g.drawLine(48, 0, 48, 63);
  •   u8g.drawLine(0, 32, 96, 32);
  •   for (x = 0; x < 96; x += 8)
  •     u8g.drawLine(x, 31, x, 33);
  •   for (y = 0; y < 64; y += 8)
  •     u8g.drawLine(47, y, 49, y);
  •   //画网格
  •   for (x = 8; x < 96; x += 8)
  •   {
  •     for (y = 8; y < 64; y += 8)
  •       u8g.drawPixel(x, y);
  •   }
  •   //显示参数
  •   u8g.drawStr(98, 7, "MS/div");
  •   u8g.drawStr(98, 23, "V/div");
  •   u8g.drawStr(98, 30, "0.324");
  •   u8g.drawStr(98, 40, "Vpp");
  •   u8g.setPrintPos( 98, 47);
  •   u8g.print(Vpp);
  •   u8g.drawStr(118, 47, "V");
  •   u8g.drawStr(98, 55, "F(HZ)");
  •   switch (Key)
  •   {
  •     case  1:
  •       u8g.drawStr(98, 14, "0.02");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq * 50);
  •       break;
  •     case  2:
  •       u8g.drawStr(98, 14, "0.05");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq * 20);
  •       break;
  •     case  3:
  •       u8g.drawStr(98, 14, " 0.1");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq * 10);
  •       break;
  •     case  4:
  •       u8g.drawStr(98, 14, " 0.2");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq * 5);
  •       break;
  •     case  5:
  •       u8g.drawStr(98, 14, " 0.5");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq * 2);
  •       break;
  •     case  6:
  •       u8g.drawStr(98, 14, "  1");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq);
  •       break;
  •     case  7:
  •       u8g.drawStr(98, 14, "  2");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq / 2);
  •       break;
  •     case  8:
  •       u8g.drawStr(98, 14, "  5");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq / 5);
  •       break;
  •     case  9:
  •       u8g.drawStr(98, 14, " 10");
  •       u8g.setPrintPos( 98, 62);
  •       u8g.print(Freq / 10);
  •       break;
  •     default: break;
  •   }
  • }
  • //键盘扫描
  • void Key_scan()
  • {
  •   if (digitalRead(Key_add) == LOW)
  •   {
  •     while (digitalRead(Key_add) == LOW);
  •     Key++;
  •     if (Key == 10)
  •       Key = 9;
  •     delay(10);
  •   }
  •   if (digitalRead(Key_sub) == LOW)
  •   {
  •     while (digitalRead(Key_sub) == LOW);
  •     Key--;
  •     if (Key == 0)
  •       Key = 1;
  •     delay(10);
  •   }
  •   if (digitalRead(Key_hold) == LOW)
  •   {
  •     while (digitalRead(Key_hold) == LOW);
  •     hold = ~hold;
  •     delay(10);
  •   }
  • }
  • void loop( )
  • {
  •   sample( );
  •   Measure( );
  •   Transform( );
  •   Key_scan( );
  •   if (hold == 0)
  •   {
  •     u8g.firstPage( );
  •     do
  •     {
  •       draw( );
  •     }
  •     while ( u8g.nextPage( ));
  •   }
  • }

[color=rgb(51, 102, 153) !important]复制代码

[color=rgb(51, 102, 153) !important]



2#
发表于 2017-2-7 21:27:58 | 只看该作者 来自: 中国 来自 中国
本帖最后由 yucongwu7410 于 2017-2-7 21:29 编辑

那一堆0x00的信号值储存数组是怎么调用的?U8glib.h库里包含了哪些东西

点评

这个帖子是转载的,这里面的东西我也不明白..不好意思了  详情 回复 发表于 2017-2-8 06:37
回复 支持 反对

使用道具 举报

3#
发表于 2017-2-8 06:37:28 | 只看该作者 来自: 中国 来自 中国
yucongwu7410 发表于 2017-2-7 21:27
那一堆0x00的信号值储存数组是怎么调用的?U8glib.h库里包含了哪些东西

这个帖子是转载的,这里面的东西我也不明白..不好意思了

回复 支持 反对

使用道具 举报

4#
发表于 2017-3-7 14:16:53 | 只看该作者 来自: 浙江宁波 来自 浙江宁波
这样做出来的示波器 只有几M的带宽吧

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复