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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

急需幫助!!!求大神看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:56123 發表于 2013-10-30 19:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是一段仿真電子血壓計的程序,但是仿真和程序都沒有報錯,但是數碼管卻顯示不出數據來,想知道是不是程序的問題急求幫助
#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;
}
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1 發表于 2013-11-23 20:00 | 只看該作者
如果是仿真都沒有出現問題 很可能問題出現在硬件方面
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 福利视频网站 | 激情在线视频 | 国产一区成人 | 国产一区二区精品在线 | 国产区在线观看 | av在线免费观看不卡 | 在线亚洲人成电影网站色www | 亚洲中字在线 | 日韩在线不卡视频 | 国产亚洲精品久久午夜玫瑰园 | 国产一二三区精品视频 | 国产欧美视频一区二区 | 欧美成人精品一区二区三区 | 精品一区二区av | 香蕉91| 91麻豆精品国产91久久久更新资源速度超快 | 一区二区三区免费看 | 国产午夜精品一区二区三区嫩草 | 亚洲视频在线看 | 国产亚洲人成a在线v网站 | 日韩精品一区二区在线观看 | 久久亚洲一区二区三区四区 | 国产高清精品一区二区三区 | 久久亚洲国产 | 久久久激情视频 | 不卡视频一区 | 欧美999| 久久久久免费精品国产小说色大师 | 91精品国产综合久久婷婷香蕉 | 91在线免费观看 | 亚洲欧美一区二区在线观看 | 国产成人精品一区二区三 | 精品久久久久久久人人人人传媒 | 欧美v在线观看 | 久草热在线| 天天插天天操 | 欧美激情一区二区 | 亚洲精品久久久一区二区三区 | 成人免费一区二区三区视频网站 | japan21xxxxhd美女 日本欧美国产在线 | 日本欧美国产 |