標(biāo)題:
心電波形顯示,可自由設(shè)置采樣頻率幅度
[打印本頁]
作者:
dongbaoding
時間:
2018-4-2 21:49
標(biāo)題:
心電波形顯示,可自由設(shè)置采樣頻率幅度
用了大概一個月的時間編寫出來的,希望大家多提建議
單片機(jī)源程序如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
#include "key.h"
#include "stm32f10x_it.h"
#include "stm32f10x.h"
#include "timer.h"
u16 j = 0;
float temp;
float temp1;
//ALIENTEK Mini STM32開發(fā)板范例代碼15
//ADC實(shí)驗(yàn)
//加入程序指示用外部中斷來控制按鍵
//加入程序指示燈,看看程序執(zhí)行到哪一步。
void nvic_init(void);
void rcc_init(void);
void gpio_init(void);
void clear_point(u16 hang)
{
u8 index_clear_lie = 0;
POINT_COLOR = DARKBLUE;
for(index_clear_lie = 0;index_clear_lie <201;index_clear_lie++)
{
lcd_huadian(hang,index_clear_lie);
}
POINT_COLOR=RED;
}
int main(void)
{
SystemInit();
nvic_init();
rcc_init(); //外設(shè)時鐘配置
gpio_init();
set_io0();
delay_init(); //延時函數(shù)初始化
EXTIX_Init(); //外部中斷初始化
uart_init(9600); //串口初始化為9600
LED_Init(); //初始化與LED連接的硬件接口
LCD_Init();
Adc_Init();
set_background(); //初始化背景
LED0=!LED0;
delay_ms(250);
// LED1=!LED1;
// delay_ms(1000);
time_init(); //定時器配置,測頻率用的二個定時器
time_enable(); //同步開始計(jì)數(shù)
get_value();
vpp = get_vpp();
//LED1=0;
while(1)
{
for(j=bndex;j<bndex+250;j=j+1)
{
// LED1=!LED1;
temp = a[j] * 3300 / 4096 * 25 /vcc_div;
temp1 = a[j + 1] * 3300 / 4096 * 25 / vcc_div;
clear_point(j-bndex);
if(temp>200)
{
temp=200;
}
if(temp<0)
{
temp=0;
}
if(temp1>200)
{
temp1=200;
}
if(temp1<0)
{
temp1=0;
}
lcd_huadian(j-bndex,temp);
lcd_huaxian(j-bndex,temp,j-bndex+1,temp1);
hua_wang();
}
LCD_ShowxNum(144,224,vpp,5,16,0);
get_value();
vpp = get_vpp();
}
}
//ADC初始化
//POINT_COLOR=RED;//設(shè)置字體為紅色
// 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,"ATOM@ALIENTEK");
//LCD_ShowString(60,110,200,16,16,"2014/3/9");
////顯示提示信息
//POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
//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_Channel_1,10);
//LCD_ShowxNum(156,130,adcx,4,16,0);//顯示ADC的值
//temp=(float)adcx*(3.3/4096); //
//adcx=temp;
//LCD_ShowxNum(156,150,adcx,1,16,0);//顯示電壓值
//temp-=adcx;
//temp*=1000;
//LCD_ShowxNum(172,150,temp,3,16,0X80);
//LED0=!LED0;
//delay_ms(250);
//}
void gpio_init(void)
{
GPIO_InitTypeDef GPIO_InitTypeStruct;
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //外部時鐘的,用來測頻率的,
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitTypeStruct);
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_1;
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //adc輸入引腳
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
// GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_15;
// GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //外部中斷的io配置
// GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPU;
// GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
//
//
//
// GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_5 ;
// GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //外部中斷的io配置
// GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPU;
// GPIO_Init(GPIOC, &GPIO_InitTypeStruct);
//
//
// GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_0;
// GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; //外部中斷的io配置
// GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_IPD;
// GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_8; //定時器1觸發(fā)ad轉(zhuǎn)換的輸出的那個口
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; // S3
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; // S4
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_5;
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; // S5
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_6;
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; // S6
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
GPIO_InitTypeStruct.GPIO_Pin = GPIO_Pin_7;
GPIO_InitTypeStruct.GPIO_Speed = GPIO_Speed_50MHz; // S7
GPIO_InitTypeStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitTypeStruct);
}
void nvic_init(void)
{
NVIC_InitTypeDef NVIC_InitTypeStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority =2;
NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitTypeStruct);
NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitTypeStruct);
NVIC_InitTypeStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitTypeStruct);
NVIC_InitTypeStruct.NVIC_IRQChannel = TIM2_IRQn; //配置中斷優(yōu)先級
NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 2;
NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitTypeStruct);
NVIC_InitTypeStruct.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitTypeStruct.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitTypeStruct.NVIC_IRQChannelSubPriority = 3;
NVIC_InitTypeStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitTypeStruct);
}
void rcc_init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
}
復(fù)制代碼
所有資料51hei提供下載:
ADC轉(zhuǎn)osc.rar
(372.88 KB, 下載次數(shù): 28)
2018-4-3 03:26 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1