|
请问各位大神们,我这Proteus仿真出错在哪,程序用的普中教程里面的程序但是仿真就一直这样
#include "reg52.h"
typedef unsigned int u16; //¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå
typedef unsigned char u8;
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
sbit DSPORT=P3^7;
void Delay1ms(uint );
uchar Ds18b20Init();
void Ds18b20WriteByte(uchar com);
uchar Ds18b20ReadByte();
void Ds18b20ChangTemp();
void Ds18b20ReadTempCom();
int Ds18b20ReadTemp();
#endif
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
char num=0;
u8 DisplayData[8];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void Delay1ms(uint y)
{
uint x;
for( ; y>0; y--)
{
for(x=110; x>0; x--);
}
}
uchar Ds18b20Init()
{
uchar i;
DSPORT = 0; //½«×ÜÏßÀ­µÍ480us~960us
i = 70;
while(i--);//ÑÓʱ642us
DSPORT = 1; //È»ºóÀ­¸ß×ÜÏߣ¬Èç¹ûDS18B20×ö³ö·´Ó¦»á½«ÔÚ15us~60usºó×ÜÏßÀ­µÍ
i = 0;
while(DSPORT) //µÈ´ýDS18B20À­µÍ×ÜÏß
{
Delay1ms(1);
i++;
if(i>5)//µÈ´ý>5MS
{
return 0;//³õʼ»¯Ê§°Ü
}
}
return 1;//³õʼ»¯³É¹¦
}
void Ds18b20WriteByte(uchar dat)
{
uint i, j;
for(j=0; j<8; j++)
{
DSPORT = 0; //ÿдÈëһλÊý¾Ý֮ǰÏÈ°Ñ×ÜÏßÀ­µÍ1us
i++;
DSPORT = dat & 0x01; //È»ºóдÈëÒ»¸öÊý¾Ý£¬´Ó×îµÍλ¿ªÊ¼
i=6;
while(i--); //ÑÓʱ68us£¬³ÖÐøʱ¼ä×îÉÙ60us
DSPORT = 1; //È»ºóÊÍ·Å×ÜÏߣ¬ÖÁÉÙ1us¸ø×ÜÏ߻ָ´Ê±¼ä²ÅÄܽÓ×ÅдÈëµÚ¶þ¸öÊýÖµ
dat >>= 1;
}
}
uchar Ds18b20ReadByte()
{
uchar byte, bi;
uint i, j;
for(j=8; j>0; j--)
{
DSPORT = 0;//ÏȽ«×ÜÏßÀ­µÍ1us
i++;
DSPORT = 1;//È»ºóÊÍ·Å×ÜÏß
i++;
i++;//ÑÓʱ6usµÈ´ýÊý¾ÝÎȶ¨
bi = DSPORT; //¶ÁÈ¡Êý¾Ý£¬´Ó×îµÍλ¿ªÊ¼¶ÁÈ¡
/*½«byte×óÒÆһλ£¬È»ºóÓëÉÏÓÒÒÆ7λºóµÄbi£¬×¢ÒâÒƶ¯Ö®ºóÒƵôÄÇλ²¹0¡£*/
byte = (byte >> 1) | (bi << 7);
i = 4; //¶ÁÈ¡ÍêÖ®ºóµÈ´ý48usÔÙ½Ó×ŶÁÈ¡ÏÂÒ»¸öÊý
while(i--);
}
return byte;
}
void Ds18b20ChangTemp()
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc); //Ìø¹ýROM²Ù×÷ÃüÁî
Ds18b20WriteByte(0x44); //ζÈת»»ÃüÁî
//Delay1ms(100); //µÈ´ýת»»³É¹¦£¬¶øÈç¹ûÄãÊÇһֱˢ×ŵĻ°£¬¾Í²»ÓÃÕâ¸öÑÓʱÁË
}
void Ds18b20ReadTempCom()
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc); //Ìø¹ýROM²Ù×÷ÃüÁî
Ds18b20WriteByte(0xbe); //·¢ËͶÁȡζÈÃüÁî
}
int Ds18b20ReadTemp()
{
int temp = 0;
uchar tmh, tml;
Ds18b20ChangTemp(); //ÏÈдÈëת»»ÃüÁî
Ds18b20ReadTempCom(); //È»ºóµÈ´ýת»»Íêºó·¢ËͶÁȡζÈÃüÁî
tml = Ds18b20ReadByte(); //¶ÁȡζÈÖµ¹²16룬ÏȶÁµÍ×Ö½Ú
tmh = Ds18b20ReadByte(); //ÔÙ¶Á¸ß×Ö½Ú
temp = tmh;
temp <<= 8;
temp |= tml;
return temp;
}
void delay(u16 i)
{
while(i--);
}
void datapros(int temp)
{
float tp;
if(temp< 0) //µ±Î¶ÈֵΪ¸ºÊý
{
DisplayData[0] = 0x40; // -
//ÒòΪ¶ÁÈ¡µÄζÈÊÇʵ¼ÊζȵIJ¹Â룬ËùÒÔ¼õ1£¬ÔÙÈ¡·´Çó³öÔ­Âë
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//ÁôÁ½¸öСÊýµã¾Í*100£¬+0.5ÊÇËÄÉáÎåÈ룬ÒòΪCÓïÑÔ¸¡µãÊýת»»ÎªÕûÐ͵Äʱºò°ÑСÊýµã
//ºóÃæµÄÊý×Ô¶¯È¥µô£¬²»¹ÜÊÇ·ñ´óÓÚ0.5£¬¶ø+0.5Ö®ºó´óÓÚ0.5µÄ¾ÍÊǽø1ÁË£¬Ð¡ÓÚ0.5µÄ¾Í
//Ëã¼ÓÉÏ0.5£¬»¹ÊÇÔÚСÊýµãºóÃæ¡£
}
else
{
DisplayData[0] = 0x00;
tp=temp;//ÒòΪÊý¾Ý´¦ÀíÓÐСÊýµãËùÒÔ½«Î¶ȸ³¸øÒ»¸ö¸¡µãÐͱäÁ¿
//Èç¹ûζÈÊÇÕýµÄÄÇô£¬ÄÇôÕýÊýµÄÔ­Âë¾ÍÊDz¹ÂëËü±¾Éí
temp=tp*0.0625*100+0.5;
//ÁôÁ½¸öСÊýµã¾Í*100£¬+0.5ÊÇËÄÉáÎåÈ룬ÒòΪCÓïÑÔ¸¡µãÊýת»»ÎªÕûÐ͵Äʱºò°ÑСÊýµã
//ºóÃæµÄÊý×Ô¶¯È¥µô£¬²»¹ÜÊÇ·ñ´óÓÚ0.5£¬¶ø+0.5Ö®ºó´óÓÚ0.5µÄ¾ÍÊǽø1ÁË£¬Ð¡ÓÚ0.5µÄ¾Í
//Ëã¼ÓÉÏ0.5£¬»¹ÊÇÔÚСÊýµãºóÃæ¡£
}
DisplayData[1] = smgduan[temp / 10000];
DisplayData[2] = smgduan[temp % 10000 / 1000];
DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;
DisplayData[4] = smgduan[temp % 100 / 10];
DisplayData[5] = smgduan[temp % 10];
}
void DigDisplay()
{
u8 i;
for(i=0;i<6;i++)
{
switch(i) //λѡ£¬Ñ¡ÔñµãÁÁµÄÊýÂë¹Ü£¬
{
case(0):
LSA=0;LSB=0;LSC=0; break;//ÏÔʾµÚ0λ
case(1):
LSA=1;LSB=0;LSC=0; break;//ÏÔʾµÚ1λ
case(2):
LSA=0;LSB=1;LSC=0; break;//ÏÔʾµÚ2λ
case(3):
LSA=1;LSB=1;LSC=0; break;//ÏÔʾµÚ3λ
case(4):
LSA=0;LSB=0;LSC=1; break;//ÏÔʾµÚ4λ
case(5):
LSA=1;LSB=0;LSC=1; break;//ÏÔʾµÚ5λ
}
P0=DisplayData[5-i];//·¢ËÍÊý¾Ý
delay(100); //¼ä¸ôÒ»¶Îʱ¼äɨÃè
P0=0x00;//ÏûÒþ
}
}
void main()
{
while(1)
{
datapros(Ds18b20ReadTemp()); //Êý¾Ý´¦Àíº¯Êý
DigDisplay();//ÊýÂë¹ÜÏÔʾº¯Êý
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|