ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:19.43KB ,
资源ID:8532836      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8532836.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(脉搏测试程序.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

脉搏测试程序.docx

1、脉搏测试程序#include msp430g2553.h#include lcd12864.h#define CPU_F (double)1000000)#define delay_us(x) _delay_cycles(long)(CPU_F*(double)x/1000000.0) / 调用delay_us(x); 延时 X us#define delay_ms(x) _delay_cycles(long)(CPU_F*(double)x/1000.0) / 调用delay_ms(2000);延时2000MSextern unsigned char Key_Flag;const unsig

2、ned char zuobiao;unsigned int ms_count;unsigned char dat,pulse_count=0,Pulse_Input;unsigned int ADC_max=0,ADC_result106=0;unsigned char i,Cap_counter=0;unsigned int Cap_first,Cap_last,cap_time;unsigned char cap_flag,disp7= , , , , , , ; /存放AD转换的电压值的字符数组disp6,定义格式为123.45Vunsigned char shuzu3= , , ; /

3、存放由整形数据转换的字符串unsigned char Pulse_Max3=0,0,0,Pulse_Min3=0,0,0;unsigned char geshu,y_location,x_location;float volt,freq;unsigned char num_flag=0,Pulse_mHigh,Pulse_mLow; /键盘输入数字计数/* 系统时钟初始化*/void OSCILLATOR_Init(void) if (CALBC1_1MHZ = 0xFF | CALDCO_1MHZ = 0xFF) while(1); / If calibration constants er

4、ased, trap CPU! BCSCTL1 = CALBC1_1MHZ; / Set range DCOCTL = CALDCO_1MHZ; / Set DCOCLK=1MHz / BCSCTL3 |= LFXT1S_2; / Set LFXT1 IFG1 &= OFIFG; / Clear OSCFault flag BCSCTL2 |=SELM_1 + DIVM_0; / Set MCLK=DCOCLK=1MHzvoid ADC_Init(void) ADC10CTL0 |= ADC10SHT_2 + ADC10ON ;/ADC10SHTx=10 采样保持时间设为16个ADC10CLK

5、周期,ADC10开启 ADC10CTL0 |= SREF_1 + REFON + REF2_5V; /选择内部参考源2.5V,打开基准源 ADC10CTL1 |= CONSEQ_0 + INCH_1+ SHS_2; / INCHx=0001选择输入通道 A1, / CONSEQ_0, 工作模式为单通道单次采样 ADC10AE0 |= 0x02; / 外部输入通道 A1(P1.1) 使能 /_bis_SR_register(GIE);void Draw_columnPointer(unsigned char x,unsigned char y) lcd_cs0; dat |= 0x01(y&0x

6、07); /更新要画点所在的页的字节数据 lcd_address(y/8+1),x); transfer_data_lcd(dat); lcd_cs1;void Draw_rowPointer(unsigned char x,unsigned char y) unsigned char dat=0; /画横向点的时候dat要清零 lcd_cs0; dat |= 0x01(y&0x07); /更新要画点所在的页的字节数据 /调用格式 lcd_address(uchar page,uchar column) /page: 18 column:1128 lcd_address(y/8+1),x);

7、transfer_data_lcd(dat); lcd_cs1;void number_to_char(float voltage)/分解成3位整数、2位小数的电压值显示 unsigned char j; /disp0 = (unsigned int)(voltage)/100; /从整数中分离出百位 /voltage -= disp0*100; disp0 = (unsigned int)(voltage)/10; /分离出十位 voltage -= disp0*10; disp1 = (unsigned int)voltage; /分离出个位 voltage -= disp1; disp3

8、 = (unsigned int)(voltage*10); /分离十分位 voltage -= disp3*0.1; disp4 = (unsigned int)(voltage*100);/分离百分位 disp0 |= 0x30; disp1 |= 0x30; disp2 = .; disp3 |= 0x30; disp4 |= 0x30; /将分离的各位整数转换成字符型数据 disp5 = V; disp6 = ; for(j=0;j2;j+) if(dispj = 0) /如果数组中存放在有效整数之前有无效的0,则将0用空格替换 dispj= ; else break; void in

9、ter_to_char(float num) unsigned char i; shuzu0 = (unsigned int)(num)/100; /从整数中分离出百位 num -= shuzu0*100; shuzu1 = (unsigned int)(num)/10; /分离出十位 num -= shuzu1*10; shuzu2 = (unsigned int)num; /分离出个位 shuzu0 |= 0x30; shuzu1 |= 0x30; shuzu2 |= 0x30; for(i=0;i2;i+) if(shuzui=0x30) shuzui=0x20; else break;

10、 void char_to_number(unsigned char *dp) unsigned char k; for(k=0;kEXIT); delay_ms(1000); while(1) Key_Scan(); /做键扫描 if(Key_Flag) /如果Key_Flag标志不为0,则有键按下 Key_Flag = 0; delay_ms(15); Key_Value(); switch(Key_Flag) case 1:Pulse_Maxnum_flag=1;break; case 2:Pulse_Maxnum_flag=2;break; case 3:Pulse_Maxnum_fl

11、ag=3;break; case 4:Pulse_Maxnum_flag=4;break; case 5:Pulse_Maxnum_flag=5;break; case 6:Pulse_Maxnum_flag=6;break; case 7:Pulse_Maxnum_flag=7;break; case 8:Pulse_Maxnum_flag=8;break; case 9:Pulse_Maxnum_flag=9;break; case 0:Pulse_Maxnum_flag=0;break; case F:finish_flag=1;break; default: break; if(num

12、_flag=3) num_flag=0; if(!finish_flag) /数据输入并显示 display_5x7(5,20+num_flag*7,Pulse_Maxnum_flag);num_flag+; else finish_flag=0; char_to_number(Pulse_Max);/输入字符转换成数字 Pulse_mHigh=Pulse_Input; num_flag=0; /输入数据结束,退出数据输入和显示循环 clear_screen(); display_string(3,8,A-输入脉搏上限); display_string(5,8,B-输入脉搏下限); displ

13、ay_string(7,8,C-脉搏图形显示); break; if(Key_Flag = B) /等待输入脉搏上限值 clear_screen(); display_string(1,1,最小脉搏次数:); display_string_57(8,71,F-EXIT); delay_ms(1000); while(1) Key_Scan(); /做键扫描 if(Key_Flag) /如果Key_Flag标志不为0,则有键按下 Key_Flag = 0; delay_ms(15); Key_Value(); switch(Key_Flag) case 1:Pulse_Minnum_flag=1

14、;break; case 2:Pulse_Minnum_flag=2;break; case 3:Pulse_Minnum_flag=3;break; case 4:Pulse_Minnum_flag=4;break; case 5:Pulse_Minnum_flag=5;break; case 6:Pulse_Minnum_flag=6;break; case 7:Pulse_Minnum_flag=7;break; case 8:Pulse_Minnum_flag=8;break; case 9:Pulse_Minnum_flag=9;break; case 0:Pulse_Minnum_

15、flag=0;break; case F:finish_flag=1;break; default: break; if(num_flag=3) num_flag=0; if(!finish_flag) /数据输入并显示 display_5x7(5,20+num_flag*7,Pulse_Minnum_flag);num_flag+; else finish_flag=0; char_to_number(Pulse_Min);/输入字符转换成数字 Pulse_mLow=Pulse_Input; num_flag=0; /输入数据结束,退出数据输入和显示循环 clear_screen(); di

16、splay_string(3,8,A-输入脉搏上限); display_string(5,8,B-输入脉搏下限); display_string(7,8,C-脉搏图形显示); break; if(Key_Flag = C) clear_screen(); display_12864(zuobiao); display_string_57(8,7,Vm); display_string_57(8,38, ); display_string_57(8,76,Pu); display_string_57(8,110,/s); _EINT(); /开总中断 #pragma vector=TIMER0_

17、A0_VECTOR /定时器Timer0中断_interrupt void Timer_A0_ISR(void) ADC10CTL0 |= ADC10SHT_2 + ADC10ON + ADC10IE;/ADC10SHTx=10 采样保持时间设为16个ADC10CLK周期,ADC10开启 ADC10CTL0 |= SREF_1 + REFON + REF2_5V; /选择内部参考源2.5V,打开基准源 /ADC10CTL0 |= SREF_1 + REFON; /选择内部参考源1.5V ADC10CTL0 |= ENC; / ADC10 enable set/将脉搏的电信号进行AD转换,并画出

18、脉搏波形#pragma vector=ADC10_VECTOR_interrupt void ADC10_ISR(void) ADC10CTL0 &= ENC; / ADC10 disabled ADC10CTL0 = 0; / ADC10, Vref disabled completely if(pulse_count 106) ADC_resultpulse_count = ADC10MEM; /每次采样结果送入数组 geshu = ADC_resultpulse_count*35/1023; y_location = 64-(18+geshu); x_location = 15+pulse_count; Draw_rowPointer(x_location,y_location); /扫描点送显 if(ADC_max Pulse_mHigh | (unsigned int)(freq)Pulse_mLow) P1OUT |= BIT2; else P1OUT &= BIT2; inter_to_char(freq); display_string_57(8,91,shuzu); /显示每分钟的脉搏次数 /else / freq=0; _EINT(); /开总中断 br

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1