自动配药系统设计,设置配置比例和总药量,自动配药
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #define uint unsigned int
- #define uchar unsigned char
- #include "Lcd1602.h"
- #include <intrins.h>
- #include "math.h"
- #define delay4us() {_nop_();_nop_();_nop_();_nop_();}//格式
- int P_Air,P_Water,H_Water;
- int Err,Err_L;
- sbit CS = P1^5;
- sbit CLK = P1^6;
- sbit DIO = P1^7;// DI和DO并联接入P1^2;
- void display() ;
- uchar Get_AD_Result_ch2(unsigned char num) //得到 双通道U5 ad采集的电压
- {
- uchar i,dat1=0,dat2=0;
- CS = 0; CLK = 0;DIO = 1; _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_(); CLK = 0; //准备
-
- CLK = 1; _nop_(); _nop_();CLK = 0; //开始 核实准备工作
- DIO = num; _nop_(); _nop_();CLK = 1; //上升沿传地地址的低位
- DIO = num; _nop_(); _nop_();CLK = 0; //下降沿传地地址的高位
- DIO = 1; _nop_(); _nop_(); //准备传输数据
- for(i=0;i<8;i++)
- {
- dat1 = dat1 | DIO;
- CLK = 1; _nop_(); _nop_();
- CLK = 0; _nop_(); _nop_();
-
- dat1 = dat1 << 1 ;
-
- }
- CS = 1;
- return dat1;
- }
- void Get_Info()
- {
- uchar temp;
- temp = Get_AD_Result_ch2(0);//采集气压
- P_Air = (uchar)(temp/5);
- }
- /*******************************************************************************
- * 函 数 名 : main
- * 函数功能 : 主函数
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void main(void)
- {
- InitLcd1602();
- while(P_Water<=1)
- {
- Get_Info();//得到采集数据
- display();//数据显示
- }
- while(1)
- {
- Get_Info();//得到采集数据
- display();//数据显示
- }
- }
- void display() //lcd显示提示信息以及测到的数据
- {
- unsigned char shu[8],shu1[8],shu2[8];
- shu[0]='R';
- shu[1]=':';
- shu[2]=P_Air/1000+0x30; //取百位 加0x30是为了转化成字符型
- shu[3]='.'; //取百位 加0x30是为了转化成字符型
- shu[4]=(P_Air-(shu[2]-0x30)*1000)/100+0x30; //取十位
- shu[5]=((P_Air-(shu[2]-0x30)*1000)-100*(shu[4]-0x30))/10+0x30; //取个位(下同)
- shu[6] =P_Air%10+0x30 ;
- shu[7]=' ' ;
- shu[8]='\0';
-
- LcdShowStr(0,0,shu);
- }
复制代码 Keil代码与Proteus仿真下载:
本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,切勿照搬,文件下载:
仿真代码.7z
(102.98 KB, 下载次数: 35)
|