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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

急求幫助,一段關于電子血壓計的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:56123 發表于 2013-10-30 19:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 zzzyz 于 2013-10-30 19:48 編輯

這是一段仿真電子血壓計的程序,但是仿真和程序都沒有報錯,但是數碼管卻顯示不出數據來,急求幫助
#include <reg52.h>
#include <absacc.h>
#define  DAC_1    XBYTE[0x2000]
#define  DAC_2    XBYTE[0x4000]  
#define  ADC_0    XBYTE[0x6000]
#define  ADC_1    XBYTE[0x6001]
#define  ADC_2    XBYTE[0x6002]
#define  ADC_3    XBYTE[0x6003]
#define  ADC_4    XBYTE[0x6004]
#define  ADC_5    XBYTE[0x6005]
#define  ADC_6    XBYTE[0x6006]
#define  ADC_7    XBYTE[0x6007]
unsigned char        dspbuf[4]={0xef,0xef,0xef,0xef},sel=0,key_sta=0,key_num;
unsigned int         adcount=0;
sbit D_SER= P1^0;
sbit D_SRCLK= P1^1;
sbit D_RCLK= P1^2;
sbit KEY1= P3^4;
sbit KEY2= P3^5;//定時器初始化:
void init_timer0(void)
  {
  TMOD =0X22;         //定時器0以方式2(自動重新裝載8位計數器)自動計數
  TL0 = 0X06;
  TH0 = 0X06;                 //至初始值為6,每0.25ms進入一次中斷
  TL1 = 0Xe8;
  TH1 = 0Xe8;
  TR0 = 1;
  TR1 = 1;
  ET0 = 1;
}
//中斷設置:
void init_special_interrupts(void)
  {  
  EX0 = 0;
  ET0 = 1;
  EX1 = 0;
  ET1 = 0;
  ES  = 1;
  EA  = 1;
  PT0 = 0;
  PX1 = 1;
PS  = 0;
SCON=0x50;   //串行口方式1工作
}
//數碼管顯示:
void dsptask()
  {
  unsigned char i;
  unsigned char a,b;
  switch(sel)
   {
   case 0: a=0x01;  break;
   case 1: a=0x02;  break;
   case 2: a=0x04;  break;
   default: a=0x08;
   }
for(b=0x80,i=0;i<8;i++)
    {
    if(a&b)  D_SER=1;
    else     D_SER=0;
    D_SRCLK=0;
    D_SRCLK=1;
    D_SRCLK=0;
    b=b>>1; b=b&0x7f;
    }
  a=dspbuf[sel];
  key_num=sel;
  sel++;
  if(sel>=4) sel=0;
  for(b=0x80,i=0;i<8;i++)
    {
    if(a&b)  D_SER=1;
    else     D_SER=0;
    D_SRCLK=0;
    D_SRCLK=1;
    D_SRCLK=0;
    b=b>>1;  b=b&0x7fff;
    }
  D_RCLK=0;
  D_RCLK=1;
  D_RCLK=0;
  }
//鍵盤掃描:                        //鍵盤值為1~8
void key_service()
  {
  if(key_sta&0x01) return;             // key_sta.0=1
   if(KEY2)
   {
    key_num=key_num+1;                    
key_sta=key_sta|0x01;              // 置key_sta.0=1
}
   else if(KEY1)
       {
       key_num=key_num+5;   
          key_sta=key_sta|0x01;        // 置key_sta.0=1
       }
  }//定時器0中斷處理:
void timer_isr() interrupt 1  {
  EA=0;
  adcount++;                        //計數,便于放氣速度設置
  key_service();                      //鍵盤掃描
  EA=1;
  }
//掃描字顯示轉化:
fdisp(unsigned char n,unsigned char m)      //將需要顯示的數轉化成相應的顯示碼
  {
  char  c;
   switch(n)
    {
    case 0:  c=0x11;  break;
    case 1:  c=0x7d;  break;
    case 2:  c=0x23;  break;
    case 3:  c=0x29;  break;
    case 4:  c=0x4d;  break;
    case 5:  c=0x89;  break;
    case 6:  c=0x81;  break;
    case 7:  c=0x3d;  break;
    case 8:  c=0x01;  break;
    default: c=0x09;
    }
   dspbuf[m]=c;
  }
//主函數:
void main(void)
{
float max=0,min=0,minus=0,mmax=0,om=0;
int os=0,od=0,os0=0,os1=0,os2=0,od0=0,od1=0,od2=0;
unsigned char t,i,flag=0,high=0,hhigh=0,ave=0;
init_timer0();                  //初始化定時器0
init_special_interrupts();      //設置中斷
for(i=0;i<4;i++){fdisp(0,i);}
dsptask();
for(;;)
    {
  if(key_num==1)                      //開始放氣
  {
   key_sta=key_sta&0xfe;           // 置key_sta.0=0
   t=ADC_0;        
   if(t>max) max=t;
   else if(t<min) min=t;   
   if(adcount>199)
   {
    adcount=0;     
    DAC_1=0xf0;             //由D/A輸出來控制放氣速度
    if(min!=0&&max!=0)  {minus=max-min;if(minus>mmax) {mmax=minus;ave=min;}}
   }
  }                                 //求出振蕩波峰峰值最大時平均壓對應的電壓值
  else if(key_num==2)                 //停止放氣,求出所需數值并顯示
  {
   key_sta=key_sta&0xfe;
   if(adcount>199) adcount=0;
   max=0;  
   min=0;
   minus=0;
   om=ave/(28*3.5*0.133);      //常數28為放大倍數,根據硬件的實際情況可有所調整
   os=om*0.8;
   od=om*0.5;                  //根據固定比率法求出收縮壓和舒張壓,單位為mmHg
   if(os>140||od>90) high=1;      
   if(os>160||od>100){high=0;hhigh=1;} //收縮壓大于160mmHg為超高血壓,大于120mmHg為高血壓
   os2=os/100;
   os=os%100;
   os1=os/10;
   os0=os%10;
   od2=od/100;
   od=od%100;
   od1=od/10;
   od0=os%10;
   do{
    if(flag=0&&adcount>199)      //顯示收縮壓
    {
     adcount=0;
     flag=1;
     fdisp(os0,0);
     fdisp(os1,1);
     fdisp(os2,2);
     fdisp(0,3);
     dsptask();
    }
    else if(flag=1&&adcount>199)
    {
     adcount=0;
     flag=0;
     fdisp(od0,0);
     fdisp(od1,1);
     fdisp(od2,2);
     fdisp(0,3);
     dsptask();                   //顯示舒張壓
     if(adcount>199!=key_num!=3)
     {
      if(high==1)
      {
       fdisp(1,0);
       fdisp(0,1);
       fdisp(0,2);
       fdisp(0,3);
       dsptask();      
      }                   //顯示高血壓——1
      else if(hhigh==1)
      {
       fdisp(2,0);
       fdisp(0,1);
       fdisp(0,2);
       fdisp(0,3);
       dsptask();      
      }                     //顯示超高血壓——2
      else
      {
       for(i=0;i<4;i++) fdisp(0,i);
       dsptask();      
      }                     //顯示血壓正常——0
     }
    }
   }while(key_num!=3);
  }
  else if(key_num==3)                       //復位
   {
   key_sta=key_sta&0xfe;           // 置key_sta.0=0
   for(i=0;i<4;i++){fdisp(0,i);}
   dsptask();
   high=0;
   hhigh=0;
   max=0,min=0,minus=0,mmax=0,om=0;
   os=0,od=0,os0=os1=os2=0,od0=od1=od2=0;
   flag=0;
   if(adcount>199) adcount=0;
  }
  else key_sta=key_sta&0xfe;           // 置key_sta.0=0;
}
}

評分

參與人數 1黑幣 +5 收起 理由
初心不忘~! + 5 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:110225 發表于 2016-4-13 16:32 | 只看該作者
硬件怎么弄求助
回復

使用道具 舉報

板凳
ID:374948 發表于 2019-9-11 15:48 | 只看該作者
程序是不是有問題啊,min最小值,你怎么得來的
回復

使用道具 舉報

地板
ID:438476 發表于 2020-4-6 00:17 | 只看該作者
請問下問題解決了嗎?
回復

使用道具 舉報

5#
ID:570093 發表于 2020-4-8 13:32 | 只看該作者
請問下問題解決了嗎?順便可以分享下電路圖不?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人网站国产 | 午夜成人在线视频 | 成人欧美一区二区三区黑人孕妇 | 午夜精品久久久久久久久久久久久 | 精品国产欧美日韩不卡在线观看 | 一本一道久久a久久精品蜜桃 | 亚洲国产精品久久久久婷婷老年 | 国产精品无 | 成人免费视频网站在线观看 | 午夜一区二区三区在线观看 | 色天天综合 | 中文精品久久 | 欧美成视频 | 日本a在线 | 亚洲精品乱码久久久久久按摩 | 国产精品91久久久久久 | 日韩久久成人 | 免费精品久久久久久中文字幕 | 国产一区在线看 | 午夜精品在线观看 | 视频在线一区二区 | 日韩精品在线一区 | 国产99久久精品一区二区永久免费 | 欧洲一级黄 | 一级黄色短片 | 国内毛片毛片毛片毛片 | 国产高清免费在线 | 日本精品一区二区 | 久久久久久网 | 成人精品一区二区 | 精品福利视频一区二区三区 | 欧美一级在线免费 | 亚洲一区二区免费 | 日韩欧美三区 | 男女网站视频 | 免费成人高清 | 国内精品久久久久 | 国产在线观看一区二区 | 亚洲精品在线视频 | 中文字幕 国产精品 | 99re在线视频观看 |