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

一、系统方案

本设计采用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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11013 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元3 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133973 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315203 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang3 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟3 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126913 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315203 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机
星马梦缘3 天前
驱动层开发——蜂鸣器驱动
stm32·单片机·嵌入式硬件·hal·驱动