資源簡介
sht30的基于c51單片機驅動程序:#include
#include
#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();
代碼片段和文件信息
- 上一篇:BP算法推導詳細教程
- 下一篇:AGV機械設計
評論
共有 條評論