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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請大神幫忙看看這個程序有什么問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:206654 發表于 2017-6-1 12:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
4.2.1  DS18B20測溫程序
#include<reg52.h>
#include"lcd1602.h"
#include"adc_stc60s2.h"
#define ucharunsigned char
#defineuint  unsigned int
#define jump_ROM0xCC
#define start0x44
#defineread_EEROM 0xBE
sbit DQ =P2^3;            //DS18B20數據口
unsigned charTMPH,TMPL;
/********************************************************************
* 名稱 : delay()
* 功能 : 延時,延時時間大概為140US。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay_1()
{
    int i,j;
    for(i=0; i<=10; i++)
    for(j=0; j<=2; j++)
;
}
/********************************************************************
* 名稱 : delay()
* 功能 : 延時函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void delay(uintN)
{
    int i;
    for(i=0; i<N; i++)
    ;
}
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間為 1ms * x
* 輸入 : x (延時一毫秒的個數)
* 輸出 : 無
***********************************************************************/
voidDelay_1ms(uint i)//1ms延時
{
    uchar x,j;
    for(j=0;j<i;j++)
    for(x=0;x<=148;x++);
}
/********************************************************************
* 名稱 : Reset()
* 功能 : 復位DS18B20
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
ucharReset(void)
{
    uchar deceive_ready;
    DQ = 0;
    delay(29);
    DQ = 1;
    delay(3);
    deceive_ready = DQ;
    delay(25);
    return(deceive_ready);
}
/********************************************************************
* 名稱 : read_bit()
* 功能 : 從DS18B20讀一個位值
* 輸入 : 無
* 輸出 : 從DS18B20讀出的一個位值
***********************************************************************/
ucharread_bit(void)
{
    uchar i;
    DQ = 0;
    DQ = 1;
    for(i=0; i<3; i++);
    return(DQ);
}
/********************************************************************
* 名稱 : write_bit()
* 功能 : 向DS18B20寫一位
* 輸入 : bitval(要對DS18B20寫入的位值)
* 輸出 : 無
***********************************************************************/
voidwrite_bit(uchar bitval)
{
DQ=0;if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}
/********************************************************************
* 名稱 : read_byte()
* 功能 : 從DS18B20讀一個字節
* 輸入 : 無
* 輸出 : 從DS18B20讀到的值
***********************************************************************/
ucharread_byte(void)
{
    uchar i,m,receive_data;
    m = 1;
    receive_data = 0;
    for(i=0; i<8; i++)
    {
       if(read_bit())
       {
           receive_data = receive_data + (m<< i);
       }
       delay(6);
    }
    return(receive_data);
}
/********************************************************************
* 名稱 : write_byte()
* 功能 : 向DS18B20寫一個字節
* 輸入 : val(要對DS18B20寫入的命令值)
* 輸出 : 無
***********************************************************************/
voidwrite_byte(uchar val)
{
    uchar i,temp;
    for(i=0; i<8; i++)
    {
       temp = val >> i;
       temp = temp & 0x01;
       write_bit(temp);
       delay(5);
    }
}
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void main()
{
    uchar lcd_string[2][33]={0};
    uint temp,tmep1;
    long delay_time = 5;
    init_adc();
    L1602_init();
    while(1)
    {
       Reset();
       write_byte(jump_ROM);
       write_byte(start);
       Reset();
       write_byte(jump_ROM);
       write_byte(read_EEROM);
       TMPL = read_byte();
       TMPH = read_byte();
       temp = TMPL / 16 + TMPH * 16;
        lcd_string[0][0] = temp/10%10 + 0x30;
       //if (lcd_string[0][0]>=1)
              //L1602_string(1,1,"123");
        lcd_string[0][1] = temp%10 + 0x30;
       if (temp > 30) P3 &= ~(0x01<< 2);
       else P3 |= (0x01 << 2);
       if (temp < 27) P3 &= ~(0x01<< 3);
       else P3 |= (0x01 << 3);
      
       temp1= adc_out();
        lcd_string[1][0] = temp1/10%10 + 0x30;
        lcd_string[1][1] = temp1%10 + 0x30;
       //添加濕度上下限  result為濕度值
        if(temp > 55) P3 &= ~(0x01 << 4);   
       else P3 |= (0x01 << 4);
       if (temp < 40) P3 &= ~(0x01<< 5);
       else P3 |= (0x01 << 5);
       if(delay_time== 0)  {
               L1602_string(1,1,lcd_string[0]);
               L1602_string(2,1,lcd_string[1]);
               delay_time = 5;
        }
       delay_time--;
    }
}
4.2.2   A/D轉換程序
#include<STC12c5a60s2/STC_12c5a.H>
#include<intrins.h>  //包含_nop_()函數定義的頭文件
#include"adc_stc60s2.h"
voidinit_adc()
{
    unsigned long i;
    ADC_CONTR|=0x80;      //開A/D轉換電源,第一次使用時要打開內部模擬電源
    for (i=0;i<10000;i++);   //適當延時
    P1ASF=0x04;              //選擇P1.2作為A/D轉換通道
    ADC_CONTR=0xE2;              
    for (i=0;i<10000;i++);      //適當延時
}
ucharadc_out()
{
    uchar result;
    uchar status;
    ADC_CONTR|=0x08;        //啟動 A/D 轉換
    status=0;
    while(status==0)         //等待A/D轉換結束
    {
          status=ADC_CONTR&0x10;
    }
    ADC_CONTR&=0xE7;         //將ADC_FLAG清0
    result=ADC_RES;      //保存A/D轉換結果
    return result;
}
4.2.3  1602顯示程序
#include<reg52.h>
#include"lcd1602.h"
/********************************************************************
* 名稱 : delay()
* 功能 : 延時,延時時間大概為140US。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
voiddelay()
{
    int i,j;
    for(i=0; i<=100; i++)
    for(j=0; j<=20; j++)
;
}
/********************************************************************
* 名稱 : enable(uchar del)
* 功能 : 1602命令函數
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
voidenable(uchar del)
{
    DATA = del;
    RS = 0;
    RW = 0;
    E = 0;
    delay();
    E = 1;
    delay();
}
/********************************************************************
* 名稱 : write(uchar del)
* 功能 : 1602寫數據函數
* 輸入 : 需要寫入1602的數據
* 輸出 : 無
***********************************************************************/
voidwrite(uchar del)
{
    DATA = del;
    RS = 1;
    RW = 0;
    E = 0;
    delay();
    E = 1;
    delay();
}
/********************************************************************
* 名稱 : L1602_init()
* 功能 : 1602初始化,請參考1602的資料
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
voidL1602_init(void)
{
    enable(0x01);
    enable(0x38);
    enable(0x0c);
    enable(0x06);
    enable(0xd0);
}
/********************************************************************
* 名稱 : L1602_char(ucharhang,uchar lie,char sign)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b" ,調用該函數如下
        L1602_char(1,5,'b')
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
voidL1602_char(uchar hang,uchar lie,char sign)
{
    uchar a;
    if(hang == 1) a = 0x80;
    if(hang == 2) a = 0xc0;
    a = a + lie - 1;
    enable(a);
    write(sign);
}
/********************************************************************
* 名稱 : L1602_string(ucharhang,uchar lie,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
         L1602_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
voidL1602_string(uchar hang,uchar lie,uchar *p)
{
    uchar a;
    if(hang == 1) a = 0x80;
    if(hang == 2) a = 0xc0;
    a = a + lie - 1;
    enable(a);
    while(1)
    {
       if(*p == '\0') break;
       write(*p);
       p++;
    }
}

Sheet1.pdf

24.84 KB, 下載次數: 4

電路圖

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

使用道具 舉報

沙發
ID:168638 發表于 2017-6-1 15:08 | 只看該作者
不錯,編出了自己的風格
回復

使用道具 舉報

板凳
ID:206767 發表于 2017-6-1 16:36 來自手機 | 只看該作者
沒有什么錯誤啊 太長了
回復

使用道具 舉報

地板
ID:206785 發表于 2017-6-1 16:59 | 只看該作者
沒毛病
回復

使用道具 舉報

5#
ID:206785 發表于 2017-6-1 17:00 | 只看該作者
暫時沒看出來有什么錯誤
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成av| 欧美v日韩| 久草在线 | 99精品视频在线 | 色吧久久| 黄色大片毛片 | 成年人在线观看视频 | 日本大片在线播放 | 亚洲电影第三页 | 亚洲日韩欧美一区二区在线 | 一区二区不卡视频 | 国产一区不卡 | 天天射天天干 | 欧美毛片免费观看 | 亚洲欧美国产毛片在线 | 国产精品免费观看 | 中文在线一区 | 国产精品一区二区不卡 | 奇米超碰在线 | 武道仙尊动漫在线观看 | av一区二区三区四区 | 亚洲精品视频在线观看视频 | 欧美在线观看一区 | www.一区二区三区.com | 久久久激情视频 | 亚洲精久久| 久久成人人人人精品欧 | 久草免费视| 精品一二区 | 日韩一级黄色毛片 | 99福利视频导航 | 国产精品久久久久久久久久久久 | 国产高清一区二区 | 一区二区福利视频 | 日本中文在线 | 亚洲成人av | 久久久www成人免费精品 | 国产成人综合网 | 国产精品99久久免费观看 | 天天搞天天操 | 中文字幕一级毛片 |