找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机仿真宠物投食系统程序 Proteus工程

[复制链接]
跳转到指定楼层
楼主
包括C语言程序和proteus仿真
具有显示时间 检测温度 重量检测 声光报警 以及电机控制等功能

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序如下:
  1. #include "reg52.h"               
  2. #include "ds1302.h"       
  3. #include "lcd.h"
  4. #include "temp.h"
  5. #include "intrins.h"
  6. /*对数据类型进行声明定义*/
  7. typedef unsigned int u16;          
  8. typedef unsigned char u8;
  9. #define ulong unsigned long
  10. #define GPIO_MOTOR P1

  11. /****I/O口定义****/
  12. sbit KEY1 = P3^0;
  13. sbit KEY2 = P3^1;
  14. sbit KEY3 = P3^2;

  15. sbit BEEP = P2^7;
  16. sbit LED1  = P3^3;


  17. sbit DOUT=P3^4;        //定义2543数据读取口
  18. sbit DIN =P3^5;        //定义2543数据写入口
  19. sbit CS  =P3^6;        //定义2543片选信号口
  20. sbit CLK =P3^7;        //定义时钟信号口

  21. /****变量定义****/
  22. bit adjust;//调节标志位  0-1
  23. u8 num;//闹钟调节位
  24. u8 hour_shi, hour_ge, minute_shi, minute_ge;//闹钟调节
  25. ulong Volt;//测量的电压值
  26. ulong AD_Volt;//测量的电压值
  27. ulong quality;//检测重量
  28. ulong quality_set=2000;//设置的重量阈值200克

  29. unsigned char code FFW_X[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //X反转顺序

  30. unsigned char code FFZ_X[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //X正转顺序

  31. unsigned char Direction,stop=0;

  32. void delay30ms(void)   //误差 0us
  33. {
  34.     unsigned char a,b;
  35.     for(b=101;b>0;b--)
  36.         for(a=147;a>0;a--);
  37. }

  38. void Delay(unsigned int t)
  39. {
  40. unsigned int k;
  41. while(t--)
  42. {
  43. for(k=0; k<80; k++)
  44. { }
  45. }
  46. }



  47. void Motor()
  48. {
  49.         unsigned char a=30;
  50. unsigned char i;
  51. for(i=0;i<8;i++)
  52. {

  53.   if(Direction==1&&stop==0)                 //正转电机&电机没按下停止

  54. GPIO_MOTOR = FFW_X[i]&0x0F;//取数据

  55. if(Direction==2&&stop==0)                 //反转&X电机&电机没按下停止

  56. GPIO_MOTOR = FFZ_X[i]&0x0F;

  57.   Delay(a);
  58.   }
  59. }

  60. void Read2543(uchar addr)
  61. {
  62.         uint ad=0;
  63.         uchar i;
  64.         CLK=0;
  65.         CS=0;//片选段,启动2543
  66.         addr<<=4;//对地址位预处理
  67.         for(i=0;i<12;i++) //12个时钟走完,完成一次读取测量
  68.         {
  69.                 if(DOUT==1)
  70.                         ad=ad|0x01;//单片机读取ad数据
  71.                 DIN=addr&0x80;//2543读取测量地址位
  72.                 CLK=1;
  73.                 ;;;//很短的延时
  74.                 CLK=0;//产生下降沿,产生时钟信号
  75.                 ;;;
  76.                 addr<<=1;
  77.                 ad<<=1;//将数据移位准备下一位的读写
  78.         }
  79.         CS=1;//关2543
  80.         ad>>=1;
  81.         Volt=ad;//取走转换结果
  82.         //Volt=Volt*1221;//例子的满量程为5V,转换分辩率为12位(2的12次方=4096) 。即最大值是255,5/4096=1221mV,即例子中的1V代表实际1221mV
  83.   
  84.         Volt=Volt*5000/4095;
  85.         quality=(Volt/5.12+40)*10/4;//计算压力
  86.         //Pressure=(Volt/5.41+40)*10/4;
  87.                
  88. }



  89. void KEY_Control()//按键调节
  90. {
  91.         if(KEY1==0)
  92.         {
  93.                 delay30ms();
  94.                 if(KEY1==0)
  95.                 {
  96.                   stop=0;
  97.                          Direction=1;       
  98.                 }
  99.         }
  100.         if(KEY2==0)
  101.         {
  102.                 delay30ms();
  103.                 if(KEY2==0)
  104.                 {
  105.                 stop=0;
  106.                          Direction=2;       
  107.                 }
  108.         }
  109.         if(KEY3==0)
  110.         {
  111.                 delay30ms();
  112.                 if(KEY3==0)
  113.                 {
  114.                
  115.                  stop=1;       
  116.                 }
  117.         }
  118.        
  119. }

  120. void show_quality(void)//显示重量
  121. {
  122.         quality=quality-30;
  123.                 DisplayOneChar(11,0,(char)(quality/1000+'0'));
  124.           DisplayOneChar(12,0,(char)(quality%1000/100+'0'));
  125.           DisplayOneChar(13,0,(char)((quality%100)/10+'0'));
  126.        
  127.         if( quality <= quality_set )
  128.         {
  129.                 stop=0;
  130.                 Direction=1;
  131.                 BEEP=0;
  132.                 LED1=0;
  133.                 Delay(200);
  134.                 BEEP=1;
  135.                 LED1=1;
  136.                 Delay(300);
  137.         }
  138.        
  139.         if( quality > quality_set )
  140.         {
  141.                 stop=1;
  142.                
  143.                 BEEP=1;
  144.                 LED1=1;
  145.                
  146.         }
  147. }



  148. void main()//主函数
  149. {       
  150.        
  151.         LcdInit();

  152.         DisplayOneChar(0,0,'2'); DisplayOneChar(1,0,'0'); DisplayOneChar(4,0,'-'); DisplayOneChar(7,0,'-');//2022-05-05  6
  153.         DisplayOneChar(2,1,':'); DisplayOneChar(5,1,':'); DisplayOneChar(2,1,':');//13:39:40       
  154.         DisplayListChar(9,1,"T:"); DisplayOneChar(13,1,'.'); DisplayOneChar(15,1,'C');//T:23.5C
  155.         DisplayOneChar(15,0,'g');
  156.         while(1)
  157.         {
  158.                
  159.                 KEY_Control();//按键控制
  160.                 Motor();//步进电机控制
  161.                        
  162.                 Read2543(0);//检测重量
  163.                 show_quality();//显示重量
  164.                
  165.                
  166.                
  167.                 ReadTemperature();//读取温度       
  168.                 DisplayTemp();//显示温度
  169.                
  170.                        
  171.                 Ds1302ReadTime();//读取时间
  172.                 DisplayTime();//显示时间
  173.                        
  174.                
  175.         }
  176. }
复制代码

Keil代码与Proteus8.8仿真下载:
宠物投食系统.zip (201 KB, 下载次数: 87)



评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1057463 发表于 2022-12-13 23:38 | 只看该作者
附件里面没有dsn文件吗
回复

使用道具 举报

板凳
ID:262 发表于 2022-12-13 23:42 | 只看该作者
mhwgo555 发表于 2022-12-13 23:38
附件里面没有dsn文件吗

作者说了是Proteus8.8的仿真,要安装Proteus8.8才能打开.pdsprj工程的
dsn都是7.5很老的版本了,现在很少有人使用Proteus7.5了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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