求问一个单片机的一个编程,为什么我和别人的不一样?

2019-07-15 10:37发布

我是按照百度上面的做的。。。但是为什么结果不一样?有大神愿意给我看看吗?
这是百度到的图 212121.jpg 。。。这是我自己按照这个画的 123123.png

这是他给的程序
#include <at89x51.h>//times New Roman">AT89C51时就用这个头文件//#include <reg52.h>//用华邦W78E58B时必须用这个头文件#include <absacc.h>#include <ctype.h>#include <math.h>#include <stdio.h>#include <string.h>#include <DS18B20.h>#include "LCD1602.h"                        ////液晶显示头文件//sbit DQ = P3^4;                                        //定义DQ引脚为P3.4unsigned char t[2],*pt;                                //用来存放温度值,测温程序就是通过这个数组与 主函数通信unsigned char  TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,''};                                                                //显示实时温度,上电时显示 +125.00Cunsigned char  TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,                                                                0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,''};                                                                //显示温度上下限,上电时显示 TH:+125 TL:+124C                                                        unsigned char code dotcode[4]={0,25,50,75};/***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******再将表值分离出十位和个位后送到十分位和百分位********************/ void covert0( unsigned char TH, unsigned char TL)        //将温度上下限转换为LCD显示的数据{    if(TH>0x7F)                    //判断正负,如果为负温,将其转化为其绝对值   {    TempBuffer0[3]=0x2d;             //0x2d"-"ASCII        TH=~TH;        TH++;   }   else TempBuffer0[3]=0x2b;        //0x2B"+"ASCII    if(TL>0x7f)   {   TempBuffer0[11]=0x2d;             //0x2d"-"ASCII   TL=~TL+1;   }   else TempBuffer0[11]=0x2b;        //0x2B"+"ASCII   TempBuffer0[4]=TH/100+0x30;                             //分离出TH的百十个位  if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐  TempBuffer0[5]=(TH%100)/10+0x30;                                //分离出十位  TempBuffer0[6]=(TH%100)%10+0x30;                                //分离出个位  TempBuffer0[12]=TL/100+0x30;                             //分离出TL的百十个位  if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位数消隐  TempBuffer0[13]=(TL%100)/10+0x30;                                //分离出十位  TempBuffer0[14]=(TL%100)%10+0x30;                                //分离出个位} void covert1(void)        //将温度转换为LCD显示的数据{   unsigned char x=0x00,y=0x00;   t[0]=*pt;   pt++;   t[1]=*pt;   if(t[1]>0x07)                    //判断正负温度   {    TempBuffer1[0]=0x2d;             //0x2d"-"ASCII        t[1]=~t[1];                        /*下面几句把负数的补码*/        t[0]=~t[0];                 /* 换算成绝对值*********/        x=t[0]+1;                                /***********************/        t[0]=x;                                        /***********************/        if(x>255)                /**********************/        t[1]++;                                /*********************/   }   else TempBuffer1[0]=0x2b;        //0xfe为变"+"ASCII  t[1]<<=4;                //将高字节左移4  t[1]=t[1]&0x70;                //取出高字节的3个有效数字位  x=t[0];                                        //t[0]暂存到X,因为取小数部分还要用到它  x>>=4;                                        //右移4  x=x&0x0f;                                        //和前面两句就是取出t[0]的高四位          t[1]=t[1]|x;                        //将高低字节的有效值的整数部分拼成一个字节  TempBuffer1[1]=t[1]/100+0x30;                             //+0x30 为变 0~9 ASCII   if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐  TempBuffer1[2]=(t[1]%100)/10+0x30;                                //分离出十位  TempBuffer1[3]=(t[1]%100)%10+0x30;                                //分离出个位  t[0]=t[0]&0x0c;                                                        //取有效的两位小数  t[0]>>=2;                                                                        //左移两位, 以便查表  x=t[0];                                                                                  y=dotcode[x];                                                                        //查表换算 成实际的小数  TempBuffer1[5]=y/10+0x30;                                                        //分离出十 分位  TempBuffer1[6]=y%10+0x30;                                                        //分离出百 分位}                        void delay(unsigned char i){        while(i--);} main(){ unsigned char TH=110,TL=-20;                                            //下一步扩展时可能 通过这两个变量,调节上下限                                                                               //测温函数返回这个 数组的头地址 while(1) {            pt=ReadTemperature(TH,TL,0x3f);                //上限温度-22,下限-24,分辨率10,也就是 0.25C                                                                                //读取温度 ,温度值存放在一个两个字节的数组中,        delay(100);         covert1();        covert0(TH,TL);        LCD_Initial();                                                        //第一个参数列号, 二个为行号,0表示第一行                                                                                        // 1表示第二行,第三个参数为显示数据的首地址        LCD_Print(0,0,TempBuffer0);                LCD_Print(0,1,TempBuffer1);                                 }}  我按照他这个程序去做。但是是错误的?请问哪里错了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
易水清墨
1楼-- · 2019-07-15 23:07
 精彩回答 2  元偷偷看……
易水清墨
2楼-- · 2019-07-16 00:17
人中狼 发表于 2017-5-31 11:07
晶振标数值了吗,单片机有装载程序吗

老哥。这些东西在哪里标注呀,。。。我没用过这个,要不是老师非要求。我只是照着葫芦画瓢
人中狼
3楼-- · 2019-07-16 01:36
双击晶振,会有一个对话框,里面有一项是晶振频率,双击单片机,也会有一个对话框,里面有程序文件的选项,在里面选择你的程序编译后生成的hex文件

一周热门 更多>