2024年物联网嵌入式最全单片机——自动浇花系统,2024年最新Service有几种启动方式

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 功能 : 小延时。

  • 输入 : 无

  • 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

while(q–);

}

/********************************************************************

  • 名称 : write_com(uchar com)

  • 功能 : 1602命令函数

  • 输入 : 输入的命令值

  • 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/********************************************************************

  • 名称 : write_data(uchar dat)

  • 功能 : 1602写数据函数

  • 输入 : 需要写入1602的数据

  • 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/********************************************************************

  • 名称 : write_sfm2(uchar hang,uchar add,uchar date)

  • 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下

write_sfm1(1,5,23)

  • 输入 : 行,列,需要输入1602的数据

  • 输出 : 无

***********************************************************************/

void write_sfm2(uchar hang,uchar add,uint date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/10%10);

write_data(0x30+date%10);

}

/********************************************************************

  • 名称 : write_string(uchar hang,uchar add,uchar *p)

  • 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

write_string(1,5,“ab cd ef;”)

  • 输入 : 行,列,需要输入1602的数据

  • 输出 : 无

***********************************************************************/

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

while(1)

{

if(*p == ‘\0’) break;

write_data(*p);

p++;

}

}

/********************************************************************

  • 名称 : init_1602()

  • 功能 : 初始化1602液晶

  • 输入 : 无

  • 输出 : 无

***********************************************************************/

void init_1602()

{

write_com(0x38);

write_com(0x38);

write_com(0x0c);

write_com(0x06);

delay_uint(1000);

write_string(1,0," shidu:00% ");

write_string(2,0," SH:00% SL:00% ");

write_sfm2(2,4,s_high); //显示湿度上限

write_sfm2(2,12,s_low); //显示湿度下限

}

/1ms延时函数******/

void delay_1ms(uint q)

{

uint i,j;

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

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

}

/读数模转换数据*********************************************/

//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的

// 1 0 0 通道

// 1 1 1 通道

unsigned char ad0832read(bit SGL,bit ODD)

{

unsigned char i=0,value=0,value1=0;

SCL=0;

DO=1;

CS=0; //开始

SCL=1; //第一个上升沿

SCL=0;

DO=SGL;

SCL=1; //第二个上升沿

SCL=0;

DO=ODD;

SCL=1; //第三个上升沿

SCL=0; //第三个下降沿

DO=1;

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

{

SCL=0;

SCL=1; //开始从第四个下降沿接收数据

value<<=1;

if(DO)

value++;

}

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

{ //接收校验数据

value1>>=1;

if(DO)

value1+=0x80;

SCL=1;

SCL=0;

}

SCL=1;

if(value==value1) //与校验数据比较,正确就返回数据,否则返回0

return value;

return 0;

}

/定时器0初始化程序**/

void time_init()

{

EA = 1; //开总中断

TMOD = 0X01; //定时器0、定时器1工作方式1

ET0 = 1; //开定时器0中断

TR0 = 1; //允许定时器0定时

}

/***独立按键程序/

uchar key_can; //按键值

void key() //独立按键程序

{

static uchar key_new;

key_can = 20; //按键值还原

P3 |= 0xf0;

if((P3 & 0xf0) != 0xf0) //按键按下

{

delay_1ms(1); //按键消抖动

if(((P3 & 0xf0) != 0xf0) && (key_new == 1))

{ //确认是按键按下

key_new = 0;

switch(P3 & 0xf0)

{

case 0xd0: key_can = 3; break; //得到k2键值

case 0xb0: key_can = 2; break; //得到k3键值

case 0x70: key_can = 1; break; //得到k4键值

}

}

}

else

key_new = 1;

}

/*按键处理显示函数/

void key_with()

{

if(key_can == 1) //设置键

{

menu_1 ++;

if(menu_1 >= 3)

{

menu_1 = 0;

init_1602() ; //初始化显示

}

}

if(menu_1 == 1) //设置湿度上限

{

if(key_can == 2)

{

s_high ++ ; //湿度上限值加1

if(s_high > 99)

s_high = 99;

}

if(key_can == 3)

{

s_high – ; //湿度上限值减1

if(s_high <= s_low)

s_high = s_low + 1 ;

}

write_sfm2(2,4,s_high); //显示湿度上限

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

f(key_can == 3)

{

s_high – ; //湿度上限值减1

if(s_high <= s_low)

s_high = s_low + 1 ;

}

write_sfm2(2,4,s_high); //显示湿度上限

[外链图片转存中…(img-vyZgtRfw-1715653967578)]
[外链图片转存中…(img-lyVwR1Tg-1715653967579)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值