毕设源码 基于51单片机自动浇花1602液晶显示设计

1、系统功能介绍

  • 系统构成:

    • 采用STC89C52单片机+ADC0832+LCD1602液晶+土壤湿度传感器+抽水电机+ 按键+蜂鸣器设计而成。
  • 系统功能:

      1. 产品自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。
      1. 采集LCD1602液晶显示土壤湿度,报警参数可以同时显示出来。
      1. 可以设置湿度的上下限报警范围。
      1. 当湿度低于下限值时,打开水泵进行抽水自动灌溉同时声光报警,当湿高于上限值时,自动关闭水泵停止灌溉。
      1. 具有手动模式,按减键手动打开抽水电机,可以按加键手动关闭抽水电机。
  • 可根据本篇文章完成毕业设计的开题报告、任务书、设计等

2、资料下载

3、系统电路介绍

3.1、STC89C52单片机核心系统电路设计

  • STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。

STC89C52主要特性如下:

  • (1)8K字节程序存储空间;
  • (2)512字节数据存储空间;
  • (3)内带4K字节EEPROM存储空间;
  • (4)可直接使用串口下载

单片机最小系统电路图如下图所示

实物图:

3.2、ADC0832 A/D采样电路设计

  • ADC0832其实就是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。是目前国内应用最广泛的8位通用A/D芯片。

芯片特性:

  • 1)8路输入通道,8位A/D转换器,即分辨率为8位。
  • 2)具有转换起停控制端。
  • 3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)
  • 4)单个+5V电源供电
  • 5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
  • 6)工作温度范围为-40~+85摄氏度
  • 7)低功耗,约15mW。

电路原理图:

实物图:

3.3、LCD1602液晶显示模块电路设计

  • LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。

LCD1602主要技术参数如下

  • (1)显示容量为16×2个字符;
  • (2)芯片工作电压为4.5~5.5V;
  • (3)工作电流为2.0mA(5.0V);
  • (4)模块最佳工作电压为5.0V;
  • (5)字符尺寸为2.95×4.35(W×H)mm。

电路原理图:

实物图:

3.4、5V水泵控制电路设计

  • 在本系统中,通过三极管驱动水泵,当单片机的控制引脚为高电平时,三极管导通,此时水泵开始工作

电路原理图

实物图

4、程序设计

4.1、独立按键程序

void key()	 //独立按键程序
{
 	P3 |= 0xf0;
	if((P3 & 0xf0) != 0xf0)		//按键按下
	{
		delay_1ms(1);	     	//按键消抖动
		if((P3 & 0xf0) != 0xf0)
		{						//确认是按键按下
 			switch(P3 & 0xf0)
			{
				case 0xd0: key_can = 3; break;	   //得到k2键值
				case 0xb0: key_can = 2; break;	   //得到k3键值
				case 0x70: key_can = 1; break;	   //得到k4键值
			}					
		}			
	}
}

4.2、ad0832读取电压值程序

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=ODD;
	SCL=1;  	//第二个上升沿
	SCL=0;
	DO=SGL;
	for(i=0;i<8;i++)
	{
		SCL=0; //开始从第四个下降沿接收数据
		value<<=1;
		SCL=1;
		if(DO)
			value++;						
	}
	return value;
}

4.3、LCD1602显示数据程序

/***********************************************
函数名称:DispStr
功    能:让液晶从某个位置起连续显示一个字符串
参    数:x--位置的列坐标
          y--位置的行坐标
          ptr--指向字符串存放位置的指针
返回值  :无
***********************************************/
void DispStr(uchar x,uchar y,uchar *ptr) 
{
    uchar *temp;
    uchar i,n = 0;
    
    temp = ptr;
    while(*ptr++ != '\0')   n++;    //计算字符串有效字符的个数
    
    for (i=0;i<n;i++)
    {
        Disp1Char(x++,y,temp[i]);
        if (x == 0x10)
        {
            break;
        }
    }
}

4.4、毫秒延时程序

/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
 while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
 while(t--)
 {
     //大致延时1mS
     DelayUs2x(245);
	 DelayUs2x(245);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值