找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3792|回复: 0
打印 上一主题 下一主题
收起左侧

用ADC_8bit(0)高速采样的示波器演示Arduino程序

[复制链接]
跳转到指定楼层
楼主
ID:542032 发表于 2019-5-19 15:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      
        1.  Nokia5110显示屏显示波形 , U8GLIB_PCD8544 u8g(3, 4, 99, 5, 6); // SPI Com: SCK = 3, MOSI = 4, CS = 永远接地, dc = 5, Reset = 6
        2.  A0信号输入。
        3.  D9输出自带10khz方波信号,D9与A0相接可以自测方波波形。
        4.  Buffer[x] = 47-(Buffer[x]>>2); //计算纵坐标值47大小可以改变水平轴上下移动
        5.  ADC.H库和u8glib库附件

Arduino源程序如下:
  1. #include <U8glib.h> //声明库
  2. #include<ADC.h>
  3. //Nokia5110示波器演示
  4. U8GLIB_PCD8544 u8g(3, 4, 99, 5, 6); // SPI Com: SCK = 3, MOSI = 4, CS = 永远接地, dc = 5, Reset = 6
  5. int Input = A0;  //声明输入引脚
  6. int x,y; //绘点坐标
  7. float Vpp;
  8. int Buffer[84]; //缓存值储存数组
  9. int Buf,Bu;
  10. void setup( )
  11. {
  12.    ADMUX=0xe0;  //测量通道0
  13.    ADCSRA=0xe2;
  14.   u8g.setFont(u8g_font_5x7);
  15.    u8g.firstPage();
  16.       analogReference(INTERNAL); //ADC使用单片机内部1.1V基准
  17.   u8g.setContrast(110);//设置对比度0-255
  18.    

  19. // 下面的等值于 OC1A = 输出用于定时器1的CTC模式
  20.   pinMode(9, OUTPUT);  // 设置默认关联了D9(查表得知)为输出,方波输出A10
  21.   TCCR1B=0; // 只是个复位的习惯可以不要
  22.   TCCR1A=_BV(COM1A0); // 要是困扰的话你也可以写成 TCCR1A = 0b01000000;
  23.   //这里和上一个表示了 = CTC 模式, 开启比较器(默认输出), prescaler = 1
  24.   TCCR1B = _BV(WGM12)|_BV(CS10) ; //  这里等值于 TCCR1B = 0b00001001;

  25.   // 最有意思的了,16位的玩意来确定要一个怎样的频率
  26.   OCR1A = 800; // 计算为:F_CPU/2/Need_HZ-1 来得到你想要的,遗憾的是四舍五入来截取频率800相当于10khz
  27.   }

  28. //采样

  29. void sample( )  

  30. {  

  31. for(x = 0;x < 84;x++)

  32.   // Buffer[x] = analogRead(A0);  //信号采样
  33.   // Buf=   analogRead(A1);
  34.    // Buf = ADCH;
  35.    Buffer[x] = ADC_8bit(0);//0表示A0输入
  36. for(x = 0;x < 84;x++)  

  37.    Buffer[x] = 47-(Buffer[x]>>2); //计算纵坐标值47大小可以改变水平轴上下移动

  38. }

  39. //显示

  40. void draw( )  

  41. {  
  42.   for(x = 0;x < 83;x++)
  43.    
  44.    /*    u8g.drawStr(40,7,"V");
  45.         u8g.setPrintPos(10,7);
  46.        u8g.print(Buf);
  47.        u8g.setPrintPos(10,15);
  48.        u8g.print(Bu);*/
  49.       
  50.        for(x = 0;x < 83;x++)
  51.        for(x = 0;x < 83;x++)
  52.       u8g.drawLine(x,Buffer[x],x,Buffer[x+1]);  //画相邻两点连线
  53.       
  54.       for(x = 0;x < 83;x++)   
  55.       u8g.drawLine(42,0,42,47);  // 画x坐标轴
  56.        u8g.drawLine(0,24,84,24); // 画y坐标轴
  57.        for(x=2;x<84;x+=8)        //画x坐标轴刻度
  58.        u8g.drawLine(x,23,x,25);
  59.        for(x=0;x<48;x+=8)        //画y坐标轴刻度
  60.        u8g.drawLine(41,x,43,x);   
  61.        u8g.drawFrame(0,0,84,48); //画边框
  62.      
  63. }   

  64. void loop( )

  65. {

  66.    sample();         //采样

  67.    u8g.firstPage();  //清屏

  68.    do  draw( );      //显示

  69.    while( u8g.nextPage( ));

  70. }
复制代码

所有资料51hei提供下载:
ADC_8bit_1_.rar (1.46 KB, 下载次数: 27)
ADC.rar (969 Bytes, 下载次数: 29)
U8Glib.7z (550.41 KB, 下载次数: 13)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表