c语言做土壤湿度传感器程序,单片机土壤湿度传感器设计 程序编译错误

3f829e29e76caa8c3b1f630a6b27d58d.gif

捕获.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;

}

}

}

}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值