|
#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}; //顯示緩存區(4)
uchar DISP=0;//緩存區指針
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; //被觸發的按鍵編號
unsigned int uiKeyTimeCnt1=0; //按鍵去抖動延時計數器
unsigned char ucKeyLock1=0; //按鍵觸發后自鎖的變量標志
unsigned char displaycnt=0;
void keyscan()
{
if(key==1)//IO是高電平,說明按鍵沒有被按下,這時要及時清零一些標志位
{
ucKeyLock1=0; //按鍵自鎖標志清零
uiKeyTimeCnt1=0;//按鍵去抖動延時計數器清零,此行非常巧妙,是我實戰中摸索出來的。
}
else if(ucKeyLock1==0)//有按鍵按下,且是第一次被按下
{
uiKeyTimeCnt1++; //累加定時中斷次數
if(uiKeyTimeCnt1>const_key_time1)
{
uiKeyTimeCnt1=0;
ucKeyLock1=1; //自鎖按鍵置位,避免一直觸發
ucKeySec=1; //觸發1號鍵
}
}
}
void keyservice()
{
if(ucKeySec)
{
displaycnt=!displaycnt;
}
ucKeySec=0;
}
void UartInit(void) //9600bps@12.000MHz
{
TMOD=0x01; //設置定時器0為工作方式1
TH0=0xf8; //重裝初始值(65535-500)=65035=0xfe0b
TL0=0x2f;
SCON=0x50;
TMOD=0X21;
IP =0x10; //把串口中斷設置為最高優先級,
EA=1;
ES=1;
ET0=1;
TR0=1;
}
void T0_time(void) interrupt 1 //定時中斷
{
TF0=0; //清除中斷標志
TR0=0; //關中斷
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]];//數據端口送數據
dula=0;
DISP++;//緩存指針加1
SCANF=_cror_(SCANF,1);//掃描切換
if(DISP==7)//緩存指針到尾
{
DISP=0;//計數歸零
SCANF=0xDF;//掃完四個數碼管,掃描復位
}
// delay(5);
}
void main(void) //主函數
{
UartInit();
I2C_inita();
while(1)
{
Getdat_SHT30();
SHT30_DATEChange();
}
}
|
-
-
sht30C51.rar
2018-12-10 11:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
46.21 KB, 下載次數: 504, 下載積分: 黑幣 -5
調試ok,可以直接移植
評分
-
查看全部評分
|