基于单片机的万年历温度无线传输控制系统系统

一、系统方案

本设计采用DS1302采集年月日时分秒,DS18B20采集温度值,按键设置温度报警上下限,实际测量温度低于下限或高于上限,蜂鸣器报警,同时将测量温度上传到蓝牙助手。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

P0 = P1 = P2 = P3 = 0xff; //单片机IO口初始化为1

init_time0(); //初始化定时器

init_1602(); //lcd1602初始化

init_1602_dis_csf(); //lcd1602初始化显示

复制代码
temperature = read_temp();	//先读出温度的值
delay_1ms(650);

Uart_init();

2、液晶显示程序

/lcd1602写命令函数 */

void write_com(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/lcd1602写数据函数 */

void write_data(uchar dat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

3、按键程序

/***独立按键程序 /

uchar key_can; //按键值

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

{

static uchar key_new;

key_can = 20; //按键值还原

P3 |= 0x78; //对应的按键IO口输出为1

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

{

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

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

{ //确认是按键按下

key_new = 0;

switch(P3 & 0x78)

{

case 0x70: key_can = 4; break; //得到按键值

case 0x68: key_can = 3; break; //得到按键值

case 0x58: key_can = 2; break; //得到按键值

case 0x38: key_can = 1; break; //得到按键值

}

// write_sfm2(1,0,key_can); //显示按键值

}

}

else

key_new = 1;

}

4、核心算法程序

/主函数 ***/

void main()

{

P0 = P1 = P2 = P3 = 0xff; //单片机IO口初始化为1

init_time0(); //初始化定时器

init_1602(); //lcd1602初始化

init_1602_dis_csf(); //lcd1602初始化显示

复制代码
temperature = read_temp();	//先读出温度的值
delay_1ms(650);

Uart_init();

复制代码
while(1)
{
	  if(temperature>ah*10){led1=0;}
	  else
	  {led1=1; }
	if(temperature<al*10){led2=0;}
	  else
	  {led2=1; }
	


	  if((temperature>ah*10)||(temperature<al*10)){beep=0;}
	  else
	  {beep=1; }
	
			mcu_pc('W');
       	mcu_pc('e');
      	mcu_pc('e');
				mcu_pc('d');
       	mcu_pc('u');
		mcu_pc(':');
		mcu_pc(' ');
		mcu_pc(temperature/100+0x30);
			mcu_pc(temperature%100/10+0x30);
       	mcu_pc('.');
				mcu_pc(temperature%10+0x30);
		  	mcu_pc('C');
	   	mcu_pc(0X0D);
	    mcu_pc(0X0A);
		
	key();			 //按键程序
	if(key_can < 10)
	{
			key_with();	
			read_time();	
	}
	
	if(flag_200ms == 1)
	{	
		flag_200ms = 0;
		if(menu_1 == 0)
		{
			read_time();		  //读时间
			EA=0;
			temperature = read_temp();	//先读出温度的值
			EA=1;
			init_1602_ds1302();   //显示时钟
		}
	}
	delay_1ms(1);
}

}

四、 proteus仿真设计

Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
_Ningye6 小时前
STM32 — 6.1 TIM定时中断
stm32·单片机·嵌入式硬件
小白学电子_6 小时前
proteus仿真51单片机通过矩阵按键和数码管制作简单计算器
嵌入式硬件·51单片机·proteus
FreakStudio8 小时前
把 Flask 搬进 ESP32,高中生自研嵌入式 Web 框架 MicroFlask !
python·单片机·嵌入式·cortex-m3·异步编程·电子diy
AnalogElectronic8 小时前
RP2040 pico 实验6,光敏电阻传感器模块(LM393 比较器版)
单片机
17(无规则自律)8 小时前
【Linux驱动实战】:字符设备之ioctl与mutex全解析
linux·c语言·驱动开发·嵌入式硬件
电子工程师成长日记-C518 小时前
51单片机4乘4计算器
单片机·嵌入式硬件·51单片机
梅尔文.古8 小时前
ADCU-Ethernet-以太网在AUTOSAR与Linux架构下对比
arm开发·单片机·汽车
没有医保李先生9 小时前
esp32和stm32的工程宏定义
stm32·单片机·嵌入式硬件
炸膛坦客9 小时前
单片机/C/C++八股:(十五)内存对齐、结构体内存对齐
c语言·开发语言·单片机
szxinmai主板定制专家9 小时前
基于ZYNQ MPSOC船舶数据采集仪器设计(一)总体设计方案,包括振动、压力、温度、流量等参数
arm开发·人工智能·嵌入式硬件·fpga开发