``一、评估版使用说明
1. 功能
序号
| 功能
| 描述
| 1
| MCU
| STC15F2K60S2
| 2
| 一路模拟IO
| AD转换,反应土壤湿度
| 3
| I/O
| 5路I/O
| 4
| LED
| 工作指示灯
| 5
| 按键
| 复位按键
| 6
| 电源
| 5V电源输入
|
注:可实现的功能:
a.控制湿度,通过屏幕显示当前土壤湿度
b.对湿度的设定,通过屏幕显示
c.控制湿度达到设定值附近
2、需使用的工具
a.硬件:STC15F2K60S2最小系统,土壤湿度测量模块,LED灯表示小水泵的工作。
b. 软件: KEIL MDK5。
c.原理图:详见“硬件原理图”文件夹。
d.程序: 51程序在“51程序”文件夹。
二、评估板硬件和软件部分介绍
1. 硬件原理图:详见“硬件原理图”文件夹
(1)硬件接口定义
功能
| 对应51的IO
|
| TXD(屏端子显示)
| P30 |
| RXD(屏端子显示)
| P31 |
| 独立按键
| P10~P14
|
| ADC采样
| P10
|
| 控制信号
| P20
| |
<p>2、软件程序
界面设置在“DWIN_SET”文件夹中。 STM32程序在“MCU_STM32F103C8T6程序”文件夹中。
(2)MCU程序
- #include "config.h"
- #include "USART1.h"
- #include "delay.h"
- #include "dwin.h"
- #include "adc.h"
- //========================================================================
- // 函数: void ADC_Inilize(ADC_InitTypeDef *ADCx)
- // 描述: ADC初始化程序.
- // 参数: ADCx: 结构参数,请参考adc.h里的定义.
- // 返回: none.
- // 版本: V1.0, 2012-10-22
- //========================================================================
- void ADC_Inilize(ADC_InitTypeDef *ADCx)
- {
- P1ASF = ADCx->ADC_Px;
- ADC_CONTR = (ADC_CONTR & ~ADC_90T) | ADCx->ADC_Speed;
- if(ADCx->ADC_Power == ENABLE) ADC_CONTR |= 0x80;
- else ADC_CONTR &= 0x7F;
- if(ADCx->ADC_AdjResult == ADC_RES_H2L8) PCON2 |= (1<<5); //10位AD结果的高2位放ADC_RES的低2位,低8位在ADC_RESL。
- else PCON2 &= ~(1<<5); //10位AD结果的高8位放ADC_RES,低2位在ADC_RESL的低2位。
- if(ADCx->ADC_Interrupt == ENABLE) EADC = 1; //中断允许 ENABLE,DISABLE
- else EADC = 0;
- if(ADCx->ADC_Polity == PolityHigh) PADC = 1; //优先级设置 PolityHigh,PolityLow
- else PADC = 0;
- }
- //========================================================================
- // 函数: void ADC_PowerControl(u8 pwr)
- // 描述: ADC电源控制程序.
- // 参数: pwr: 电源控制,ENABLE或DISABLE.
- // 返回: none.
- // 版本: V1.0, 2012-10-22
- //========================================================================
- void ADC_PowerControl(u8 pwr)
- {
- if(pwr == ENABLE) ADC_CONTR |= 0x80;
- else ADC_CONTR &= 0x7f;
- }
- void ADC_config(void)
- {
- ADC_InitTypeDef ADC_InitStructure; //结构定义
- ADC_InitStructure.ADC_Px = ADC_P10 | ADC_P11 | ADC_P12|ADC_P13; //设置要做ADC的IO, ADC_P10 ~ ADC_P17(或操作),ADC_P1_All
- ADC_InitStructure.ADC_Speed = ADC_360T; //ADC速度 ADC_90T,ADC_180T,ADC_360T,ADC_540T
- ADC_InitStructure.ADC_Power = ENABLE; //ADC功率允许/关闭 ENABLE,DISABLE
- ADC_InitStructure.ADC_AdjResult = ADC_RES_H8L2; //ADC结果调整, ADC_RES_H2L8,ADC_RES_H8L2
- ADC_InitStructure.ADC_Polity = PolityLow; //优先级设置 PolityHigh,PolityLow
- ADC_InitStructure.ADC_Interrupt = DISABLE; //中断允许 ENABLE,DISABLE
- ADC_Inilize(&ADC_InitStructure); //初始化
- ADC_PowerControl(ENABLE); //单独的ADC电源操作函数, ENABLE或DISABLE
- }
- void UART_config(void)
- {
- COMx_InitDefine COMx_InitStructure; //结构定义
- COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
- COMx_InitStructure.UART_BRT_Use = BRT_timer2; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2)
- COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 一般 110 ~ 115200
- COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE
- COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE
- COMx_InitStructure.UART_Interrupt = ENABLE; //中断允许, ENABLE或DISABLE
- COMx_InitStructure.UART_Polity = PolityLow; //中断优先级, PolityLow,PolityHigh
- COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //切换端口, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必须使用内部时钟)
- COMx_InitStructure.UART_RXD_TXD_Short = DISABLE; //内部短路RXD与TXD, 做中继, ENABLE,DISABLE
- USART_Configuration(USART1, &COMx_InitStructure); //初始化串口1 USART1,USART2
- // PrintString1("STC15F2K60S2 UART1 Test Prgramme!
- "); //SUART1发送一个字符串
- }
- //========================================================================
- // 函数: u16 Get_ADC10bitResult(u8 channel)
- // 描述: 查询法读一次ADC结果.
- // 参数: channel: 选择要转换的ADC.
- // 返回: 10位ADC结果.
- // 版本: V1.0, 2012-10-22
- //========================================================================
- u16 Get_ADC10bitResult(u8 channel) //channel = 0~7
- {
- u16 adc;
- u8 i;
- if(channel > ADC_CH7) return 1024; //错误,返回1024,调用的程序判断
- ADC_RES = 0;
- ADC_RESL = 0;
- ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
- NOP(4); //对ADC_CONTR操作后要4T之后才能访问
- for(i=0; i<250; i++) //超时
- {
- if(ADC_CONTR & ADC_FLAG)
- {
- ADC_CONTR &= ~ADC_FLAG;
- if(PCON2 & (1<<5)) //10位AD结果的高2位放ADC_RES的低2位,低8位在ADC_RESL。
- {
- adc = (u16)(ADC_RES & 3);
- adc = (adc << 8) | ADC_RESL;
- }
- else //10位AD结果的高8位放ADC_RES,低2位在ADC_RESL的低2位。
- {
- adc = (u16)ADC_RES;
- adc = (adc << 2) | (ADC_RESL & 3);
- }
- return adc;
- }
- }
- return 1024; //错误,返回1024,调用的程序判断
- }
- /**********************************************/
- void main(void)
- {
- short adcx;
- short set_veul=50;
- u8 key_v;
- UART_config();
- EA = 1;
- clr(0xf00f);
-
- ADC_config();
-
- LCD_printf(0x04,0xfFFF,0xf00f,200-72,50,"自动浇花系统");
- LCD_printf(0x04,0xfFFF,0xf00f,0,100,"当前土壤湿度:");
- LCD_printf(0x04,0xfFFF,0xf00f,55,150,"设定湿度:");
- LCD_printf(0x04,0xfFFF,0xf00f,0,200,"系统工作状态:");
- while (1)
- {
- key_v=0;
- // key_v=key_check();
- if(set_veul<adcx/11) {LCD_printf(0x44,0xffff,0xf00f,300,200,"达到湿度");
- P2=0XFF;
- }
- if(set_veul>adcx/11) { LCD_printf(0x44,0xffff,0xf00f,300,200,"加湿中 ");
- P2=0X00;
- }
- if(key_v==3)if(set_veul<100)set_veul++;
- if(key_v==4)if(set_veul>0) set_veul--;
- LCD_printf(0x44,0xffff,0xf00f,300,150,"%02dRH",set_veul);
- adcx=Get_ADC10bitResult(0);
- LCD_printf(0x44,0xffff,0xf00f,300,100,"%02dRH",adcx/11);
-
- }
- }
- //========================================================================
- // 函数: void ADC_int(void) interrupt ADC_VECTOR
- // 描述: ADC中断函数.
- // 参数: none.
- // 返回: none.
- // 版本: V1.0, 2012-10-22
- //========================================================================
- void ADC_int (void) interrupt ADC_VECTOR
- {
- ADC_CONTR &= ~ADC_FLAG;
- }
复制代码
</p>2、软件程序
``
|