马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
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]
|