C51程序求助。。。
程序如下:
“#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define ui unsigned int
#define uc unsigned char
sbit aa=P1^3;//启动测温
sbit date=P1^2;//TN9数据接收
sbit huanjing=P1^0;//环境温度按键定义
sbit mubiao=P1^1;//目标温度按键定义
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//数码管形的数组表
uc ge,shi,bai,qian,chewen;//用于显示的变量定义(全局变量)
bit bdata ff,pp;//测温启动的位定义
uc item,msb,lsb,sum,cr,temp,m;//用于记录温度数据的变量定义(全局变量)
ui wendu;//存储温度的变量定义
void delay(ui k)//延时函数
{
uc i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
void xianshi()//显示函数
{
ge=10;
shi=wendu%10;
bai=wendu%100/10;
qian=wendu/100;
P2=0x08;
P0=tab[qian];
delay(5);
P2=0x04;
P0=tab[bai];
delay(5);
P2=0x02;
P0=tab[shi];
delay(5);
P2=0x01;
P0=tab[ge];
delay(5);
}
void ex0() interrupt 0//外部中断读取TN9数据
{
if(ff!=1)
{ pp=data; //提取P1^3这个位的数据,TN9数据口
temp=temp+pp;//把这个位数据存到temp这个变量里
m++;//用这个变量记录存储的是第几个数据
if((m!=8)&&(m!=16)&&(m!=24)&&(m!=32)&&(m!=40))//8个位为一组数据(一共5组数据)
{
temp=_crol_(temp,1);//(不够8位就把高位向前移一位,够8位就不向前移位了)
}
else if(m==8)//第一组数据接收完毕
{
item=temp;//把第一组数据存在item(此帧代表环境温度或目标温度)这个变量里
temp=0;
}
else if(m==16)//第二组数据接收完毕
{
msb=temp;//把第二组数据存在msb(高八位数据)这个变量里
temp=0;
}
else if(m==24)//第三组数据接收完毕
{
lsb=temp;//把第三组数据存在lsb(低八位数据)这个变量里
temp=0;
}
else if(m==32)//第四组数据接收完毕
{
sum=temp;//把第四组数据存在sum(验证码sun=msb+lsb+item)这个变量里
temp=0;
}
else if(m==40)//第五组数据接收完毕
{
cr=temp;//把第五组数据存在cr(结束标志)这个变量里
temp=0;
m=0;
if((cr==0x0d)&&(item==chewen))//检查结束标志和第一组数据是否为所要的环境或目标数据(是就计算出温度值)
{
ff=1;//停止测温
aa=1;//关闭测温
wendu=msb*256+lsb;//把高八位和低八位拼在一起
wendu=wendu/16-273.15;//温度计算公式(目标温度/环境温度=temp/16-273.15)
}
else//不是正确的数据
{
aa=0;//启动测温
}
}
}
}
void init()//初始化函数
{
delay(500);
EA=1;
IT0=1;
EX0=1;
P1=0xff;
chewen=0x66;
}
void main()
{
init();
while(1)
{
if(huanjing==0)
delay(200);
if(huanjing==0)
{
chewen=0x66;//环境温度数据的标志
aa=0;
ff=0;
while(huanjing==0);
}
if(mubiao==0)
delay(200);
if(mubiao==0)
{
chewen=0x4c;//目标温度数据的标志
aa=0;
ff=0;
while(mubiao==0);
}
xianshi();
}
}
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define ui unsigned int
#define uc unsigned char
sbit aa=P1^3;//启动测温
sbit date=P1^2;//TN9数据接收
sbit huanjing=P1^0;//环境温度按键定义
sbit mubiao=P1^1;//目标温度按键定义
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//数码管形的数组表
uc ge,shi,bai,qian,chewen;//用于显示的变量定义(全局变量)
uc bdata ff,pp;//测温启动的位定义
uc item,msb,lsb,sum,cr,temp,m;//用于记录温度数据的变量定义(全局变量)
ui wendu;//存储温度的变量定义
void delay(ui k)//延时函数
{
uc i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
void xianshi()//显示函数
{
ge=10;
shi=wendu%10;
bai=wendu%100/10;
qian=wendu/100;
P2=0x08;
P0=tab[qian];
delay(5);
P2=0x04;
P0=tab[bai];
delay(5);
P2=0x02;
P0=tab[shi];
delay(5);
P2=0x01;
P0=tab[ge];
delay(5);
}
void ex0() interrupt 0//外部中断读取TN9数据
{
if(ff!=1)
{
pp=date; //提取P1^3这个位的数据,TN9数据口
temp=temp+pp;//把这个位数据存到temp这个变量里
m++;//用这个变量记录存储的是第几个数据
if((m!=8)&&(m!=16)&&(m!=24)&&(m!=32)&&(m!=40))//8个位为一组数据(一共5组数据)
{
temp=_crol_(temp,1);//(不够8位就把高位向前移一位,够8位就不向前移位了)
}
else if(m==8)//第一组数据接收完毕
{
item=temp;//把第一组数据存在item(此帧代表环境温度或目标温度)这个变量里
temp=0;
}
else if(m==16)//第二组数据接收完毕
{
msb=temp;//把第二组数据存在msb(高八位数据)这个变量里
temp=0;
}
else if(m==24)//第三组数据接收完毕
{
lsb=temp;//把第三组数据存在lsb(低八位数据)这个变量里
temp=0;
}
else if(m==32)//第四组数据接收完毕
{
sum=temp;//把第四组数据存在sum(验证码sun=msb+lsb+item)这个变量里
temp=0;
}
else if(m==40)//第五组数据接收完毕
{
cr=temp;//把第五组数据存在cr(结束标志)这个变量里
temp=0;
m=0;
if((cr==0x0d)&&(item==chewen))//检查结束标志和第一组数据是否为所要的环境或目标数据(是就计算出温度值)
{
ff=1;//停止测温
aa=1;//关闭测温
wendu=msb*256+lsb;//把高八位和低八位拼在一起
wendu=wendu/16-273.15;//温度计算公式(目标温度/环境温度=temp/16-273.15)
}
else//不是正确的数据
{
aa=0;//启动测温
}
}
}
}
void init()//初始化函数
{
delay(500);
EA=1;
IT0=1;
EX0=1;
P1=0xff;
chewen=0x66;
}
void main()
{
init();
while(1)
{
if(huanjing==0)
delay(200);
if(huanjing==0)
{
chewen=0x66;//环境温度数据的标志
aa=0;
ff=0;
while(huanjing==0);
}
if(mubiao==0)
delay(200);
if(mubiao==0)
{
chewen=0x4c;//目标温度数据的标志
aa=0;
ff=0;
while(mubiao==0);
}
xianshi();
}
}
谢谢啦。希望有机会向你多学习