谁能给我分析一下这个程序?越详细越好!先声明一下,我也没有这个程序的电路图!谢谢各位了!!
/*********************************包含头文件********************************/
#include <reg51.h>
#define lxx unsigned char
#define lxd unsigned int
sbit cs1=P3^0;
sbit cs2=P3^1;
sbit wr=P3^2;
sbit wmq=P2^0;
/*******************************共阳LED段码表*******************************/
lxx code dm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,},
code wx[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xf7,};
/*********************************端口定义**********************************/
sbit sj=P3^3; //数据传输线接单片机的相应的引脚
/*********************************定义全局变量******************************/
unsigned char wdd=0; //临时变量低位
unsigned char wdg=0; //临时变量高位
float wd; //温度值
unsigned char i=0;
lxx haomiao;//毫秒
bit wmqs;//蜂鸣器状态控制位
lxx bjwd;//报警温度
lxx wd2;
/****************************************************************************
函数功能:延时子程序
入口参数:k
出口参数:
****************************************************************************/
void ys(unsigned int k)
{
while(k>0)k--;
}
/****************************************************************************
函数功能:数码管扫描延时子程序
入口参数:
出口参数:
****************************************************************************/
void ys1(void)
{
int k;
for(k=0;k<200;k++);
}
/****************************************************************************
函数功能:数码管显示子程序
入口参数:k
出口参数:
****************************************************************************/
void xs(int wd)
{
P0=dm[wd%10];wr=0;cs1=0;wr=1;cs1=1;
P0=wx[0];wr=0;cs2=0;wr=1;cs2=1;
ys1();
P0=255;wr=0;cs2=0;wr=1;cs2=1;
P0=dm[wd%100/10];wr=0;cs1=0;wr=1;cs1=1;
P0=wx[1];wr=0;cs2=0;wr=1;cs2=1;
ys1();
P0=255;wr=0;cs2=0;wr=1;cs2=1;
P0=dm[wd%1000/100];wr=0;cs1=0;wr=1;cs1=1;
P0=wx[2];wr=0;cs2=0;wr=1;cs2=1;
ys1();
P0=255;wr=0;cs2=0;wr=1;cs2=1;
P0=dm[wd%10000/1000];wr=0;cs1=0;wr=1;cs1=1;
P0=wx[3];wr=0;cs2=0;wr=1;cs2=1;
ys1();
P0=255;wr=0;cs2=0;wr=1;cs2=1;
}
/****************************************************************************
函数功能:DS18B20初始化子程序
入口参数:
出口参数:
****************************************************************************/
void csh(void)
{
sj=1;
ys(5);
sj=0;
ys(100);
sj=1;
ys(15);
}
void xie(lxx zls)
{
for(i=0;i<8;i++)
{
sj=0;
sj=zls&0x01;
ys(10);
sj=1;
zls>>=1;
ys(5);
}
}
lxx du(void)
{
lxx dus;
for(i=0;i<8;i++)
{
sj=1;
ys(15);
sj=0;
dus>>=1;
sj=1;
if(sj)dus|=0x80;
ys(5);
}
return(dus);
}
void ds18b20(void)
{
csh();
xie(0xcc);
xie(0x44);
ys(50);
csh();
xie(0xcc);
xie(0xbe);
wdd=du();
wdg=du();
wd=((wdg*256)+wdd)*0.0625;
}
/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void main()
{
TMOD=0x01;
TH0=15535/256;
TL0=15535%256;
TR0=1;
IE=0X82;
wmq=wmqs=0;
while(1)
{
ds18b20();
xs(wd);
bjwd=20;
wd2=wd;//wd2为温度的暂存变量 作用位减少数码管乱码的频率
}
}
void T0_zd()interrupt 1
{
TH0=15535/256;
TL0=15535%256;
if(bjwd<=wd2){wmqs=1;}else{wmqs=0;wmq=0;}
if(wmqs==1)
{
haomiao++;
if(haomiao>19){haomiao=0;}
if(haomiao>=10)wmq=0;else wmq=1;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
建议楼主研究好时序图 再来看这段程序
一周热门 更多>