标题:
17年全国大学TI杯P题水情监测程序
[打印本页]
作者:
农夫三泉
时间:
2018-7-7 15:39
标题:
17年全国大学TI杯P题水情监测程序
单片机源程序如下:
#include "15_INIT.h"
#include "LCD12864.h"
#include "UART_INIT.h"
void main(void)
{
unsigned int PreLength=0;
Delay_ms(10); //等待上电稳定
ADC_Init(); //ADC初始化
UART_Init(); //串口初始化
LCD12864_Init(); //LCD1602初始化
k = PreLength = 0;
while(1)
{
ADC_Process(); //ADC数据采集并且处理
//Delay_ms(1);
if(b_flag==1)
{
b_flag = 0;
UART_Send(0X55);
PreLength = GLengthLoh[0] * 256 + GLengthLoh[1]-5;
conversion(PreLength);
if(PreLength <= 4500 )
{
LCD12864_WriteCMD(0x90 + 5);
LCD12864_WriteDAT(bai + 0x30);
LCD12864_WriteDAT(shi + 0x30);
LCD12864_WriteDAT(ge + 0x30);
//LCD12864_WriteDAT('.');
LCD12864_WriteDAT(part + 0x30);
}
else
{
LCD12864_WriteCMD(0x90 + 5);
//LCD12864_WriteDAT('-');
LCD12864_WriteDAT('-');
LCD12864_WriteDAT('-');
LCD12864_WriteDAT('-');
LCD12864_WriteDAT('-');
}
}
}
}
/***********************************************
函数名称:LCD12864_Init
功 能:LCD12864初始化函数
入口参数:无
返 回 值:无
备 注:并行模式
************************************************/
void LCD12864_Init(void)
{
Delay_ms(100); //上电延时100ms
LCD12864_WriteCMD(0x01);//清屏
LCD12864_Display(LINE1+0," <水情检测系统>" ); //第一行显示字符
LCD12864_Display(LINE2+0,"水位高度: mm" ); //第二行显示字符
LCD12864_Display(LINE3+0,"当前PH值:"); //第三行显示字符
LCD12864_Display(LINE4+0,"电源电压: V"); //第三行显示字符
}
/***********************************************
函数名称:ADC_Process
功 能:ADC数据处理
入口参数:无
返 回 值:无
备 注:采集32个数据进行求平均
************************************************/
void ADC_Process(void)
{
//从AD通道采集数据,并且进行累加
ADCSum1+=ADC_GetResult(ADC_CHANNEL2);
ADCSum2+=ADC_GetResult(ADC_CHANNEL3);
//计数器加1
ADCCnt++;
//如果累加到32个数据,则开始处理
if(ADCCnt==32)
{
ADCCnt=0;
//(ADCSum>>5)等价于(ADCSum/32)
//对32个数据取平均
ADCSum1=ADCSum1>>5;
ADCSum2=ADCSum2>>5;
//ADC=(Vin/Vref)*1024
//根据ADC计算公式进行转换
ADCSum1=ADCSum1*VCC/1024;
ADCSum2=ADCSum2*VCC/1024;
//保存转换结果并进行类型转换,方便显示
ADCResult1=(uint)ADCSum1;
ADCResult2=(uint)ADCSum2;
//清除AD暂存变量
ADCSum1=ADCSum2=0;
//显示测量结果
//将要显示的数值转换成字符型
//因为12864显示的是字符,所以数值必须转换,否则显示乱码
App_FormatDec(DispBuf1,ADCResult1);
App_FormatDec(DispBuf2,ADCResult2);
//显示该项菜单设置内容
PH_Transfer[0] = DispBuf1[0];
PH_Transfer[1] = DispBuf1[2];
PH_Transfer[2] = DispBuf1[3];
PH_Transfer[3] = DispBuf1[4];
PH = (PH_Transfer[0]-0x30)*1000 + (PH_Transfer[1]-0x30)*100 + (PH_Transfer[2]-0x30)*10 + (PH_Transfer[3]-0x30);
PH1 = (42413-PH*10000) / 1773 + 1870;
PH_Transfer[0] = PH1 / 10000 % 10 + '0';
PH_Transfer[1] = PH1 / 1000 % 10 + '0';
PH_Transfer[2] = '.';
PH_Transfer[3] = PH1 / 100 % 10 + '0';
PH_Transfer[4] = PH1 / 10 % 10 + '0';
PH_Transfer[5] = PH1 % 10 + '0';
LCD12864_Display(LINE3+5,PH_Transfer);
LCD12864_Display(LINE4+5,DispBuf2);
}
}
/***********************************************
函数名称:ADC_Init
功 能:ADC初始化函数
入口参数:无
返 回 值:无
备 注:无
************************************************/
void ADC_Init(void)
{
P1ASF |=0x0C; //P1.7口做为AD转换通道
ADC_RES=0; //ADC数据寄存器清零
ADC_CONTR=ADC_POWER | ADC_SPEEDLL;
//打开AD转换器电源,设置转换速率
Delay_ms(2); //延时2ms,等待ADC上电稳定
}
/***********************************************
函数名称:ADC_GetResult
功 能:获取ADC转换的结果
入口参数:ch:转换的通道
返 回 值:unsigned int:转换得到的数据
备 注:使用查询方式
************************************************/
uint ADC_GetResult(uchar ch)
{
uint ADC_Value;
ADC_CONTR =ADC_POWER | ADC_SPEEDLL| ch | ADC_START; //启动ADC
_nop_(); //延时
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待AD转换完成
ADC_CONTR &= ~ADC_FLAG; //清除转换完成标记
ADC_Value=ADC_RES; //读取ADC高八位
ADC_Value=(ADC_Value<<2)|ADC_RESL;//读取ADC低两位,并且数据合并
return ADC_Value;
}
/***********************************************
函数名称:App_FormatDec
功 能:整型数据转字符串函数
入口参数:value:整型数据
返 回 值:pstr:指向字符串的指针。
备 注:无
************************************************/
void App_FormatDec (uchar *pstr, uint value)
{
uchar i;
uint mult;
uint nbr;
mult = 1;
//因为这里要处理的value输入格式为四位数,例如1234
//故初始让mult=1000
for (i = 0; i < 3; i++)
{
mult *= 10;
}
i=0;
while (mult > 0)
{
i++;
//第一次整除,获取最高位数据,例如1234/1000=1
//其他位类推
nbr = value / mult;
//如果得到的数据不是0
if (nbr != 0)
{
//整型数据+'0',将自动转换成字符数据,例如1+'0'将变成字符'1'
*pstr = nbr + '0';
}
else
{
//如果数据是0,则直接转换成字符'0'
*pstr = '0';
}
//移动指针,进行其他位数据处理
pstr++;
if(i==1)
{
*pstr = '.'; //显示小数点
pstr++;
}
value %= mult;
mult /= 10;
}
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
水情检测.zip
(59.76 KB, 下载次数: 13)
2018-7-7 15:37 上传
点击文件名下载附件
超声波+PH计程序
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1