標(biāo)題: SHT30的C51單片機(jī)程序 ,數(shù)碼管顯示,誤差±1,可直接移植 [打印本頁(yè)]

作者: 736898032    時(shí)間: 2018-12-10 11:56
標(biāo)題: SHT30的C51單片機(jī)程序 ,數(shù)碼管顯示,誤差±1,可直接移植
#include <intrins.h>
#include <STC12C5A60S2.h>
#include "I2C.h"
#include "SHT30.h"
#define uint unsigned int
#define uchar unsigned char

void display();

unsigned char code tableduan[]= {
    0x3f,0x06,0x5b,0x4f,
    0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,
    0x39,0x5e,0x79,0x71
};

uchar data DIS_ROME[6]= {0,0,0,0,0,0}; //顯示緩存區(qū)(4)
uchar DISP=0;//緩存區(qū)指針
uchar SCANF=0xDF;//掃描指針
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;

sbit VOC_A=P3^5;
sbit VOC_B=P3^6;

sbit dula=P2^6; //IO口定義
sbit wela=P2^7;
sbit key=P3^4;
sbit beep_dr=P2^3;
uint pm1 = 0;
uint pm2 = 0;
uint pm10 = 0;
uchar vr=0;
uint intrcnt=0;
bit F_1HZ;
uint voice_time_cnt;
uchar Uart_Buf;
uchar Rec_Addr=0;
uchar mode=0;
uchar Rec_Uart=0;
uchar Recive_Buf[30]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
#define key P34
#define const_key_time1  50
unsigned char ucKeySec=0;   //被觸發(fā)的按鍵編號(hào)

unsigned int  uiKeyTimeCnt1=0; //按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器
unsigned char ucKeyLock1=0; //按鍵觸發(fā)后自鎖的變量標(biāo)志
unsigned char displaycnt=0;
void keyscan()
{
    if(key==1)//IO是高電平,說明按鍵沒有被按下,這時(shí)要及時(shí)清零一些標(biāo)志位
    {
        ucKeyLock1=0; //按鍵自鎖標(biāo)志清零
        uiKeyTimeCnt1=0;//按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器清零,此行非常巧妙,是我實(shí)戰(zhàn)中摸索出來的。
    }
    else if(ucKeyLock1==0)//有按鍵按下,且是第一次被按下
    {
        uiKeyTimeCnt1++; //累加定時(shí)中斷次數(shù)
        if(uiKeyTimeCnt1>const_key_time1)
        {
            uiKeyTimeCnt1=0;
            ucKeyLock1=1;  //自鎖按鍵置位,避免一直觸發(fā)
            ucKeySec=1;    //觸發(fā)1號(hào)鍵
        }
    }

}
void keyservice()
{
        if(ucKeySec)
        {
                displaycnt=!displaycnt;
        
        }
                ucKeySec=0;

}

void UartInit(void)                //9600bps@12.000MHz
{
    TMOD=0x01;  //設(shè)置定時(shí)器0為工作方式1
    TH0=0xf8;   //重裝初始值(65535-500)=65035=0xfe0b
    TL0=0x2f;


    SCON=0x50;
    TMOD=0X21;


    IP =0x10;  //把串口中斷設(shè)置為最高優(yōu)先級(jí),


    EA=1;
    ES=1;
    ET0=1;
    TR0=1;
}



void T0_time(void) interrupt 1   //定時(shí)中斷
{
    TF0=0;  //清除中斷標(biāo)志
    TR0=0; //關(guān)中斷
    keyscan();
          keyservice();
    display();
    if(++intrcnt==1000)
    {
        intrcnt=0;

    }
    TH0=0xf8;
    TL0=0x2f;
    TR0=1;  //開中斷

}



void display()        //LED掃描
{


    if(displaycnt==1)
                {               
                                DIS_ROME[0]=0;
                                DIS_ROME[1]=Hum_num[4];
                                DIS_ROME[2]=Hum_num[3];
                                DIS_ROME[3]=Hum_num[2];
                                DIS_ROME[4]=Hum_num[1];
                                DIS_ROME[5]=Hum_num[0];
    }
                else
                {
                                DIS_ROME[0]=0;
                                DIS_ROME[1]=TEMP_num[4];
                                DIS_ROME[2]=TEMP_num[3];
                                DIS_ROME[3]=TEMP_num[2];
                                DIS_ROME[4]=TEMP_num[1];
                                DIS_ROME[5]=TEMP_num[0];
                }



    wela=1;

    P0=SCANF;
    wela=0;

    dula=1;
    P0=tableduan[DIS_ROME[DISP]];//數(shù)據(jù)端口送數(shù)據(jù)
    dula=0;

    DISP++;//緩存指針加1
    SCANF=_cror_(SCANF,1);//掃描切換
    if(DISP==7)//緩存指針到尾
    {
        DISP=0;//計(jì)數(shù)歸零
        SCANF=0xDF;//掃完四個(gè)數(shù)碼管,掃描復(fù)位
    }
//        delay(5);
}




void main(void)  //主函數(shù)
{

    UartInit();

    I2C_inita();
    while(1)
    {
                        
                  Getdat_SHT30();
                  SHT30_DATEChange();
    }   
}


sht30C51.rar

46.21 KB, 下載次數(shù): 504, 下載積分: 黑幣 -5

調(diào)試ok,可以直接移植


作者: kodak0818    時(shí)間: 2019-3-14 16:25
感謝樓主分享
作者: qjq    時(shí)間: 2019-4-13 23:16
perfect123 發(fā)表于 2019-3-14 20:56
擼主,我已經(jīng)完全調(diào)試好了你的代碼,你的代碼有一些小地方需要改動(dòng),并不能直接使用,否則各種報(bào)錯(cuò)。
本著 ...

能發(fā)給我看看嘛,我修改不出來
作者: 小僧悟悟    時(shí)間: 2019-4-15 22:41
perfect123 發(fā)表于 2019-3-14 20:56
擼主,我已經(jīng)完全調(diào)試好了你的代碼,你的代碼有一些小地方需要改動(dòng),并不能直接使用,否則各種報(bào)錯(cuò)。
本著 ...

我也是寫不出來,希望大佬發(fā)一下
作者: 1450528588    時(shí)間: 2019-5-18 12:59
應(yīng)該會(huì)有用吧

作者: 75535451    時(shí)間: 2019-5-19 11:19
感謝樓主分享
作者: fdingy    時(shí)間: 2019-8-14 14:13
這個(gè)程序好像是有點(diǎn)問題
作者: zhangshanqiao    時(shí)間: 2019-12-27 23:05
程序參考意義非凡,只需按照樓主的提示做,完全可以調(diào)試成功。
作者: xiaocongya    時(shí)間: 2020-1-31 15:06
感謝樓主分享
作者: xiaocongya    時(shí)間: 2020-1-31 15:07
我已經(jīng)完全調(diào)試好了你的代碼,你的代碼有一些小地方需要改動(dòng),并不能直接使用,否則各種報(bào)錯(cuò)。 本著這是你的代碼的緣由,我不便于發(fā)出修改版本,除非獲得
作者: yesheng_tang    時(shí)間: 2020-3-20 21:39
感謝樓主分享
作者: azjzg10000    時(shí)間: 2020-4-14 11:20
感謝樓主分享
作者: 面具下的狼性    時(shí)間: 2020-5-11 23:03
新人入坑,看不懂這里的訣竅:“unsigned int  uiKeyTimeCnt1=0; //按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器
unsigned char ucKeyLock1=0; //按鍵觸發(fā)后自鎖的變量標(biāo)志
unsigned char displaycnt=0;
void keyscan()
{
    if(key==1)//IO是高電平,說明按鍵沒有被按下,這時(shí)要及時(shí)清零一些標(biāo)志位
    {
        ucKeyLock1=0; //按鍵自鎖標(biāo)志清零
        uiKeyTimeCnt1=0;//按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器清零,此行非常巧妙,是我實(shí)戰(zhàn)中摸索出來的!痹谏昝髯兞康臅r(shí)候已經(jīng)賦值了,為何還要在后面重新賦值?
作者: 736898032    時(shí)間: 2020-5-18 08:59
面具下的狼性 發(fā)表于 2020-5-11 23:03
新人入坑,看不懂這里的訣竅:“unsigned int  uiKeyTimeCnt1=0; //按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器
unsigned char u ...

按鍵松開計(jì)時(shí)清零標(biāo)記位和按鍵去抖計(jì)數(shù)器
作者: 007001z    時(shí)間: 2020-10-22 15:23
下載了,試試看
作者: HSY666NB    時(shí)間: 2020-11-22 22:59
感謝大佬,借用SHT30.c的代碼正常運(yùn)行,調(diào)試了3 4天終于有結(jié)果了,萬分感謝
作者: wanglx    時(shí)間: 2021-2-4 19:04
謝謝樓主分享程序,想做一個(gè)SHT30的溫濕度測(cè)量。
作者: n0si9na1    時(shí)間: 2022-4-19 13:14
正好最近搞溫濕度,希望可以用上
作者: zqy1818    時(shí)間: 2022-8-25 23:33
非常Nice,感謝分享!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1