久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7682|回復: 4
打印 上一主題 下一主題
收起左側

單片機脈搏測量儀制作 程序電路及仿真都有

[復制鏈接]
跳轉到指定樓層
樓主
基于avr單片機做的心率脈搏測量儀

(包含模擬部分的和單片機仿真)以及完整的測量程序代碼


下面是proteus仿真圖:




電路原理圖要用Multisim仿真軟件打開

下面是部分程序預覽(完整版本請下載附件)
  1. #include<avr/io.h>
  2. #include<util/delay.h>
  3. #include<avr/interrupt.h>
  4. #define uc unsigned char
  5. #define ui unsigned int
  6. volatile uc led[8]={2,4,8,16,1,32,128,64},number[10],no1,no2,no3,no4,t=1;
  7. volatile ui count=1000;
  8. volatile uc cnt=0;
  9. volatile ui mSec=0;
  10. volatile uc k=1,keyFlag=0,voice=0,alarm=1,flash=0;
  11. void calcnum(){//初始化數碼管參數,不用管
  12.          number[0]=led[0]+led[1]+led[2]+led[4]+led[5]+led[6];
  13.          number[1]=led[2]+led[5];
  14.          number[2]=led[0]+led[2]+led[3]+led[4]+led[6];
  15.          number[3]=led[0]+led[2]+led[3]+led[5]+led[6];
  16.          number[4]=led[1]+led[2]+led[3]+led[5];//+led[6];
  17.          number[5]=led[0]+led[1]+led[3]+led[5]+led[6];
  18.          number[6]=led[0]+led[1]+led[3]+led[4]+led[5]+led[6];
  19.          number[7]=led[0]+led[2]+led[5];
  20.          number[8]=255-led[7];
  21.          number[9]=number[8]-led[4];
  22. }
  23. void timer0_init(void)//初始化定時器,Timer0 1ms,Timer1 50ms,不用管
  24. {
  25.         TCCR0 = 0x00; //stop
  26.         TCNT0 = 0x06; //set count
  27.         TCCR0 = 0x03; //start timer

  28.         TCCR1B = 0x00; //stop
  29.         TCNT1H = 0xCF; //setup
  30. TCNT1L = 0x2C;
  31. OCR1AH = 0x30;
  32. OCR1AL = 0xD4;
  33. OCR1BH = 0x30;
  34. OCR1BL = 0xD4;
  35. ICR1H  = 0x30;
  36. ICR1L  = 0xD4;
  37. TCCR1A = 0x00;
  38. TCCR1B = 0x03; //start Timer
  39. }
  40. SIGNAL(SIG_OVERFLOW0)//定時器0溢出中斷,1ms一次
  41. {
  42. //以下為更新數碼管
  43.         if(t==1){
  44.                 t=2;
  45.                 PORTC=~no2;
  46.         }
  47.         else if(t==2){
  48.                 t=8;
  49.                 PORTC=~no3;
  50.         }
  51.         else if(t==8){
  52.                 t=16;
  53.                 PORTC=~no4;
  54.         }
  55.         else{
  56.                 t=1;
  57.                 PORTC=~no1;
  58.         }
  59.         PORTB&=0xe4;//0b11100100;
  60.         PORTB|=t;
  61.         no1=number[k];
  62.         no2=number[count/100%10];
  63.         no3=number[count/10%10];
  64.         no4=number[count%10];

  65. //以上為更新數碼管
  66.         mSec++;
  67.         if(keyFlag>0&&(mSec%2))keyFlag--;
  68.         if(voice)PORTA|=0x80;
  69.         else PORTA&=~0x80;
  70. //重置定時器
  71.         TCNT0 = 0x06; //reload counter value
  72.         TCCR0 = 0x03; //start timer
  73. }
  74. SIGNAL(SIG_OVERFLOW1)//定時器1溢出中斷,50ms一次
  75. {
  76. //如果為警報狀態則閃爍LED報警
  77.         if(alarm){
  78.                 if(flash)PORTA&=0xfe;
  79.                 else PORTA|=0x01;
  80.                 flash=1-flash;
  81.                 PORTA|=0x02;
  82.         }
  83.         else{
  84.                 flash=0;
  85.                 PORTA=0;
  86.         }
  87.         //重置定時器
  88.         TCNT1H = 0xCF; //reload counter high value
  89.         TCNT1L = 0x2C; //reload counter low value
  90.         TCCR1A = 0x00;
  91.         TCCR1B = 0x03; //start Timer
  92. }
  93. SIGNAL(SIG_INTERRUPT0){//中斷0,對應按鍵1
  94.         if(keyFlag)return;
  95.         voice=1-voice;
  96.         keyFlag=50;
  97. }
  98. SIGNAL(SIG_INTERRUPT1){//中斷1,對應按鍵2
  99.         if(keyFlag)return;
  100.         if(k==9){
  101.                 k=1;
  102.         }
  103.         else{
  104.                 k++;
  105.         }
  106.         cnt=0;
  107.         mSec=0;
  108.         keyFlag=50;
  109. }
  110. SIGNAL(SIG_INTERRUPT2){//外部中斷2,對應心跳
  111. cnt++;
  112. if(cnt==k){
  113. cli();
  114. count=60000/mSec*k;
  115. uc t=count;
  116. if(t<40||t>150){
  117. alarm=1;
  118. if(voice)voicealarm(t);//這里加了個參數t。
  119. }else alarm=0;
  120. mSec=0;
  121. cnt=0;
  122. sei();
  123. }
  124. }

  125. void voicealarm(uc t){//語音報警,未測試,50Khz
  126. uc addr=0x80;//地址,根據需要修改
  127. if(t<40)addr=0x81;//0x80為心律過高的提示音的地址,0x81為心律過低的地址。也可以改成別的地址。
  128. int i;
  129. PORTA&=~0x04;
  130. _delay_ms(50);
  131. PORTA|=0x04;
  132. for(i=7;i>=0;i--){
  133. if(addr&(1<<i))
  134. PORTA|=0x04;
  135. else
  136. PORTA&=~0x04;
  137. PORTA&=~0x08;
  138. _delay_us(10);
  139. PORTA|=0x08;
  140. _delay_us(10);
  141. }
  142. PORTA|=0x04;
  143. }

  144. int main(){
  145. //以下均為初始化
  146.         DDRA=0xff;
  147.         PORTA=0xfc;
  148.         DDRB=~0x04;
  149.         PORTB=0xff;
  150.         DDRC=0xff;
  151.         PORTC=0xff;
  152.         DDRD=0x00;
  153.         PORTD=0xff;
  154.         calcnum();
  155.         timer0_init();
  156.         MCUCR=0x0A;//0b00001010;
  157.         GICR=(1<<INT1)+(1<<INT0)+(1<<INT2);
  158.         GIFR=0;
  159.         TIMSK = 0x05; //timer interrupt sources
  160.         sei();

  161.         while(1);
  162. //                _delay_ms(1);        
  163. }
復制代碼

全部資料: 基于avr單片機的脈搏測量儀.rar (9.57 MB, 下載次數: 99)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:139366 發表于 2016-11-17 18:00 | 只看該作者
來一份源碼
回復

使用道具 舉報

板凳
ID:209113 發表于 2017-6-8 11:06 | 只看該作者
proteus上面的仿真數碼管的顯示根本不正確啊?是不是代碼有問題?
回復

使用道具 舉報

地板
ID:354879 發表于 2018-6-20 09:22 | 只看該作者
能給我私發一份嗎?qq1413315425,我靜候佳音
回復

使用道具 舉報

5#
ID:354879 發表于 2018-6-20 09:25 | 只看該作者
能線下聯系你嗎?我QQ1413315425
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 激情欧美一区二区三区中文字幕 | 一区在线观看视频 | 国产一区二区三区在线看 | 亚洲精品电影网在线观看 | 99在线免费观看视频 | 99精彩视频 | www.五月天婷婷.com | japan21xxxxhd美女 日本欧美国产在线 | 亚洲深夜福利 | 蜜桃av一区二区三区 | 成人在线国产 | 成人影视网 | 久视频在线 | 欧美aⅴ | 中文字幕精品视频 | 高清18麻豆 | 狠狠操狠狠干 | 午夜久久久 | 91av视频在线播放 | 成人精品网 | 日韩中字幕 | 日日夜夜精品免费视频 | 成人免费视频在线观看 | 国产伦精品一区二区三区精品视频 | 亚洲精品在线免费 | 欧美精品一区二区三区一线天视频 | 青青草一区二区 | 日韩欧美精品在线播放 | 四虎影视1304t | 中文字幕视频一区 | 国产精品一区二区久久 | 久久久久成人精品免费播放动漫 | 久久综合伊人 | 91视频电影| 免费的色网站 | 色婷婷综合久久久久中文一区二区 | 久久一热 | 亚洲精品一区二区三区免 | 97精品国产手机 | 国产精品亚洲一区二区三区在线 | 国产精品视频一 |