c语言做土壤湿度传感器程序,单片机土壤湿度传感器设计 程序编译错误
捕獲.PNG (74.97 KB, 下載次數: 1)
沒有聲明,這里怎么解決
2019-12-19 16:18 上傳
#include //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include "intrins.h"
#ifndef _XPT2046_H_
#define _XPT2046_H_
#define? ???u8? ?? ?? ?? ?? ?? ?? ?? ???unsigned char
#define? ???u16? ?? ?? ?? ?? ?? ? unsigned int
#define? ???uchar? ?? ?? ?? ?? ?? ?? ?? ???unsigned char
#define? ???uint? ?? ?? ?? ?? ?? ? unsigned int
uchar yushe_Moisture=30;? ?? ?? ?? ?? ?? ?? ?? ?//Moisture預設值
uchar Moisture;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//用于讀取ADC數據
//運行模式
uchar Mode=0;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//=1是設置濕度閥值? ?? ???=0是正常監控模式
uchar Mode_1=0;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//0:自動 1;手動
//管腳聲明
sbit Relay= P1^6;? ?? ?? ?? ?? ???//濕度報警
void delay_ms(uint q)
{
uint i,j;
for(i=0;i
for(j=0;j<110;j++);
}
//LCD管腳聲明
sbit LCDRS = P2^6;
sbit LCDRW = P2^5;
sbit LCDEN = P2^7;
//LCD延時
void LCDdelay(uint z)? ?? ?? ?? ?? ?? ?//該延時大約100us(不精確,液晶操作的延時不要求很精確)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//寫命令
void write_com(uchar com)
{
LCDRS=0;
LCDRW=0;
P0=com;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
//寫數據
void write_data(uchar date)
{
LCDRS=1;
//? ?? ???LCD_WriteData(date);
LCDRW=0;
P0=date;
LCDdelay(5);
LCDEN=1;
LCDdelay(5);
LCDEN=0;
}
void SelectPosition(unsigned char x,unsigned char y)
{
if (x == 0)
{
write_com(0x80 + y);? ???//表示第一行
}
else
{
write_com(0xC0 + y);? ?? ?//表示第二行
}
}
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
SelectPosition(x,y) ;
while (*s)
{
write_data( *s);
s ++;
}
}
void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
{
SelectPosition(x,y) ;
if(l>=5)
write_data(0x30+s/10000%10);? ?? ???//萬位
if(l>=4)
write_data(0x30+s/1000%10);? ?? ?? ?? ?? ? //千位
if(l>=3)
write_data(0x30+s/100%10);? ?? ?? ?? ?? ? //百位
if(l>=2)
write_data(0x30+s/10%10);? ?? ?? ?? ?? ?? ?? ?? ?//十位
if(l>=1)
write_data(0x30+s%10);? ?? ?? ?? ?? ? //個位
}
/*1602指令簡介
write_com(0x38);//屏幕初始化
write_com(0x0c);//打開顯示 無光標 無光標閃爍
write_com(0x0d);//打開顯示 陰影閃爍
write_com(0x0d);//打開顯示 陰影閃爍
*/
//1602初始化
void Init1602()
{
uchar i=0;
write_com(0x38);//屏幕初始化
write_com(0x0C);//打開顯示 無光標 無光標閃爍
write_com(0x06);//當讀或寫一個字符是指針后一一位
write_com(0x01);//清屏
}
void Display_1602(yushe_Moisture,temp)
{
//顯示預設濕度
LCD_Write_Char(1,12,yushe_Moisture,3) ;
//時時濕度
LCD_Write_Char(0,10,temp,3) ;
}
sbit DOUT = P3^7;? ?? ?? ? //輸出
sbit CLK??= P3^6;? ?? ?? ? //時鐘
sbit DIN??= P3^4;? ?? ?? ? //輸入
sbit CS? ?= P3^5;? ?? ?? ? //片選
uint Read_AD_Data(uchar cmd);
uint SPI_Read(void);
void SPI_Write(uchar dat);
void SPI_Start(void)
{
CLK = 0;
CS??= 1;
DIN = 1;
CLK = 1;
CS??= 0;
}
/****************************************************************************
*函數名:SPI_Write
*輸??入:dat:寫入數據
*輸??出:無
*功??能:使用SPI寫入數據
****************************************************************************/
void SPI_Write(uchar dat)
{
uchar i;
CLK = 0;
for(i=0; i<8; i++)
{
DIN = dat >> 7;? ?? ?? ? //放置最高位
dat <<= 1;
CLK = 0;? ?? ?? ?? ?? ?? ?? ?? ?//上升沿放置數據
CLK = 1;
}
}
/****************************************************************************
*函數名:SPI_Read
*輸??入:無
*輸??出:dat:讀取 到的數據
*功??能:使用SPI讀取數據
****************************************************************************/
uint SPI_Read(void)
{
uint i, dat=0;
CLK = 0;
for(i=0; i<12; i++)? ?? ?? ?? ?? ? //接收12位數據
{
dat <<= 1;
CLK = 1;
CLK = 0;
dat |= DOUT;
}
return dat;
}
/****************************************************************************
*函數名:Read_AD_Data
*輸??入:cmd:讀取的X或者Y
*輸??出:endValue:最終信號處理后返回的值
*功??能:讀取觸摸數據
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{
uchar i;
uint AD_Value;
CLK = 0;
CS??= 0;
SPI_Write(cmd);
for(i=6; i>0; i--);? ?? ?? ?//延時等待轉換結果
CLK = 1;? ?? ?? ? //發送一個時鐘周期,清除BUSY
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
AD_Value=SPI_Read();
CS = 1;
return AD_Value;
}
sbit Key1=P3^1;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//設置鍵
sbit Key2=P3^0;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//加按鍵
sbit Key3=P3^2;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//減按鍵
#define KEY_SET? ?? ?? ?? ?? ???1? ?? ?? ?? ?? ? //設置
#define KEY_ADD? ?? ?? ?? ?? ?? ?? ?? ?2? ?? ?? ?? ?? ? //加
#define KEY_MINUS? ?? ?? ?? ?? ? 3? ?? ?? ?? ?? ? //減
u8 Key_Scan()
{
static u8 key_up=1;//按鍵按松開標志
if(key_up&&(Key1==0||Key2==0||Key3==0))
{
delay_ms(10);//去抖動
key_up=0;
if(Key1==0)? ?? ?? ?? ?? ?? ?? ?? ?return 1;
else if(Key2==0)return 2;
else if(Key3==0)return 3;
}
else if(Key1==1&&Key2==1&&Key3==1)
key_up=1;
return 0;// 無按鍵按下
}
void main (void)
{
u8 key;
Moisture=XPT2046;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//讀取濕度值
Moisture=100-(Moisture*100/256);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//讀取濕度值
Init1602();? ?? ?? ?? ?? ?? ?? ?? ???//調用初始化顯示函數
LCD_Write_String(0,0," Moisture:000%");??//開機界面
LCD_Write_String(1,0,"MODE:A??SET:000%");??//
delay_ms(1000);
Moisture=XPT2046(0);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//讀取濕度值
Moisture=100-(Moisture*100/256);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//讀取濕度值
while (1)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//主循環
{
key=Key_Scan();? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //按鍵掃描
Moisture=XPT2046(0);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//讀取濕度值
Moisture=100-(Moisture*100/256);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//讀取濕度值
if(key==KEY_SET)
{
Mode++;
}
switch(Mode)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//判斷模式的值
{
case 0:? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //監控模式
{
if(key==KEY_ADD)
{
Mode_1=!Mode_1;
if(Mode_1)
LCD_Write_String(1,5,"H");??//
else
LCD_Write_String(1,5,"A");??//
}
if(Mode_1)
{
if(key==KEY_MINUS)
{
Relay=!Relay;
}
}
Display_1602(yushe_Moisture,Moisture);??//顯示預設濕度,濕度值
if(!Mode_1)
{
if(Moisture>=yushe_Moisture)? ?? ?? ? //濕度值大于等于預設值時
{
Relay=1;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//關閉繼電器
}
else? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //濕度值小于預設值時
{
Relay=0;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//打開繼電器
}
}
break;
}
case 1:? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//預設濕度模式
{
SelectPosition(1,11) ;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//指定位置
write_com(0x0d);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//打開顯示 無光標 光標閃爍
if(key==KEY_ADD)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//加鍵按下
{
if(yushe_Moisture>=99)? ?? ???//當閥值加到大于等于99時
yushe_Moisture=99;? ?? ?? ?? ?//閥值固定為99
yushe_Moisture++;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//預設濕度值(閥值)加1,最大為100
LCD_Write_Char(1,12,yushe_Moisture,3) ;//顯示預設濕度
}
if(key==KEY_MINUS)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//減鍵按下
{
if(yushe_Moisture<=1)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //當濕度上限值減小到1時
yushe_Moisture=1;? ?? ?? ?? ?? ?? ?//固定為1
yushe_Moisture--;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//預設溫度值減一,最小為0
LCD_Write_Char(1,12,yushe_Moisture,3) ;//顯示預設濕度
}
break;
}
default? ?? ???:
{
write_com(0x38);//屏幕初始化
write_com(0x0C);//打開顯示 無光標 無光標閃爍
Mode=0;? ?? ?? ?? ?? ?? ?? ?? ?//恢復正常模式
break;
}
}
}
}
總結
以上是生活随笔為你收集整理的c语言做土壤湿度传感器程序,单片机土壤湿度传感器设计 程序编译错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android过渡动画,发现掘金小秘密
- 下一篇: 英语写作——常用的 过度词-连接词