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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3347|回復: 2
收起左側

數(shù)碼管顯示溫度

[復制鏈接]
ID:83083 發(fā)表于 2015-6-17 19:56 | 顯示全部樓層 |閱讀模式
希望可以幫我修改,謝謝
問題:用這個程序燒寫到單片機里面結果發(fā)現(xiàn)。三位數(shù)碼管中總有兩位顯示的時候閃個不停,并且亮度較正常顯示的時候暗。求大神教
數(shù)碼管顯示溫度程序如下:

#include<reg52.h>    //包含單片機寄存器的頭文件
#include<intrins.h>  //包含_nop_()函數(shù)定義的頭文件
unsigned char flag,tltemp;      //負溫度標志 和臨時暫存變量
unsigned char code s8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//數(shù)碼管數(shù)字0-9
void delay1ms()
{
    unsigned char i,j;
   for(i=0;i<4;i++)
    for(j=0;j<33;j++)
     ;   
}
void delaynms(unsigned char n)
{
    unsigned char i;
for(i=0;i<n;i++)
     delay1ms();
}
/************************************************************************
以下是DS18B20的操作程序
************************************************************************/
sbit DQ=P3^3;
unsigned char time;   //設置全局變量,專門用于嚴格延時
/*****************************************************
函數(shù)功能:將DS18B20傳感器初始化,讀取應答信號
出口參數(shù):flag
***************************************************/
bit Init_DS18B20(void)
{
bit flag;         //儲存DS18B20是否存在的標志,flag=0,表示存在;flag=1,表示不存在
DQ = 1;           //先將數(shù)據(jù)線拉高
for(time=0;time<2;time++) //略微延時約6微秒
     ;
DQ = 0;           //再將數(shù)據(jù)線從高拉低,要求保持480~960us
for(time=0;time<200;time++)  //略微延時約600微秒
     ;         //以向DS18B20發(fā)出一持續(xù)480~960us的低電平復位脈沖
DQ = 1;           //釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高)
  for(time=0;time<10;time++)
      ;  //延時約30us(釋放總線后需等待15~60us讓DS18B20輸出存在脈沖)
flag=DQ;          //讓單片機檢測是否輸出了存在脈沖(DQ=0表示存在)      
for(time=0;time<200;time++)  //延時足夠長時間,等待存在脈沖輸出完畢
      ;
return (flag);    //返回檢測成功標志
}
/*****************************************************
函數(shù)功能:從DS18B20讀取一個字節(jié)數(shù)據(jù)
出口參數(shù):dat
***************************************************/
unsigned char ReadOneChar(void)
{
   unsigned char i=0;
   unsigned char dat;  //儲存讀出的一個字節(jié)數(shù)據(jù)
  for (i=0;i<8;i++)
    {
      
      DQ =1;       // 先將數(shù)據(jù)線拉高
     _nop_();     //等待一個機器周期  
      DQ = 0;      //單片機從DS18B20讀書據(jù)時,將數(shù)據(jù)線從高拉低即啟動讀時序
     _nop_();     //等待一個機器周期     
      DQ = 1;     //將數(shù)據(jù)線"人為"拉高,為單片機檢測DS18B20的輸出電平作準備
     for(time=0;time<2;time++)
              ;      //延時約6us,使主機在15us內采樣
     dat>>=1;
      if(DQ==1)
         dat|=0x80;  //如果讀到的數(shù)據(jù)是1,則將1存入dat
    else
     dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat
        //將單片機檢測到的電平信號DQ存入r

      for(time=0;time<8;time++)
          ;              //延時3us,兩個讀時序之間必須有大于1us的恢復期
     }                     
   return(dat);    //返回讀出的十六進制數(shù)據(jù)
}
/*****************************************************
函數(shù)功能:向DS18B20寫入一個字節(jié)數(shù)據(jù)
入口參數(shù):dat
***************************************************/  
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=0; i<8; i++)
    {
     DQ =1;         // 先將數(shù)據(jù)線拉高
    _nop_();      //等待一個機器周期  
     DQ=0;          //將數(shù)據(jù)線從高拉低時即啟動寫時序      
     DQ=dat&0x01;   //利用與運算取出要寫的某位二進制數(shù)據(jù),
                        //并將其送到數(shù)據(jù)線上等待DS18B20采樣
   for(time=0;time<10;time++)
        ;//延時約30us,DS18B20在拉低后的約15~60us期間從數(shù)據(jù)線上采樣
    DQ=1;          //釋放數(shù)據(jù)線      
     for(time=0;time<1;time++)
      ;//延時3us,兩個寫時序間至少需要1us的恢復期
    dat>>=1;       //將dat中的各二進制位數(shù)據(jù)右移1位
   }
    for(time=0;time<4;time++)
                ; //稍作延時,給硬件一點反應時間
}
/*****************************************************
函數(shù)功能:做好讀溫度的準備
***************************************************/
void ReadyReadTemp(void)
{
       Init_DS18B20();     //將DS18B20初始化
  WriteOneChar(0xCC); // 跳過讀序號列號的操作
  WriteOneChar(0x44); // 啟動溫度轉換   
        delaynms(200); //轉換一次需要延時一段時間

  Init_DS18B20();     //將DS18B20初始化
  WriteOneChar(0xCC); //跳過讀序號列號的操作
  WriteOneChar(0xBE); //讀取溫度寄存器,前兩個分別是溫度的低位和高位
}

/*****************************************************
函數(shù)功能:顯示溫度的整數(shù)部分
入口參數(shù):x
***************************************************/
void display_temp1(unsigned char x)
{
unsigned char k,l;     //j,k,l分別儲存溫度的百位、十位和個位
k=(x%100)/10;    //取十位
l=x%10;             //取個位
P0=0x00;
P0=s8[l];    //將個位數(shù)字的字符常量寫入數(shù)碼管
P2=0xfd;    //將十位數(shù)字的字符常量寫入數(shù)碼管
delaynms(20);         //延時1ms給硬件一點反應時間      
P0=0x00;
P0=s8[k];
     P2=0xfe;
delaynms(1);

}

/*****************************************************
函數(shù)功能:顯示溫度的小數(shù)數(shù)部分
入口參數(shù):x
***************************************************/
void display_temp2(unsigned char x)
{
P0=0x00;
P0=s8[x];
     P2=0xfb;
delaynms(20);
}

/*****************************************************
數(shù)功能:主函數(shù)
***************************************************/
void main(void)
{   
   
    unsigned char TL;     //儲存暫存器的溫度低位
     unsigned char TH;    //儲存暫存器的溫度高位
     unsigned char TN;      //儲存溫度的整數(shù)部分
   unsigned char TD;       //儲存溫度的小數(shù)部分
    delaynms(5);        //延時5ms給硬件一點反應時間     
    while(1)                //不斷檢測并顯示溫度
  {  
    flag=0;
   ReadyReadTemp();     //讀溫度準備
     TL=ReadOneChar();    //先讀的是溫度值低位
  TH=ReadOneChar();    //接著讀的是溫度值高位  
   TN=TH*16+TL/16;      //實際溫度值=(TH*256+TL)/16,即:TH*16+TL/16
                       //這樣得出的是溫度的整數(shù)部分,小數(shù)部分被丟棄了
    TD=(TL%16)*10/16;    //計算溫度的小數(shù)部分,將余數(shù)乘以10再除以16取整,
                     //這樣得到的是溫度小數(shù)部分的第一位數(shù)字(保留1位小數(shù))
    display_temp2(TD);
      display_temp1(TN);    //顯示溫度的整數(shù)部
       delaynms(1);                          
     }
      
}

回復

使用道具 舉報

ID:249808 發(fā)表于 2024-1-17 08:31 | 顯示全部樓層
像這種你最好是把整個工程項目打包放上來,要不然沒人愿意幫你一個個看然后自己新建一下工程的,都那么多年了,也沒人回復一個,因為大家都懶得去看,懶得去新建工程。
回復

使用道具 舉報

ID:883242 發(fā)表于 2024-1-17 13:41 | 顯示全部樓層
LGH850 發(fā)表于 2024-1-17 08:31
像這種你最好是把整個工程項目打包派俠,要不然没人愿意板U鬩桓齦隹慈緩笞約盒陸ㄒ幌鹿こ痰,都那么多� ...

你已經(jīng)回復了但是還是沒有任何建設性意見。
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线免费观看黄色 | 欧美一级片在线观看 | 黄色一级特级片 | 精品视频网 | 国产91丝袜在线播放 | 精品国产乱码久久久久久蜜退臀 | 日韩视频在线播放 | 狠狠骚| 91成人在线| 日韩欧美精品在线 | 三级黄色片在线播放 | 在线欧美a| 黄色片大全在线观看 | 日韩精品在线播放 | 高清av在线 | 欧美精品久久久 | 91九色视频 | 亚洲免费网站 | 颜色网站在线观看 | 国产乱精品一区二区三区 | 黄色在线观看 | 亚洲国产精选 | 国产亚洲久 | 99亚洲视频| 国产激情综合五月久久 | 一级黄a| 久久国产精品-国产精品 | 国产精品18hdxxxⅹ在线 | 国产影音先锋 | 毛片a| yeyeav| 一区二区三区不卡视频 | 日韩有码一区 | 天天草天天爱 | 视频1区| 日韩精品一区二区三区视频播放 | 久久精品视频在线观看 | 国产精品一区二区久久久久 | a免费视频| 国产精品国产精品 | 亚洲欧美国产毛片在线 |