欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
stc15w4k56s4+yl_69土壤濕度傳感器+lcd12864串行+AD轉(zhuǎn)換
[打印本頁]
作者:
asimaka
時(shí)間:
2018-4-4 15:47
標(biāo)題:
stc15w4k56s4+yl_69土壤濕度傳感器+lcd12864串行+AD轉(zhuǎn)換
利用YL-69傳感器做的土壤濕度檢測(cè),能顯示數(shù)值
單片機(jī)源程序如下:
#include <stc15.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
/************* 12864LCD引腳定義 *************/
sbit LCD_CS = P1^3; //LCD液晶片選
sbit LCD_SID = P1^1; //LCD液晶讀/寫控制
sbit LCD_SCLK = P1^2; //LCD液晶使能控制
sbit a0 = P1^0; //模擬量輸入位
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
/*unsigned char ADC_RES; */
uchar Vo; //A/D轉(zhuǎn)換后換算的電壓值
/*sfr P1ASF= 0x90;
sfr ADC_CONTR= 0xc5;
sfr ADC_DATA = 0xc6;
sfr ADC_LOW2 = 0xbe; */
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC power control bit
#define ADC_FLAG 0x10 //ADC complete flag 模數(shù)轉(zhuǎn)換結(jié)束標(biāo)志位
#define ADC_START 0x08 //ADC start control bit 模數(shù)轉(zhuǎn)換啟動(dòng)控制位
//轉(zhuǎn)換速度控制位SPEED0和SPEED1,共四種狀態(tài),對(duì)應(yīng)四種轉(zhuǎn)換速度
#define ADC_SPEEDLL 0x00 //540 clocks
#define ADC_SPEEDL 0x20 //360 clocks
#define ADC_SPEEDH 0x40 //180 clocks
#define ADC_SPEEDHH 0x60 //90 clocks
/*********************************************************/
uchar DIS1[] = {"濕度: "};
/*******************************************************************/
/* */
/* 延時(shí)函數(shù) */
/* */
/*******************************************************************/
void delay(int ms)
{
while(ms--)
{
uchar i;
for(i=0;i<150;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*******************************************************************/
/* */
/* 延時(shí)函數(shù) */
/* */
/*******************************************************************/
void delay1(int ms)
{
while(ms--)
{
uchar y;
for(y=0;y<100;y++) ;
}
}
void send(unsigned char dat)
{
unsigned char i;
unsigned long x; //為延時(shí)用
for(i=0;i<8;i++)
{
if( (dat & 0x80)!=0)
{
LCD_SID=1;
}
else
{
LCD_SID=0;
}
LCD_SCLK=1;
x++;
LCD_SCLK=0;
x++;
dat=dat<<1;
}
}
/*******************************************************************/
/* */
/*寫指令數(shù)據(jù)到LCD */
/*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 */
/* */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{
unsigned char byte1=0xf8,byte2,byte3;
byte2=cmd & 0xf0;
byte3=cmd<<4;
LCD_CS=1;
send(byte1);
send(byte2);
send(byte3);
LCD_CS=0;
delay(5);
}
/*******************************************************************/
/* */
/*寫顯示數(shù)據(jù)到LCD */
/*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。 */
/* */
/*******************************************************************/
void lcd_wdat(uchar dat)
{
unsigned char byte1=0xfa,byte2,byte3;
byte2=dat & 0xf0;
byte3=dat<<4;
LCD_CS=1;
send(byte1);
send(byte2);
send(byte3);
LCD_CS=0;
delay(5);
}
/*******************************************************************/
/* */
/* LCD初始化設(shè)定 */
/* */
/*******************************************************************/
void lcd_init()
{
lcd_wcmd(0x34); //擴(kuò)充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0c); //顯示開,關(guān)光標(biāo)
delay(5);
lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容
delay(5);
}
/*********************************************************/
/* */
/* 設(shè)定顯示位置 */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==1)
{X=0x80;}
else if (X==2)
{X=0x90;}
else if (X==3)
{X=0x88;}
else if (X==4)
{X=0x98;}
pos = X+Y ;
lcd_wcmd(pos); //顯示地址
}
/*********************************************************
* *
* 清屏函數(shù) *
* *
*********************************************************/
void clr_screen()
{
lcd_wcmd(0x34); //擴(kuò)充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x01); //清屏
delay(5);
}
void disp_hz()
{
unsigned char i;
lcd_pos(1,0); //設(shè)置顯示位置為第一行
for(i=0;i<16;i++)
{
lcd_wdat(DIS1[i]);
// delay(30);
}
}
//----------------------------
//Get ADC result
//---------------------------
uchar GetADCResult(uchar ch) //這里如有不懂 請(qǐng)仔細(xì)看資料
{
P1ASF = 0x01; //選擇P1口的哪一口 這里的口和ch要對(duì)應(yīng)才能達(dá)到選擇該口
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//0x00|0x00|ch|0x08:選擇A/D輸入通道,開始A/D轉(zhuǎn)換
// 這么用語句的主要原因就是不能位尋址
// 通道選擇在后3位所以直接用一個(gè)整數(shù)表示ch
//例如ch=6 那么對(duì)應(yīng)的后三位就是110
_nop_(); //Must wait before inquiry ,
_nop_(); //設(shè)置ADC_CONTR寄存器后需加4個(gè)CPU時(shí)鐘周期的延時(shí),才能保證值被寫入ADC_CONTR寄存器
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
ADC_CONTR &= ~ADC_FLAG; //Close ADC 將標(biāo)志位清零等待下次硬件置1
//也可以寫成 ADC_CONTR= ADC_CONTR & ( ~ADC_FLAG)
Vo=ADC_RES*5*10/256; //Return ADC result(為顯示整數(shù),這里將電壓值擴(kuò)大了十倍)
//5/256 因?yàn)槭?位 把5V分成256份 ADC_RES為采集的份數(shù)
//ADC_RES*(5/256) 為采集的電壓值 然后擴(kuò)大10倍便于計(jì)算
return Vo;
}
void main()
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
test_yl_69.zip
(24.31 KB, 下載次數(shù): 181)
2018-4-4 15:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
沐浴陽光949
時(shí)間:
2018-7-10 19:05
這個(gè)是串行顯示嗎?
作者:
asimaka
時(shí)間:
2018-12-28 08:50
沐浴陽光949 發(fā)表于 2018-7-10 19:05
這個(gè)是串行顯示嗎?
是的,當(dāng)時(shí)是為了少接幾根線
作者:
1305174379
時(shí)間:
2019-12-22 17:35
你好,獲取到電壓值v0之后,要怎么轉(zhuǎn)換成土壤濕度值呢?公式
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1