找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2520|回复: 0
收起左侧

心电波形显示,可自由设置采样频率幅度

[复制链接]
ID:301159 发表于 2018-4-2 21:49 | 显示全部楼层 |阅读模式
用了大概一个月的时间编写出来的,希望大家多提建议

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "key.h"
  8. #include "stm32f10x_it.h"
  9. #include "stm32f10x.h"
  10. #include "timer.h"




  11. u16 j = 0;
  12. float temp;
  13. float temp1;




  14. //ALIENTEK Mini STM32开发板范例代码15
  15. //ADC实验  
  16. //加入程序指示用外部中断来控制按键
  17. //加入程序指示灯,看看程序执行到哪一步。




  18. void nvic_init(void);
  19. void rcc_init(void);
  20. void gpio_init(void);
  21.   
  22. void clear_point(u16 hang)
  23. {
  24.         u8 index_clear_lie = 0;
  25.         POINT_COLOR = DARKBLUE;
  26.         for(index_clear_lie = 0;index_clear_lie <201;index_clear_lie++)
  27.         {               
  28.                 lcd_huadian(hang,index_clear_lie);
  29.         }       
  30.         POINT_COLOR=RED;       
  31. }
  32.          

  33.          
  34.          
  35. int main(void)
  36. {

  37.         SystemInit();
  38.         nvic_init();
  39.         rcc_init();                           //外设时钟配置
  40.         gpio_init();
  41.         set_io0();
  42.          
  43.         delay_init();                     //延时函数初始化         
  44.         EXTIX_Init();                //外部中断初始化

  45.         uart_init(9600);                 //串口初始化为9600
  46.         LED_Init();                                  //初始化与LED连接的硬件接口
  47.         LCD_Init();
  48.         Adc_Init();       
  49.         set_background();                  //初始化背景

  50.   LED0=!LED0;
  51.         delay_ms(250);
  52. //           LED1=!LED1;
  53. //                 delay_ms(1000);
  54.         time_init();                        //定时器配置,测频率用的二个定时器
  55.         time_enable();                        //同步开始计数
  56.         get_value();
  57.         vpp = get_vpp();
  58.          
  59.          
  60.         //LED1=0;  
  61.          
  62.                 while(1)
  63.         {       

  64.                         for(j=bndex;j<bndex+250;j=j+1)
  65.                         {
  66.                                
  67. //                                LED1=!LED1;
  68.         temp = a[j] * 3300 / 4096  *  25 /vcc_div;
  69.                                 temp1 = a[j + 1] * 3300 / 4096 * 25 / vcc_div;
  70.                                 clear_point(j-bndex);       
  71.                                 if(temp>200)
  72.                                 {
  73.                                         temp=200;       
  74.                                 }
  75.                                 if(temp<0)
  76.                                 {
  77.                                         temp=0;       
  78.                                 }
  79.                                 if(temp1>200)
  80.                                 {
  81.                                         temp1=200;       
  82.                                 }
  83.                                 if(temp1<0)
  84.                                 {
  85.                                         temp1=0;       
  86.                                 }
  87.                                 lcd_huadian(j-bndex,temp);                               
  88.                                 lcd_huaxian(j-bndex,temp,j-bndex+1,temp1);               
  89.                                 hua_wang();                 
  90.                         }
  91.                                        
  92.         LCD_ShowxNum(144,224,vpp,5,16,0);               
  93.                         get_value();
  94.                         vpp = get_vpp();       
  95.         }               



  96.        
  97. }

  98.          
  99.          


  100.          
  101.          
  102.                   //ADC初始化            
  103.         //POINT_COLOR=RED;//设置字体为红色
  104. //        LCD_ShowString(60,50,200,16,16,"Mini STM32");       
  105. //        LCD_ShowString(60,70,200,16,16,"ADC TEST");       
  106.         //LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
  107. //LCD_ShowString(60,110,200,16,16,"2014/3/9");       
  108.         ////显示提示信息
  109.         //POINT_COLOR=BLUE;//设置字体为蓝色
  110.         //LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");             
  111.         //LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");            
  112.         //while(1)
  113.         //{
  114.                 //adcx=Get_Adc_Average(ADC_Channel_1,10);
  115.                 //LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
  116.                 //temp=(float)adcx*(3.3/4096);    //
  117.                 //adcx=temp;
  118.                 //LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
  119.                 //temp-=adcx;
  120.                 //temp*=1000;
  121.                 //LCD_ShowxNum(172,150,temp,3,16,0X80);
  122.                 //LED0=!LED0;
  123.                 //delay_ms(250);       
  124.         //}                                                                                       
  125.          
  126.          



  127. void gpio_init(void)
  128. {
  129.         GPIO_InitTypeDef GPIO_InitTypeStruct;

  130.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_2;
  131.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //外部时钟的,用来测频率的,
  132.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  133.         GPIO_Init(GPIOD, &GPIO_InitTypeStruct);

  134.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_1;
  135.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                  //adc输入引脚
  136.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AIN;
  137.         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

  138. //        GPIO_InitTypeStruct.GPIO_Pin =  GPIO_Pin_15;
  139. //        GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                  //外部中断的io配置
  140. //        GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPU;
  141. //        GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
  142. //       
  143. //       
  144. //       
  145. //        GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_5 ;
  146. //        GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                  //外部中断的io配置
  147. //        GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPU;
  148. //        GPIO_Init(GPIOC, &GPIO_InitTypeStruct);
  149. //       
  150. //       


  151. //        GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_0;
  152. //        GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //外部中断的io配置
  153. //        GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPD;
  154. //        GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

  155.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_8;                                         //定时器1触发ad转换的输出的那个口
  156.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;
  157.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  158.         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);



  159.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_3;
  160.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 // S3
  161.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  162.         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

  163.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_4;
  164.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //        S4
  165.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  166.         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

  167.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_5;
  168.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //        S5
  169.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  170.         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

  171.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_6;
  172.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 //        S6
  173.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  174.         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);

  175.         GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_7;
  176.         GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;                                 // S7
  177.         GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  178.         GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
  179. }



  180.          

  181.          void nvic_init(void)
  182. {
  183.         NVIC_InitTypeDef    NVIC_InitTypeStruct;

  184.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  185.         NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI0_IRQn;
  186.         NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        0;
  187.         NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority =2;
  188.         NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
  189.         NVIC_Init(&NVIC_InitTypeStruct);                                 

  190.         NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI9_5_IRQn;
  191.         NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        0;
  192.         NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 1;
  193.         NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
  194.         NVIC_Init(&NVIC_InitTypeStruct);
  195.        
  196.        
  197.        
  198.   NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
  199.         NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        0;
  200.         NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 0;
  201.         NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
  202.         NVIC_Init(&NVIC_InitTypeStruct);
  203.        
  204.        


  205.         NVIC_InitTypeStruct.NVIC_IRQChannel = TIM2_IRQn;                     //配置中断优先级
  206.         NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        2;
  207.         NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 2;
  208.         NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
  209.         NVIC_Init(&NVIC_InitTypeStruct);

  210.         NVIC_InitTypeStruct.NVIC_IRQChannel = TIM3_IRQn;
  211.         NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority =        2;
  212.         NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 3;
  213.         NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
  214.         NVIC_Init(&NVIC_InitTypeStruct);
  215. }

  216. void rcc_init(void)
  217. {
  218.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  219.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  220.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  221.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

  222.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  223.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  224.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  225.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);
  226.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
  227. }
复制代码

所有资料51hei提供下载:
ADC转osc.rar (372.88 KB, 下载次数: 28)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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