求助大神帮我看看程序哪里出错,该怎么修改!

2019-03-24 18:46发布

#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code[10]={0xc0,0xf9,0xa4,0xb0,// 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90};// 4, 5, 6, 7, 8, 9, off
uchar data set_data[3]={0x00,0x07,0x03};//预设 37.0 度
uchar data ad_data;//AD 转换结果
uchar data dis_buf[3]={0x00,0x00,0x00};// 显示缓冲区
uchar data bcd_buf[3]={0x00,0x00,0x00};//十进制 BCD 码转换存放区
uchar data TIMER0_NUM;
bit TIMER0_flag;
bit data set_flag=0;
sbit ALE=P2^4;
sbit OE=P2^5;
sbit START=P2^6;
sbit EOC=P2^7;
sbit P30=P3^0;
sbit select0=P3^7;
sbit select1=P3^6;
sbit select2=P3^5;
sbit K1=P2^0;
sbit K2=P2^1;
sbit K3=P2^2;
sbit K4=P2^3;
sbit bep=P3^3;
sbit SET_IND=P3^4;
sbit P17=P1^7;//小数点
uint data temp;
/**********************************************/
/*函数声明
/**********************************************/
void delay1ms(uchar t);
void adc(void);
void BCD(void);
void keyscan(void);
void send_str(void);
void beep(void);
void display(void);
/**********************************************/
/*按键蜂鸣函数
/**********************************************/
void beep2(void)
{
uchar data j,k;
for(j=26;j>0;j--)
{ for(k=254;k>0;k--);
bep=!bep;
}
bep=1;
}
/**********************************************/
/*蜂鸣报警
/**********************************************/
void beep(void)
{
uchar data j,k;
for(j=100;j>0;j--)
{
for(k=254;k>0;k--)
bep=0;
}
bep=1;//关蜂鸣器
}
/**********************************************/
/*延时 1ms 函数
/**********************************************/
void delay1ms(uchar t)
{
uchar j,k;
for(j=0;j<t;j++)
for(k=0;k<120;k++);
}
/**********************************************/
/*AD 转换函数
/**********************************************/
void adc(void)
{
ALE=1;
_nop_();
_nop_();
ALE=0;
START=1;
_nop_();
_nop_();
START=0;
_nop_();
_nop_();
_nop_();
_nop_();
while(EOC==0);//等待转换结束
OE=1;
ad_data=P0;//读入转换数据
OE=0;
}
/**********************************************/
/*十进制 BCD 码转换函数
/**********************************************/
void BCD(void)
{
bcd_buf[2]=(ad_data/51);//十位
temp=(ad_data%51);
temp=(temp*10);
bcd_buf[1]=(temp/51);//个位
temp=(temp%51);
temp=temp*10;
bcd_buf[0]=(temp/51);//小数位
if(bcd_buf[2]>set_data[2])//报警值检测
beep();
else if(bcd_buf[2]==set_data[2])
{
if(bcd_buf[1]>set_data[1])
beep();
else if(bcd_buf[1]==set_data[1])
{
if(bcd_buf[0]>set_data[0])
beep();
}
}
}
/**********************************************/
/*显示函数
/**********************************************/
void display(void)
{
if(set_flag) //设置键按下,则显示设置的数值
{
dis_buf[0]=set_data[0];
dis_buf[1]=set_data[1];
dis_buf[2]=set_data[2];
}
else
{
//否则显示温度值
dis_buf[0]=bcd_buf[0];
dis_buf[1]=bcd_buf[1];
dis_buf[2]=bcd_buf[2];
}
P1 = 0xff;// 先关闭所有数码管
P1 = dis_code[dis_buf[0]];// 小数显示代码传送到 P1 口
select2=1;select1=1;select0=0;// 位选
delay1ms(1); //延时 1ms
P1 = dis_code[dis_buf[1]];// 个位显示代码传送到 P1 口
select2=1;
select1=0;select0=1;
P17=0;
delay1ms(1);//延时 1ms
P1 = dis_code[dis_buf[2]];// 十位显示代码传送到 P1 口
select2=0;select1=1;select0=1;
delay1ms(1); //延时 1ms
}
/**********************************************/
/*串口发送一个字符函数
/**********************************************/
void send_str(void)
{
SBUF = ad_data; //串口发送 AD 转换温度值
while(TI==0);// 等待数据传送
TI = 0;// 清除数据传送标志
}
/**********************************************/
/*主函数
/**********************************************/
void main(void)
{
TMOD = 0x21;// 定时器1工作于方式2,8位自动重载模式, 用于产生波特率。
// 定时器 0 工作于方式 1,产生 1s 的 AD 间隔时间
TH0=15536/256;//T0 定时 50ms
TL0=15536%256;
TH1 = 0xe1;// 波特率 1000
TL1 = 0xe1;
SCON = 0x50;// 设定串行口工作方式 1
PCON = 0x00;// 波特率不倍增
TI=0;//清除发送中断标志
EA = 1; // 开总中断
ET0 = 1;//开 T0 中断
ET1=0;
TR1 = 1;// 启动 T1
TR0 = 1;//启动 T0
while(1)
{
display();
keyscan();
if(TIMER0_flag)
{
TIMER0_flag=0;
adc();
BCD();
send_str();
}
}
}
/**********************************************/
/*T0 中断服务程序
/*每秒钟 ADC 一次,串口发送一次
/**********************************************/
void timer0(void) interrupt 1
{
TH0=15536/256;//重装初值
TL0=15536%256;
TIMER0_NUM++;
if(TIMER0_NUM==20)
{
TIMER0_NUM=0;
TIMER0_flag=1;
}
}
#include<reg51.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit sclk=P2^2;
sbit rest=P2^3;
sbit din=P2^6;
sbit dout=P2^5;
sbit drdy=P2^4;
sbit no1=P3^7;//数码管十位选择
sbit no2=P3^6;//数码管个位选择
sbit no3=P3^3;//数码管小数选择
sbit f1=P3^0;//报警端
sbit bit7=ACC^7;
sbit bit0=ACC^0;
uchar h,l,n1,n2,n3,flag;//n1,n2,n3 分别为人体温度十位,个位,小数位
uint temper1,temper2;//AD7705 读数缓存
float a;//a 为常数,由实验得到
uchar code
tab[]={0x7D,0x0B,0x7A,0x34,0x77,0x3C,0x74,0x22,0x70,0xE3,0x6D,0x7C,0x6A,0xC8,0x67,0xF9,0x65,0x0F,0x62,0x08,0x5E,0xEl,0x5C,0x5F,0x59,0xC9,0x57,0x1D,0x54,0x5B,0x51,0x81,0x4F,0x3E,0x4C,0xEC,0x4A,0x89,0x48,0x17,
0x45,0x93,0x43,0x90,0x41,0x83,0x3F,0x6A,0x3D,0x45,0x3B,0x13,0x39,0x51,
0x37,0x87,0x35,0xB5,0x33,0xDA,0x31,0xF6,0x30,0x72,0x2E,0xE9,0x2D,0x5A,
0x2B,0xC4,0x2A,0x29,0x28,0xDE,0x27,0x8F,0x26,0x3C,0x24,0xE5,0x23,0x89}
;//热敏电阻对应温度表格 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。