完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 l420ll 于 2016-12-13 09:15 编辑 首先感谢灵动微电子和电子发烧友给予的开发板支持,非常喜欢这个精致的小板子。兼容arduino,留出了SPI接口和ADC口,非常适合做开发实验,板载FLASH,MAX232,给调试及储存提供很大的方便。开发起来很好玩。使用很愉快。这次开发使用这个板子SPI接口用来驱动彩屏,ADC接口负责采样波形。 这个项目本来是给公司做的假人打击力度测试器的,后来试着做示波器,做出来了。虽然好多地方需要优化,但是的确挺好用,而且界面的所有代码都是自己写的。很接地气的东西。 先上图吧 因为刷新问题图像可能抖动,大家别介意哇。 这时候我贴上核心代码,完整工程就不贴了需要整理,如果大家需要的话可以留言,我整理一下完整工程。 AD采样函数 u16 ADCvictorious() { u16 ad; ADC_SoftwareStartConvCmd(ADC1, ENABLE); ad=ADC_GetConversionValue(ADC1); //768000采样率 return ad; } 开始采样代码 for(xx=0;xx<400;xx++) ADCdata[xx]=ADCvictorious(); 也就是一次性对ADC进行采样400次存到数组里。 这是函数图像的计算函数 这个函数算是核心了。 void display() { static u16 LASTMAX=0,LASTFST=20; u32 agePlace=0; u16 addata; u16 MAX=0,MIN=3000,VValt,LASTFSTX=1; u16 xx=1,yy=0; u8 XPlace[20],placeN=0,flat=0; u8 numb[10]; Lcd_SetRegion(1,1,228,239);//设定彩屏显示区域 LCD_RS_SET;//选中彩屏数据线 while(!(ADCdata[xx]>LASTFST-10)) { xx++; if(xx>50){LASTFST=20;xx=1;} } LASTFSTX=xx; for(;xx<239+LASTFSTX;xx++){ addata=ADCdata[xx]/18; //对采样值向彩屏坐标进行比例转换 for(yy=1;yy<229;yy++) { if(addata LCD_CS_CLR;//选中彩屏 //横线 坐标横线 if(yy==115) HIwrite_Dbyte_16bit(GRAY1); //将坐标横线数据发到彩屏 else HIwrite_Dbyte_16bit(0x0000);//这是不用描的点,一次性发送16位颜色数据。 } else { HIwrite_Dbyte_16bit(YELLOW); //这是实际的波形点。 } } if(ADCdata[xx]>MAX)MAX=ADCdata[xx];//计算最大值 if(ADCdata[xx] if((ADCdata[xx]>(LASTMAX-20))) { XPlace[placeN]=xx;placeN++; flat=10; } } else flat--; //竖线 坐标竖线 if(xx-LASTFSTX==120){for(yy=1;yy<229;yy++) { HIwrite_Dbyte_16bit(GRAY1); //坐标竖线绘制 } xx++;} LCD_CS_SET; } /***********************峰峰值计算****************************/ LASTFST=MAX; LASTMAX=MAX; VValt=(float)(MAX-MIN)*0.856;//计算峰峰值 numb[0]=(VValt/1000)%10+'0'; numb[1]='.'; numb[2]=(VValt/100)%10+'0'; numb[3]=(VValt/10)%10+'0'; numb[4]=(VValt)%10+'0'; numb[5]=' |