标题:
单片机检测温度,光照,测距,串口上传程序
[打印本页]
作者:
tengjianhao
时间:
2019-8-3 11:48
标题:
单片机检测温度,光照,测距,串口上传程序
/*------------------------------------------------
包含头文件
------------------------------------------------*/
#include<reg52.h>
#include"uart.h"
#include"lcd.h"
#include"ds1302.h"
#include"18b20.h"
#include"xpt2046.h"
#include"hcsr04.h"
#include"delay.h"
#include<stdio.h>
#include"hcsr04.h"
#include"key.h"
char CMER [10] = "厘米--";
char TIER[10] = "摄氏度--";
char TIMER[6] = "时间\n";
char LIGHTH[10] = "光照强度--";
bit flag =0;
unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.',':','-','M','S'};
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
// ES=1; //打开接收中断
// EA=1; //打开总中断
TR1=1; //打开计数器
}
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/*------------------------------------------------
S级延时
------------------------------------------------*/
void DelayS(unsigned char u)
{
while(u--)
{
DelayMs(250);
DelayMs(250);
DelayMs(250);
DelayMs(250);
}
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char DisNum = 0; //显示用指针
unsigned int time=0;
unsigned long S=0;
unsigned char i, disbuff[2] ={0,0,};
unsigned char disp[3];
unsigned char datas[] = {0, 0, 0, 0};
int temp,light; //温度值
float tp;
Int0Configuration();
InitUART (); //初始化串口
LCD_Init(); //初始化LCD1602
Ds1302Init();
DelayMs(30); //稳定
zhongduan() ;
UsartConfiguration();
LCD_Write_String(0,0,"Welcome to me!");//液晶显示测试
LCD_Write_String(0,1,"tengjianhao");
DelayS(2);
LCD_Clear();
while(1)
{
key();
LCD_Write_String(0,0,"Time:");//液晶显示测试
LCD_Write_Com(0x85);
LCD_Write_Data('0'+TIME[2]/16) ;
LCD_Write_Data('0'+(TIME[2]&0x0f));
SBUF = '0'+TIME[2]/16;//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '1'+TIME[2]/16;//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '.';//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
LCD_Write_Data('-');
LCD_Write_Data('0'+TIME[1]/16) ;
LCD_Write_Data('0'+(TIME[1]&0x0f));
SBUF = '0'+TIME[1]/16;//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '1'+TIME[1]/16;//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '.';//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
LCD_Write_Data('-');
LCD_Write_Data('0'+TIME[0]/16) ;
LCD_Write_Data('0'+(TIME[0]&0x0f));
SBUF = '0'+TIME[0]/16;//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
SBUF = '1'+TIME[0]/16;//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
for(i=0; i<8; i++)
{
SBUF = TIMER[i];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
}
LCD_Write_String(0,1,"T:");
temp=ReadTemperature();//读取温度
DelayS(1);
temp=ReadTemperature();
tp=temp;
temp=tp*0.0625*100+0.5;
datas[0] = temp % 10000 / 1000;
datas[1] = temp % 1000 / 100;
LCD_Write_Com(0x80+0x42);
LCD_Write_Data('0'+datas[0]) ;
LCD_Write_Data('0'+datas[0]&0x0f) ;
SBUF = '0'+datas[0];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
LCD_Write_Com(0x80+0x43);
LCD_Write_Data('0'+datas[1]);
LCD_Write_Data('0'+datas[1]&0x0f) ;
SBUF = '0'+datas[1];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
for(i=0; i<10; i++)
{
SBUF = TIER[i];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
}
LCD_Write_Com(0x80+0x44);
LCD_Write_Data('C') ;
LCD_Write_String(6,1,"L:");
light = Read_AD_Data(0xA4)/10;
disp[0]=light%1000/100;//百位
disp[1]=light%1000%100/10;//个位
disp[2]=light%1000%100%10;
LCD_Write_Com(0x80+0x48);
LCD_Write_Data('0'+disp[1]) ;
LCD_Write_Data('0'+disp[1]&0x0f) ;
SBUF = '0'+disp[1];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
LCD_Write_Com(0x80+0x49);
LCD_Write_Data('0'+disp[2]) ;
LCD_Write_Data('0'+disp[2]&0x0f) ;
SBUF = '0'+disp[2];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
for(i=0; i<10; i++)
{
SBUF = LIGHTH[i];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
}
LCD_Write_Com(0x80+0x4A);
LCD_Write_Data('%') ;
LCD_Write_String(12,1,"S:");
chaosheng() ;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/1000; //算出来是CM
if((S>=100)||flag==1) //超出测量范围显示“-”
{
flag=0;
SBUF='0';//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0;
SBUF='0';//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0;
for(i=0; i<10; i++)
{
SBUF = CMER [i];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
}
LCD_Write_Com(0x80+0x4E);
LCD_Write_Data(ASCII[12]) ;
LCD_Write_Com(0x80+0x4F);
LCD_Write_Data(ASCII[12]) ;
}
else
{
disbuff[0]=S%1000%100/10;
SBUF = '0'+disbuff[0];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
disbuff[1]=S%1000%10 %10;
SBUF = '0'+disbuff[1];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
for(i=0; i<10; i++)
{
SBUF = CMER [i];//将接收到的数据放入到发送寄存器
while (!TI); //等待发送数据完成
TI = 0;
}
LCD_Write_Com(0x80+0x4E);
LCD_Write_Data(ASCII[disbuff[0]]) ;
LCD_Write_Com(0x80+0x4F);
LCD_Write_Data(ASCII[disbuff[1]]);
}
}
}
复制代码
多功能测量(功能).rar
2019-8-3 11:45 上传
点击文件名下载附件
下载积分: 黑币 -5
107.86 KB, 下载次数: 13, 下载积分: 黑币 -5
作者:
admin
时间:
2019-8-3 15:22
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1