基于STC15单片机温度光照检测系统-proteus仿真-源程序

一、系统方案

1、本设计采用STC15单片机作为主控器。

2、光敏电阻采集光照值送到液晶1602和串口显示。

3、DS18B20采集温度值,送到液晶1602和串口显示。

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

/----------------------------
初始化ADC
----------------------------
/

void InitADC()

{

P1M0 =1;

P1M1 =0;

P1 = 0Xff;

P1ASF = 0xff; //设置P1口为AD口

ADC_RES = 0; //清除结果寄存器

ADC_RESL = 0; //清除结果寄存器

ADC_CONTR = ADC_POWER | ADC_SPEEDLL;

delay_ms(2); //ADC上电并延时

}

2、液晶显示程序

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

功能描述:LCD1602写命令函数

入口参数int8 com

返回值:无

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

void lcd_wcom(uint8 com)

{

lcd1602_rs=0; //选择指令寄存器

lcd1602_rw=0; //选择写

P0=com; //把命令字送入P0

delay_ms(1); //延时一小会儿,让1602准备接收数据

lcd1602_en=1; //使能线电平变化,命令送入1602的8位数据口

lcd1602_en=0;

}

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

功能描述:LCD1602写数据函数

入口参数:uint8 dat

返回值:无

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

void lcd_wdat(uint8 dat)

{

lcd1602_rs=1; //选择数据寄存器

lcd1602_rw=0; //选择写

P0=dat; //把要显示的数据送入P0

delay_ms(1); //延时一小会儿,让1602准备接收数据

lcd1602_en=1; //使能线电平变化,数据送入1602的8位数据口

lcd1602_en=0;

}

3、DS18B20程序

sbit DQ=P2^4; //定义DS18B20总线I/O

//--声明全局函数--//

void Delay(uint i);

uchar Init_DS18B20(void);

uint ReadTemperature(void);

/延时子程序 /

void Delay(uint i) //约7.5us 真实约1.3us

{

while( i-- );

}

/读一个字节 /

unsigned char ReadOneChar(void)

{

unsigned char i=0;

unsigned char dat=0;

for (i=8; i>0; i--)

{

DQ=0; // 给脉冲信号

dat>>=1;

DQ=1; // 给脉冲信号

if(DQ)

dat|=0x80;

Delay(100); //至少60us

}

return(dat);

}

/写一个字节 /

void WriteOneChar(unsigned char dat)

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ=0;

DQ=dat&0x01;

Delay(100); //至少60us

DQ=1;

Delay(3); //至少1us

dat>>=1;

}

}

//发送温度转换命令

void Tmpchange(void)

{

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0x44); //启动温度转换

}

//DS18B20初始化

uchar Init_DS18B20(void)

{

unsigned char x=0;

DQ=1;

Delay(1000); //稍做延时

DQ=0; //单片机将DQ拉低

Delay(1000); //精确延时,大于480us

DQ=1; //拉高总线

Delay(80);

x=DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败

DQ=1;

Delay(500);

return x;

}

//读取温度值

uint ReadTemperature(void)

{

unsigned char a=0;

unsigned char b=0;

uint t=0;

Tmpchange();

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器

a=ReadOneChar(); //读低8位

b=ReadOneChar(); //读高8位

t=b;

t<<=8;

t=t|a; //高8位左移与低8位相或得到温度值

return t;

}

4、核心算法程序

/----------------------------
读取ADC结果 20210101 注释GetADCResult 用GetADCResultint代替
----------------------------
/

unsigned int GetADCResultint(unsigned char ch)

{

unsigned int ret=0;

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
nop (); //等待4个NOP
nop ();
nop ();
nop ();

while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成

ADC_CONTR &= ~ADC_FLAG; //Close ADC

ret = ADC_RES*4 + ADC_RESL;

return ret; //返回ADC结果

}

四、 proteus仿真设计

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

相关推荐
厦门辰迈智慧科技有限公司2 小时前
全功能数据采集仪mcu主要用途
单片机·嵌入式硬件·水库大坝安全监测·数据采集仪mcu
jl48638212 小时前
变比测试仪显示屏的“标杆“配置!如何兼顾30000小时寿命与六角矢量图精准显示?
人工智能·经验分享·嵌入式硬件·物联网·人机交互
清风6666663 小时前
基于单片机的智能电热水壶设计与温度控制系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
Balabala噗3 小时前
JLink-Cortex-M Error报错-No Cortex-M SW Device Found-解决办法整理
单片机·嵌入式硬件
点灯小铭3 小时前
基于单片机的智慧农业温度湿度滴灌自动控制系统设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
零一iTEM5 小时前
MAX98357A_音频输出测试
单片机·嵌入式硬件·开源·音视频·硬件工程
逐步前行5 小时前
STM32_标准库结构
stm32·单片机·嵌入式硬件
不做无法实现的梦~6 小时前
PX4各个模块的作用(3)
linux·stm32·嵌入式硬件·机器人·自动驾驶
清风6666666 小时前
基于单片机的喷漆机器人自动控制系统
单片机·嵌入式硬件·机器人·毕业设计·课程设计·期末大作业