|
#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是高電平,說(shuō)明按鍵沒(méi)有被按下,這時(shí)要及時(shí)清零一些標(biāo)志位
{
ucKeyLock1=0; //按鍵自鎖標(biāo)志清零
uiKeyTimeCnt1=0;//按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器清零,此行非常巧妙,是我實(shí)戰(zhàn)中摸索出來(lái)的。
}
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
2018-12-10 11:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
46.21 KB, 下載次數(shù): 504, 下載積分: 黑幣 -5
調(diào)試ok,可以直接移植
評(píng)分
-
查看全部評(píng)分
|