找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1146|回复: 0
打印 上一主题 下一主题
收起左侧

用单片机制作自动配药系统 源程序Proteus仿真图

[复制链接]
跳转到指定楼层
楼主
自动配药系统设计,设置配置比例和总药量,自动配药
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #define uint unsigned int
  2. #define uchar unsigned char
  3. #include "Lcd1602.h"
  4. #include <intrins.h>
  5. #include "math.h"
  6. #define delay4us() {_nop_();_nop_();_nop_();_nop_();}//格式

  7. int P_Air,P_Water,H_Water;
  8. int Err,Err_L;
  9. sbit CS  = P1^5;
  10. sbit CLK = P1^6;
  11. sbit DIO = P1^7;//        DI和DO并联接入P1^2;

  12. void display() ;

  13. uchar Get_AD_Result_ch2(unsigned char num) //得到 双通道U5 ad采集的电压
  14. {
  15.          uchar i,dat1=0,dat2=0;
  16.         CS  = 0; CLK = 0;DIO = 1; _nop_(); _nop_();
  17.         CLK = 1; _nop_(); _nop_(); CLK = 0;                         //准备

  18.         CLK = 1; _nop_(); _nop_();CLK = 0;                 //开始          核实准备工作
  19.         DIO = num; _nop_(); _nop_();CLK = 1;              //上升沿传地地址的低位
  20.         DIO = num; _nop_(); _nop_();CLK = 0;                    //下降沿传地地址的高位
  21.         DIO = 1; _nop_(); _nop_();                                   //准备传输数据
  22.         for(i=0;i<8;i++)
  23.         {   
  24.             dat1 = dat1 | DIO;
  25.                  CLK = 1; _nop_(); _nop_();
  26.                 CLK = 0; _nop_(); _nop_();
  27.                
  28.                 dat1 = dat1 << 1 ;
  29.               
  30.         }
  31.         CS = 1;
  32.         return dat1;
  33. }
  34. void Get_Info()
  35. {
  36.         uchar temp;
  37.         temp = Get_AD_Result_ch2(0);//采集气压
  38.         P_Air = (uchar)(temp/5);
  39. }
  40. /*******************************************************************************
  41. * 函 数 名         : main
  42. * 函数功能                   : 主函数
  43. * 输    入         : 无
  44. * 输    出         : 无
  45. *******************************************************************************/
  46. void main(void)
  47. {  
  48.         InitLcd1602();
  49.         while(P_Water<=1)
  50.         {
  51.                 Get_Info();//得到采集数据
  52.                 display();//数据显示                        
  53.         }

  54.         while(1)
  55.         {
  56.                 Get_Info();//得到采集数据
  57.                 display();//数据显示
  58.         }                                
  59. }

  60. void display()      //lcd显示提示信息以及测到的数据
  61. {
  62. unsigned char shu[8],shu1[8],shu2[8];
  63. shu[0]='R';               
  64.         shu[1]=':';        
  65. shu[2]=P_Air/1000+0x30;     //取百位 加0x30是为了转化成字符型
  66. shu[3]='.';     //取百位 加0x30是为了转化成字符型
  67. shu[4]=(P_Air-(shu[2]-0x30)*1000)/100+0x30;   //取十位
  68. shu[5]=((P_Air-(shu[2]-0x30)*1000)-100*(shu[4]-0x30))/10+0x30;      //取个位(下同)
  69. shu[6] =P_Air%10+0x30 ;
  70. shu[7]=' '        ;
  71. shu[8]='\0';

  72. LcdShowStr(0,0,shu);
  73. }
复制代码
Keil代码与Proteus仿真下载:
本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,切勿照搬,文件下载:
仿真代码.7z (102.98 KB, 下载次数: 33)


评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表