查看: 387|回复: 4
打印 上一主题 下一主题

STM32+LCD+ADC

[复制链接] qrcode

32

主题

63

帖子

163

积分

注册会员

Rank: 2

积分
163
楼主
跳转到指定楼层
发表于 2016-4-19 03:51 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

源代码:

void Adc_Init(void)
{
 RCC->APB2ENR|=1<<4;            //ʹÄÜPORTC¿ÚʱÖÓ
 GPIOC->CRL&=0XFFFFFFF0;          //PC0 anologÊäÈë
 RCC->APB2ENR|=1<<9;            //ADC1ʱÖÓʹÄÜ
 RCC->APB2RSTR|=1<<9;           //ADC1¸´Î»
 RCC->APB2RSTR&=~(1<<9);          //¸´Î»½áÊø
 RCC->CFGR&=~(3<<14);           //·ÖƵÒò×ÓÇåÁã
 RCC->CFGR|=2<<14;             //SYSCLK/DIV2=12M ADCʱÖÓÉèÖÃΪ12MHz£¬ADC×î´óʱÖÓ²»Äܳ¬¹ý14MHz
 ADC1->CR1&=0XF0FFFF;           //¹¤×÷ģʽÇåÁã
 ADC1->CR1|=0<<16;             //¶ÀÁ¢¹¤×÷ģʽ
 ADC1->CR1&=~(1<<8);            //·ÇɨÃèģʽ
 ADC1->CR2&=~(1<<1);            //µ¥´Îת»»Ä£Ê½
 //ADC1->CR2&=(1<<1);
 ADC1->CR2&=~(7<<17);
 ADC1->CR2|=7<<17;             //Èí¼þ¿ØÖÆת»»
 ADC1->CR2|=~(1<<20);             //±ØÐëʹÓÃÍⲿ´¥·¢(SWSTART) ±ØÐëʹÓÃÒ»¸öʼþÀ´´¥·¢
 ADC1->CR2&=~(1<<11);           //ÓÒ¶ÔÆë
 ADC1->SQR1&=~(0XF<<20);
 ADC1->SQR1|=0<<20;            //Ò»¸öת»»ÔÚ¹æÔòÐòÁÐÖÐÒ²¾ÍÊÇֻת»»¹æÔòÐòÁÐ1
 ADC1->SMPR1&=~7;//ͨµÀ10²ÉÑùʱ¼äÇå¿Õ
 ADC1->SMPR1|=7;//ͨµÀ10 239.5ÖÜÆÚ£¬Ìá¸ß²ÉÑùʱ¼ä¿ÉÒÔÌá¸ß¾«È·¶È
 ADC1->CR2|=1<<0;             //¿ªÆôADת»»Æ÷
 ADC1->CR2|=1<<3;             //ʹÄܸ´Î»Ð£×¼
 while(ADC1->CR2&1<<3);          //µÈ´ýУ׼½áÊø
 ADC1->CR2|=1<<2;             //¿ªÆôADУ׼
 while(ADC1->CR2&1<<2);          //µÈ´ýУ׼½áÊø
}
u16 Get_Adc(u8 ch)
{
 ADC1->SQR3&=0XFFFFFFE0;          //¹æÔòÐòÁÐ1ͨµÀch
 ADC1->SQR3|=ch;
 ADC1->CR2|=1<<22;             //Æô¶¯¹æÔòת»»Í¨µÀ
 while(!(ADC1->SR&(1<<1)));         //µÈ´ýת»»½áÊø
 return ADC1->DR;             //·µ»ØADCÖµ
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
 u32 temp_val=0;u8 t;
 for(t=0;t  return temp_val/times;
}
int main(void)
{
 u16 adcx,one;float temp;
 long int i;
 u8 cbuf[12];
 u8 dot,j;
 u8  x=0;
 u8 lcd_id[12];
 STM32_Clock_Init(9);      //72MHz
 uart_init(72,9600);
  delay(1000);
 LED_Init();
 KEY_Init();
 LCD_Init();
 Adc_Init();
 POINT_COLOR=RED;
 sprintf((char *)lcd_id,"LCD ID:%04X",lcddev.id);
 LCD_ShowString(60,50,200,16,16,"Mini STM32");
 LCD_ShowString(60,70,200,16,16,"ADC TEST");
 LCD_ShowString(60,90,200,16,16,"mailto:ATOM@ALIENTEK");
 LCD_ShowString(60,110,200,16,16,"2014/3/9");
 POINT_COLOR=BLUE;
 LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");
 LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");
 while(1)
 {
    adcx=Get_Adc_Average(ADC_CH10,10);
  LCD_Show2Num(156,130,adcx,4,16,0);
  temp=((float)(adcx))*(3.3/4096.0);
  sprintf(cbuf,"%.3lf",temp);
     for(i=0;i<12;i++)
     {
      j=cbuf;
      if(j==0)
       break; 
     }
     dot=i-6;
    
     for(i=dot;i<6;i++)
     {
         cbuf=cbuf[i+1];
     }
    
  LCD_ShowString(156,150,200,16,16,cbuf);
  delay_ms(250);
  //for(i=0;i<3000000;i++);
 }
}


 效果图:

 

 

本帖子中包含更多资源

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

x
回复

使用道具 举报

0

主题

74

帖子

8

积分

新手上路

Rank: 1

积分
8
沙发
发表于 2016-4-19 08:07 PM | 只看该作者
喔,只有代码哇
回复 支持 反对

使用道具 举报

0

主题

81

帖子

20

积分

新手上路

Rank: 1

积分
20
板凳
发表于 2016-4-20 08:08 AM | 只看该作者
还要什么啊?原理图吗?
回复 支持 反对

使用道具 举报

21

主题

288

帖子

437

积分

中级会员

Rank: 3Rank: 3

积分
437
地板
发表于 2016-4-20 08:13 AM | 只看该作者

原理图附上

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

0

主题

75

帖子

12

积分

新手上路

Rank: 1

积分
12
5#
发表于 2016-5-3 11:15 AM | 只看该作者
注释很强!
回复 支持 反对

使用道具 举报

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

本版积分规则

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