打印
[活动专区]

【赛元95F】三,ADC及画点

[复制链接]
463|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
由于本人这次任务是示波器,所以ADC转换及画点少不了。
ADC先用查询,等差不多了再优化。
先ADC转换然后再把转换的值存到两个数组中,这样我可以显示完第一个马上显示第二个,这样做好像不太好。等以后调整。
void ADC_Test(void)
{
        unsigned char i;

        ADC_Init(AIN15);
                over=0;
        for(i=0;i<160;i++)
        {
                ADCCON |= 0X40;   //¿ªÊ¼ADCת»»
                while(!AdcFlag);                                  //µÈ´ý ADCת»»Íê³É;
                AdcFlag = 0;
                ADCValue = (ADCVH<<4)+(ADCVL>>4);
                displaymiddle[i]=ADCValue;
        }
        for(i=0;i<160;i++)
        {
          display[i] = (displaymiddle[i]*128)/4096;       
        }
       
       
        for(i=0;i<160;i++)
        {
                ADCCON |= 0X40;   //¿ªÊ¼ADCת»»
                while(!AdcFlag);                                  //µÈ´ý ADCת»»Íê³É;
                AdcFlag = 0;
                ADCValue = (ADCVH<<4)+(ADCVL>>4);
                displaymiddle2[i]=ADCValue;
        }
        for(i=0;i<160;i++)
        {
          display2[i] = (displaymiddle2[i]*128)/4096;       
        }
       
        over=1;
}
然后在主函数中把这些值转成能显示的范围内,我的屏是160*128,我先最大幅度显示:
void main(void)
{
        unsigned char i;

        GPIO_Init();
              Lcd_Init();
              LCD_Clear(BLUE); //ÇåÆÁ
              while(1)
        {
//                for(i=0;i<2;i++)
//                {
//                        //LEDS=(1<<i);
//                        P00=1;
//                                                                              delay();
//                                                                              P00=0;
//                                                                                                delay();       
//                }
                                                                           
                                              //LCD_Clear(BLUE); //ÇåÆÁ
                                              ADC_Test();
                                              if(over)
                                                                {
                                                                        for(i=0;i<160;i++)
                                                                        LCD_DrawPoint(display[i]);
                                                                        POINT_COLOR = BLUE;
                                                                        for(i=0;i<160;i++)
                                                                        LCD_DrawPoint(display[i],i);
                                                                        POINT_COLOR = WHITE;
                                                                        for(i=0;i<160;i++)
                                                                  LCD_DrawPoint(display2[i],i);
                                                                        POINT_COLOR = BLUE;
                                                                        for(i=0;i<160;i++)
                                                                  LCD_DrawPoint(display2[i],i);
                                                                        POINT_COLOR = WHITE;
                                                                       
                                                                }                                                                       
                                                               
        }


}
运行效果如下:
我直接把ADC输入插到3.3时在最上边显示一条线,下图为我什么也没插(不接地也不接VCC时的显示),可见还是有一点电压的。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6963

帖子

68

粉丝