国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng)

這篇具有很好參考價值的文章主要介紹了【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實驗五

  • 實驗名稱

溫室盆栽灌溉系統(tǒng)

軟件設(shè)計:

1. 定義對應(yīng)的引腳和端口的別名。

2. 編寫延時函數(shù),用于控制程序的執(zhí)行速度。

3. 編寫LCD控制函數(shù),包括發(fā)送命令和發(fā)送數(shù)據(jù)兩種操作。

4. 編寫顯示函數(shù),用于在LCD上顯示字符串。

5. 編寫獲取AD轉(zhuǎn)換結(jié)果的函數(shù),用于測量環(huán)境濕度。

6. 編寫顯示百分比的函數(shù),用于在LCD上顯示濕度百分比。

7. 編寫按鍵掃描函數(shù),用于檢測按鍵的狀態(tài)。

8. 在主函數(shù)中,初始化LCD顯示屏,并顯示初始界面。

9. 進入主循環(huán),不斷執(zhí)行以下操作:

???a. 掃描按鍵,根據(jù)按鍵的狀態(tài)更新標(biāo)準(zhǔn)濕度值。

???b. 根據(jù)當(dāng)前選擇的花卉類型,顯示相應(yīng)的花卉名稱。

???c. 獲取環(huán)境濕度,并計算百分比。

???d. 在LCD上顯示當(dāng)前濕度百分比和標(biāo)準(zhǔn)濕度。

???e. 根據(jù)濕度與標(biāo)準(zhǔn)濕度的比較結(jié)果,控制水泵、風(fēng)機和LED燈的狀態(tài)。

具體:

  1. delay函數(shù)實現(xiàn)了一個簡單的延遲函數(shù),n為延遲的時間,具體延遲的時間可以通過調(diào)整循環(huán)的次數(shù)來實現(xiàn)。
  2. lcd_cmd函數(shù)用于發(fā)送命令到液晶顯示屏。a為要發(fā)送的命令值,將它賦給P0端口,然后將RS置為0以表示發(fā)送命令,將EN置為1以啟動命令傳輸,延遲一段時間后將EN置為0以停止傳輸。
  3. lcd_data函數(shù)用于向液晶顯示屏發(fā)送數(shù)據(jù)。和lcd_cmd函數(shù)相似,不同之處在于將RS置為1以表示發(fā)送數(shù)據(jù)。
  4. display函數(shù)用于在液晶顯示屏上顯示字符串。通過指針ptr遍歷字符串,對每個字符調(diào)用lcd_data函數(shù)進行顯示。
  5. delay_10us函數(shù)用于微秒級別的延遲。通過循環(huán)次數(shù)來實現(xiàn)延遲。
  6. 利用`display_percentage`函數(shù)來將溫度值轉(zhuǎn)換成字符串,并顯示百分比值。

??1.將芯片代碼進行編譯測試,結(jié)果正確無任何錯誤

【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng),單片機,嵌入式硬件,51單片機

2.生成HEX文件,放入AT89C51芯片中運行硬件電路。

3.不同花卉的閾值濕度和土壤濕度:

【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng),單片機,嵌入式硬件,51單片機

【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng),單片機,嵌入式硬件,51單片機

【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng),單片機,嵌入式硬件,51單片機

【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng),單片機,嵌入式硬件,51單片機

【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng),單片機,嵌入式硬件,51單片機

六、軟件源碼

#include<reg51.h>

#include<intrins.h>

typedef unsigned char u8;

typedef unsigned int u16;

sbit RS=P2^0;

sbit RW=P2^1;

sbit EN=P2^2;

sbit CS=P3^0;

sbit CLK=P3^1;

sbit DIO=P3^2;

sbit D_STD=P1^0;

sbit P_STD=P1^1;

sbit R_STD=P1^2;

sbit INC=P1^3;

sbit DEC=P1^7;

sbit FMQ=P2^3;

sbit LED_RED=P2^4;

sbit WATER=P2^5;

#define LCD P0

void delay_10us(u16 ten_us)

{

while(ten_us--);

}文章來源地址http://www.zghlxwxcb.cn/news/detail-808647.html

void delay(int n)

{

int i,j;

for(i=0;i<n;i++)

for(j=0;j<255;j++);

}

void lcd_cmd(char a)

{

LCD = a;

RS = 0;

EN = 1;

delay(10);

EN = 0;

}

void lcd_data(char a)

{

LCD = a;

RS = 1;

EN = 1;

delay(10);

EN = 0;

}

void display(char *ptr)

{

while(*ptr != '\0')

{

lcd_data(*ptr);

ptr++;

}

}

u8 getADRes()

{

u8 i, data1=0, data2=0;

CS=0;

CLK=0;DIO=1;_nop_();

CLK=1;_nop_();

CLK=0;DIO=1;_nop_();

CLK=1;_nop_();

CLK=0;DIO=0;_nop_();

CLK=1;_nop_();

CLK=0;DIO=1;_nop_();

for(i=0; i<8; i++)

{

CLK=1;_nop_();

CLK=0;_nop_();

data1=(data1<<1)|(u8)DIO;

}

for(i=0; i<8; i++)

{

data2=data2|(u8)DIO<<i;

CLK=1;_nop_();

CLK=0;_nop_();

}

CS=1;

return(data1==data2)?data1:0;

}

void display_percentage(u8 value)

{

u8 temp[3];

temp[0]=value/100+'0';

temp[1]=value%100/10+'0';

temp[2]=value%100%10+'0';

if(temp[0]=='1')lcd_data(temp[0]);

lcd_data(temp[1]);

lcd_data(temp[2]);

lcd_data('%');

}

u8 key_scan(u8 mode)

{

u8 key=1;

if(mode)key=1;

if(key==1&&(D_STD==0||P_STD==0||R_STD==0||INC==0||DEC==0))

{

delay_10us(1000);

key=0;

if(D_STD==0)

return 0;

else if(P_STD==0)

return 1;

else if(R_STD==0)

return 2;

else if(INC==0)

return 3;

else if(DEC==0)

return 4;

}

else if(D_STD==1&&P_STD==1&&R_STD==1&&INC==1&&DEC==1)

{

key=1;

}

return 5;

}

void main()

{

u8 value=0, index=0, key_value=0;

char standard[3]={40, 50, 30};

RW=0;

WATER=0;

FMQ=1;

LED_RED=0;

lcd_cmd(0x01); //clear screen

lcd_cmd(0x0E); //Display On, Cursor Blinking

lcd_cmd(0x38); //2 lines and 5*7 matrix

lcd_cmd(0x80); //Force Cursor to beginning of first

display("shuixianhua");

lcd_cmd(0xC0);

display("N:");

lcd_cmd(0xC8);

display("S:");

while(1)

{

key_value=key_scan(0);

if(key_value==3){

standard[index]++;

if(standard[index]>100)standard[index]=100;

}else if(key_value==4){

standard[index]--;

if(standard[index]<0)standard[index]=0;

}else if(key_value>=0&&key_value<=2){

index=key_value;

}

switch(index){

case 0: lcd_cmd(0x80);

display("shuixianhua");

break;

case 1: lcd_cmd(0x80);

display("mudanhua");

break;

case 2: lcd_cmd(0x80);

display("meiguihua");

break;

}

lcd_cmd(0xC2);

value=getADRes()*100/255;

display_percentage(value);

lcd_cmd(0xCA);

display_percentage(standard[index]);

if(value<standard[index]){

WATER=1;

FMQ=0;

LED_RED=1;

}else{

WATER=0;

FMQ=1;

LED_RED=0;

}

}

}

六、軟件源碼
#include<reg51.h>
#include<intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
sbit CS=P3^0;
sbit CLK=P3^1;
sbit DIO=P3^2;
sbit D_STD=P1^0;
sbit P_STD=P1^1;
sbit R_STD=P1^2;
sbit INC=P1^3;
sbit DEC=P1^7;
sbit FMQ=P2^3;
sbit LED_RED=P2^4;
sbit WATER=P2^5;

#define LCD P0

void delay_10us(u16 ten_us)
{
	while(ten_us--);
}

void delay(int n)
{
	int i,j;
	for(i=0;i<n;i++)
	for(j=0;j<255;j++);
}

void lcd_cmd(char a)
{
	LCD = a;
	RS = 0;
	EN = 1;
	delay(10);
	EN = 0;
}

void lcd_data(char a)
{
	LCD = a;
	RS = 1;
	EN = 1;
	delay(10);
	EN = 0;
}

void display(char *ptr)
{
	while(*ptr != '\0')
	{
		lcd_data(*ptr);
		ptr++;
	}
}

u8 getADRes()
{
	u8 i, data1=0, data2=0;
	CS=0;
	
	CLK=0;DIO=1;_nop_();
	CLK=1;_nop_();
	
	CLK=0;DIO=1;_nop_(); 
	CLK=1;_nop_();
	
	CLK=0;DIO=0;_nop_();
	CLK=1;_nop_();
	
	CLK=0;DIO=1;_nop_(); 
	
	for(i=0; i<8; i++)
	{
		CLK=1;_nop_();
		CLK=0;_nop_();
		data1=(data1<<1)|(u8)DIO; 
	}
	
	for(i=0; i<8; i++)
	{
		data2=data2|(u8)DIO<<i;
		CLK=1;_nop_();
		CLK=0;_nop_();
	}
	CS=1;
	
	return(data1==data2)?data1:0;
}

void display_percentage(u8 value)
{
	u8 temp[3];
	temp[0]=value/100+'0';
	temp[1]=value%100/10+'0';
	temp[2]=value%100%10+'0';
	if(temp[0]=='1')lcd_data(temp[0]);
	lcd_data(temp[1]);
	lcd_data(temp[2]);
	lcd_data('%');
}

u8 key_scan(u8 mode)
{
	u8 key=1;
	if(mode)key=1;
	if(key==1&&(D_STD==0||P_STD==0||R_STD==0||INC==0||DEC==0))
	{
		delay_10us(1000);
		key=0;
		if(D_STD==0)
		return 0;
		else if(P_STD==0)
		return 1;
		else if(R_STD==0)
		return 2;
		else if(INC==0)
		return 3;
		else if(DEC==0)
		return 4;
	}
	else if(D_STD==1&&P_STD==1&&R_STD==1&&INC==1&&DEC==1)
	{
		key=1;
	}
	return 5;
}

void main()
{
	u8 value=0, index=0, key_value=0;
	char standard[3]={40, 50, 30};
	RW=0;
	WATER=0;
	FMQ=1;
	LED_RED=0;
	lcd_cmd(0x01); //clear screen
	lcd_cmd(0x0E); //Display On, Cursor Blinking
	lcd_cmd(0x38); //2 lines and 5*7 matrix
	lcd_cmd(0x80); //Force Cursor to beginning of first
	display("shuixianhua");
	lcd_cmd(0xC0);
	display("N:");
	lcd_cmd(0xC8);
	display("S:");
	while(1)
	{
		key_value=key_scan(0);
		if(key_value==3){
			standard[index]++;
			if(standard[index]>100)standard[index]=100;
		}else if(key_value==4){
			standard[index]--;
			if(standard[index]<0)standard[index]=0;
		}else if(key_value>=0&&key_value<=2){
			index=key_value;
		}
		switch(index){
			case 0: lcd_cmd(0x80);
							display("shuixianhua");
							break;
			case 1: lcd_cmd(0x80);
							display("mudanhua");
							break;
			case 2: lcd_cmd(0x80);
							display("meiguihua");
							break;
		}
		lcd_cmd(0xC2);
		value=getADRes()*100/255;
		display_percentage(value);
		
		lcd_cmd(0xCA);
		display_percentage(standard[index]);
		
		if(value<standard[index]){
			WATER=1;
			FMQ=0;
			LED_RED=1;
		}else{
			WATER=0;
			FMQ=1;
			LED_RED=0;
		}
	}
}

到了這里,關(guān)于【51單片機Keil+Proteus8.9】溫室盆栽灌溉系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Proteus8仿真:51單片機使用串口進行雙機通訊

    Proteus8仿真:51單片機使用串口進行雙機通訊

    元器件 名稱 電阻 RES 51單片機 AT89C51 電容 CAP 晶振 CRYSTAL BCD數(shù)碼管 7SEG-BCD 串口初始化: 首先根據(jù)相關(guān)的串口寄存器編寫對應(yīng)的初始化代碼: STC89C51單片機設(shè)有兩個定時器/計數(shù)器,因定時器1有4種工作方式,而常選用定時器1的工作方式2(8位自動重裝)作為波特率的溢出率。 串口

    2024年02月04日
    瀏覽(24)
  • Proteus8仿真:51單片機A/D轉(zhuǎn)換(ADC0808)

    Proteus8仿真:51單片機A/D轉(zhuǎn)換(ADC0808)

    元器件 名稱 排阻 RESPACK-8 51單片機 AT89C51 數(shù)碼管 7SEG-MPX4-CA-BLUE ADC芯片 ADC0808 滑動變阻器 POT-HG ADC0808引腳作用 項目 Value ADDA-C 選擇IN通道 IN0-7 模擬量輸入 VREF+ ADC參考電壓 VREF- ADC參考地 CLOCK 時鐘 VREF+ ADC參考電壓 OUT1-8 數(shù)字信號輸出 START 起始信號 OE 輸出使能 EOC 結(jié)束信號 ADC080

    2024年02月11日
    瀏覽(23)
  • 51單片機的智能溫室大棚控制系統(tǒng)【proteus仿真+程序+報告+原理圖】

    51單片機的智能溫室大棚控制系統(tǒng)【proteus仿真+程序+報告+原理圖】

    該系統(tǒng)由AT89C51單片機+LCD1602模塊+DS18B20溫度傳感器模塊+DS1302時間模塊+繼電器驅(qū)動模塊+電位器模塊構(gòu)成。本方案適用于智能溫室大棚、蔬菜大棚等各類設(shè)計中。 版本一: 1、 DS18B20 溫度傳感器檢測大棚溫度 2、光照/濕度電位器模擬,ADC0832進行轉(zhuǎn)換 3、水泵/風(fēng)扇/加熱絲/補光燈

    2023年04月20日
    瀏覽(37)
  • 【MCU】單片機從 keilC51 編程到 Proteus8.9 仿真再到 STC-ISP 燒錄保姆級流程

    【MCU】單片機從 keilC51 編程到 Proteus8.9 仿真再到 STC-ISP 燒錄保姆級流程

    ① 安裝 USB轉(zhuǎn)串口驅(qū)動(CH340) ② 打開文件夾“單片機軟件開發(fā)板USB轉(zhuǎn)串口CH340驅(qū)動” ③ 雙擊安裝程序“CH341SER” ④ “用戶賬戶控制”點擊“是” ⑤ 點擊“安裝” ⑥ 安裝成功點擊“確定”,然后點擊“關(guān)閉” 至此,USB轉(zhuǎn)串口驅(qū)動安裝完畢。 ① 啟動程序“Keil uVison5” ②

    2024年02月03日
    瀏覽(30)
  • 51單片機實現(xiàn)簡易計算機,Keil4代碼Proteus工程一步到位

    51單片機實現(xiàn)簡易計算機,Keil4代碼Proteus工程一步到位

    目錄 ?前言 ?Proteus硬件部分 鍵盤 程序部分 運算代碼邏輯(代碼解釋) LCD屏幕顯示運算結(jié)果 輸入部分 鍵值判斷部分 刪除按鍵的實現(xiàn) 程序執(zhí)行運算 Hello,大家好。想做關(guān)于嵌入式的一些小項目已經(jīng)很久了,今天借著我們課設(shè)的機會,給大家展示我自己對代碼邏輯的理解,為了方

    2024年02月08日
    瀏覽(16)
  • 單片機仿真軟件Proteus8.0的安裝及使用

    單片機仿真軟件Proteus8.0的安裝及使用

    介紹: Proteus是英國著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計,真正實現(xiàn)了從概念到產(chǎn)品的完整設(shè)計。是世界上唯一將電路仿真軟件、PCB設(shè)計軟件和虛擬模型仿真軟件三合一的設(shè)計平臺,其處理器模型支持8051、HC11、

    2023年04月09日
    瀏覽(27)
  • keil和proteus聯(lián)手實操單片機

    keil和proteus聯(lián)手實操單片機

    學(xué)習(xí)單片機這部分實踐課時,遇到代碼保存和格式轉(zhuǎn)換問題,下面,我們針對這個問題進行傻瓜式教學(xué)燈塔的實踐操作,keil用的是Keil uVision2 軟件,proteus用到是8.6版。 第一步,先打開keil,就會發(fā)現(xiàn)有file大圖標(biāo), ?打開file,單擊file下的new..,出現(xiàn)下面的新界面 然后再這個編

    2024年02月04日
    瀏覽(19)
  • 【51單片機系列】proteus仿真單片機的串口通信

    【51單片機系列】proteus仿真單片機的串口通信

    本文參考:https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口軟件和單片機通信。通過在proteus設(shè)計一個單片機接收PC發(fā)送的數(shù)據(jù),并將接收的數(shù)據(jù)發(fā)送出去,利用軟件【Configure Virtual Serial Port Driver】創(chuàng)建一對虛擬串口,利用軟件【串口助手】向單片機發(fā)送數(shù)據(jù)。 proteus仿真

    2024年01月17日
    瀏覽(29)
  • 【PROTEUS-51單片機串口通信仿真】

    【PROTEUS-51單片機串口通信仿真】

    本次實驗對51單片機的串口進行了雙機通信的仿真,實現(xiàn)了51單片機的簡單雙機通信;現(xiàn)對本次仿真的結(jié)構(gòu)及實現(xiàn)的功能做簡要的介紹, 本次仿真主要構(gòu)成:主機U1-MASTER、從機U2-SLAVE、以及LED顯示部分(第一部分顯示主機接收到的信息、第二部分顯示從機接收到的信號); 實

    2024年01月15日
    瀏覽(29)
  • 【Proteus仿真】【51單片機】貪吃蛇游戲

    【Proteus仿真】【51單片機】貪吃蛇游戲

    本項目使用Proteus8仿真51單片機控制器,使用8*8LED點陣、按鍵模塊等。 主要功能: 系統(tǒng)運行后,可操作4個按鍵控制小蛇方向。 B站演示視頻:https://space.bilibili.com/444388619 視頻地址:https://space.bilibili.com/444388619/video 專注于51單片機、STM32、國產(chǎn)32、DSP、Proteus、arduino、ESP32、物聯(lián)

    2024年02月06日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包