久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1031|回復: 0
打印 上一主題 下一主題
收起左側

單片機程序改了好久了,還是有問題,真的看不出來了 求幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:506327 發表于 2019-4-24 22:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有哪位大佬幫忙看看的

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^7;
sbit CS=P3^4;
sbit SID=P3^5;
sbit SCLK=P3^6;
sbit PSB=P3^7;
char code table[]={"temperature:"};
char data disdate[8];
uchar tflag;          //溫度正負標志
uchar value=0;          //溫度
/******************************液晶顯示程序******************************/
void delay(uchar z)
{
     uchar i,j;
        for(i=z;i>0;i--)
         for(j=110;j>0;j--);                     
}
void sendbyte(uchar byte)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                SCLK=1;
                if(byte&0x80)
                   SID=1;
                else
                   SID=0;
                SCLK=0;
                byte<<=1;
        }
}
void write_cmd(uchar cmd)
{
     CS=1;
        sendbyte(0xf8);
        sendbyte(cmd&0xf0);
        sendbyte(cmd<<4&0xf0);
        CS=0;
        delay(10);
}
void write_data(uchar date)
{
     CS=1;
        sendbyte(0xfa);
        sendbyte(date&0xf0);
        sendbyte(date<<4&0xf0);
        CS=0;
        delay(10);
}
void dizhi(uchar x,uchar y)
{
        uchar address;
        switch(x)
        {
                case 1:address=0x80+y;break;
                case 2:address=0x90+y;break;
                case 3:address=0x88+y;break;
                case 4:address=0x98+y;break;
        }
        write_cmd(address);        
}
void guding(uchar l,uchar k,uchar *s)
{
        dizhi(l,k);
        while(*s)
        {
             write_data(*s);
                s++;
        }
}
void init()
{
     PSB=0;
        write_cmd(0x30);
        write_cmd(0x01);
        write_cmd(0x02);
        write_cmd(0x06);
        write_cmd(0x0e);
}
/******************************傳感器ds1802程序*******************************/
void yanshi(uint i)           //延時1微秒
{
    while(i--);
}
uchar fuwei()         //復位
{
     bit ok;
     ds=1;
        yanshi(4);
        ds=0;
        yanshi(200);
        yanshi(300);     //延時時間在480us~960us
        ds=1;
        yanshi(50);          //延時等待,確定傳感器的存在
        ok=ds;
        yanshi(25);
        return ok;
}
uchar read_date()           //讀數據
{
     uchar i=0;
        uchar date=0;
        for(i=0;i<8;i++)
        {
                ds=0;
                date>>=1;
                ds=1;
                if(ds)            //執行到這電平已經穩定,不用再加延時
                  date|=0x80;
                yanshi(30);
        }
        return(date);
}
void write_date(uchar wdata)        //寫數據
{
     uchar i=0;
        for(i=0;i>8;i++)
        {
                ds=0;
                yanshi(15);        //區分讀寫,讓讀的時間過去
                ds=wdata&0x01;
                yanshi(45);    //讓有效數據穩定
                ds=1;        //電平穩定后,釋放總線
                wdata>>=1;
        }
}

int read_temp()           //讀取溫度并轉換
{
        uchar a,b;
        fuwei();
        write_date(0xcc);   //跳過讀序列號
        write_date(0x44);   //啟動溫度轉換
        yanshi(10);         //給芯片轉換溫度的時間
        fuwei();
        write_date(0xcc);
        write_date(0xbe);   //讀溫度
        a=read_date();            //低八位
        b=read_date();            //高八位
        value=b;
        value<<=8;
        value=value|a;
        if(value<0x0fff)
             tflag=0;
        else
        {
          value=~value+1;
          tflag=1;
        }
        value=value*(0.625)+0.5;
        return value;
}
void display()
{
         disdate[0]=0x30;          //正負號位
         disdate[1]=value/1000+0x30;           //百位
         disdate[2]=value%1000/100+0x30;  //十位
         disdate[3]=value%100/10+0x30;   //個位
         disdate[4]=0x2e;                           //小數點
         disdate[5]=value%10+0x30;           //小數

         if(tflag==0)
           disdate[0]=0x2b;                  //如果溫度為正,不顯示
         else
           disdate[0]=0x2d;
         
         if(disdate[1]==0x30)          //如果百位為零不顯示
         {
            disdate[1]=0x20;
            if(disdate[2]==0x30)           //如果百位,個位為零,也不顯示
               disdate[2]=0x20;
         }
         
}

/******************************主程序*****************************/
void main()
{
        init();
        delay(5);
        guding(1,0,table);
        while(1)
        {         
            
                read_temp();          //讀溫度
                display();       //顯示溫度
                guding(2,1,disdate);
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级二级三级黄色 | 91麻豆精品国产91久久久资源速度 | 男人的天堂中文字幕 | 久久男女视频 | 亚洲精品久久久久久久久久久久久 | a级性视频 | 国产精品毛片无码 | 亚洲国产精品久久久 | 国产91精品久久久久久久网曝门 | 国产午夜精品一区二区三区四区 | www.国产.com| av黄色在线 | 亚洲电影在线播放 | 青青久久久 | 日韩在线观看网站 | 毛片99| 亚洲精品免费视频 | 国产极品车模吞精高潮呻吟 | 91免费观看视频 | 久久一区视频 | www.成人在线视频 | 国产精品久久久久久久久久久久久 | 18gay男同69亚洲网站 | 成人小视频在线观看 | 五月婷婷中文 | 亚洲第一网站 | 久久久久国产视频 | 伊人网在线播放 | 国产一区不卡 | 久久国产麻豆 | 久久精品91久久久久久再现 | 成年免费大片黄在线观看岛国 | 手机av网 | 天天综合网天天综合色 | 色黄视频在线 | 久久国产麻豆 | 视频1区| 黄色永久免费 | 九九热在线观看视频 | 精品国产18久久久久久二百 | 狠狠操天天操 |