找回密码
 立即注册

QQ登录

只需一步,快速开始

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

19052耐压器单片机自动测试项目

[复制链接]
跳转到指定楼层
楼主
本例通过c51单片机实现自动测试耐压的功能,主要器件单片机最小电路、三极管、电阻、继电器----行程开关、光电开关,LED灯+蜂鸣器。

原理图占无,稍后上传。


单片机源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit gdian=P0^0;                                                          // 光电开关                                                  2
  5. sbit led_H=P0^2;                                                          // 黄灯                                                             3
  6. sbit led_G=P0^6;                                                          // 绿灯                                                            5
  7. sbit led_R=P2^7;                                                          // 红灯 + 蜂鸣器                                         9
  8. sbit kais=P2^4;                                                                  // 启动                                                          4
  9. sbit fangx=P2^0;                                                          // 放行                                                        “7” 或 “3”

  10. sbit xingc=P1^0;                                  // 行程开关                                                 1
  11. sbit OK=P1^4;                                                                    //  PASS                                                         6
  12. sbit stop0=P1^7;                                                          // 手动停止
  13. sbit stop1=P3^3;                                                          // 停止 (外中断1)                                 8
  14. sbit zd=P3^2;                                                                  // 外中断 0(检测控制手动停止)

  15. uint num;
  16. uchar repeat,temp;

  17. /*********延时子函数************/
  18. void delay(uint x )
  19. {
  20.         uint i,j;
  21.         for(i=x;i>0;i--)
  22.                 for(j=110;j>0;j--);
  23. }

  24. /*********放行子函数************/
  25. void flag()
  26. {
  27.         delay(500);
  28.         fangx=1;
  29.         delay(3000);
  30.         fangx=0;
  31. }


  32. /*********初始化子函数************/
  33. void init()
  34. {
  35.         TMOD=0x11;
  36.         TH0=(65536-45872)/256;
  37.         TL0=(65536-45872)%256;
  38.         TH1=(65536-45872)/256;                                                  
  39.         TL1=(65536-45872)%256;
  40.         EA=1;                                                                                                             //        开总中断
  41.         ET0=1;                                                                                                                  //        定时器 0 允许
  42.         ET1=1;                                                                                                            //        定时器 1 允许
  43.         EX0=1;                                                                                                                   //        外部中断 0 允许
  44.         EX1=1;                                                                                                                 //        外部中断 1 允许

  45.         led_H=0;
  46.         led_G=0;                                                                                                           //          黄灯、绿灯、红灯关闭
  47.         led_R=0;                                                                                                        
  48.         kais=0;                                                                                                                  
  49.         fangx=0;                                                                                                        //         放行赋值关闭
  50.         stop0=0;                                                                                                        //         启动耐压关闭
  51.         repeat=0;                                                                                                        //         启动耐压后设置的 标志位清除
  52. }         

  53. /********停止子函数********/
  54. void gny()
  55. {
  56.          stop0=1;
  57.          delay(3000);
  58.          stop0=0;
  59. }


  60. /************************************键盘扫描***********************************************************************************/

  61. void keyscan()
  62. {

  63.                 /***************机器到位检测**********************/
  64.         if(xingc==0)
  65.         {
  66.                 delay(10);
  67.                 if(xingc==0)                                                                                  // 检测行程开关,确认机器到位
  68.                 {
  69.                         if(gdian!=0)
  70.                         {
  71.                                 delay(10);
  72.                                 if(gdian!=0)                                                                  //  无机器
  73.                                 {
  74.                                         flag();                                                                          //  开启  放行子函数
  75.                                         stop0=0;                                                
  76.                                 }
  77.                         }

  78.          /********设置启动后标志位检测***********/
  79.                 if(repeat!=1)
  80.                 {
  81.                         delay(10);
  82.                         if(repeat!=1)
  83.                         {
  84.                         
  85.       /**************光电开关 检测是否有机器**********************/        
  86.                                                                  
  87.                                         if(gdian==0)                                                               
  88.                                         {
  89.                                                 delay(10);
  90.                                                 if(gdian==0)                                                                  // 检测光电开关,确认有机器
  91.                                                 {
  92.                                                         led_H=1;                                                                  // 开启工作指示灯
  93.                                                         kais=1;                                                                          // 启动耐压仪
  94.                                                         TR0=1;                                                                             // 启动定时器 0 (超时无反应检测)

  95.                                                         repeat=1;         // 耐压启动后标志位,屏蔽扫描时一直使        耐压仪器开启,只有复位初始化将标志清零才检测有无机器

  96.                                                 }
  97.                                         }        
  98.                         }
  99.             }        

  100.                 }        
  101. }


  102.          

  103. }
  104.   /********检测定时器时间,检测测试 PASS 函数 *********/

  105. void ok()
  106. {

  107.                 if(num==60)
  108.                 {
  109.                         kais=0;                                                  // 关闭耐压仪启动按键
  110.                 }
  111.              /**********************超时检测**************************                  **/
  112.                 if(num==600)                                                                      // 到 30 秒还没测试完毕(OK或NG---num清零),num判断。
  113.                 {
  114.                         num=0;
  115.                         led_H=1;                                                                           //        黄灯亮
  116.                         led_G=1;                                                                           //        绿灯亮
  117.                         led_R=1;                                                                   //        红灯亮
  118.                         gny();
  119.                 }
  120.                                        


  121.                 /***********************判断是否测试OK****************************/
  122.                 if(OK==0)               
  123.                 {
  124.                         delay(10);
  125.                         if(OK==0)
  126.                         {
  127.                                 led_H=0;
  128.                                 led_G=1;                                                                                                // 开启绿灯
  129.                                 flag();                                                                                                // 放行
  130.                                 TR1=1;
  131.                                 TR0=0;
  132.                                 num=0;                                                    //启动定时器 1
  133.                         }
  134.                  }         
  135. }

  136. /*********************************************         主函数            *********************************************************************/
  137. void main()
  138. {
  139.     init();
  140.         while(1)
  141.         {
  142.                 keyscan();
  143.             ok();


  144.         }
  145.                         
  146. }

  147.                                          

  148. /**** 手动停止:原理图里通过继电器常开和耐压仪器的 stop 两端连接,
  149.       仪器停止--为常闭和 stop 两端连接,,两种任选一,手动时继电器
  150.           吸合,常闭端断开,所以不会触发 IN1 。
  151.                                                                                             ****/

  152. void ex() interrupt 0
  153. {
  154.          
  155.          led_H=0;                                                                           //        关闭黄灯
  156.          led_G=0;                                                                           //  关闭绿灯
  157.          led_R=0;                                                                        //        关闭红灯+蜂鸣器
  158.          gny();                                                                        
  159. }


  160. /****功能:设置启动后超时无反应报警(OK\NG信号)****/

  161. void time_T0() interrupt 1
  162. {
  163.         TH0=(65536-45872)/256;
  164.         TL0=(65536-45872)%256;
  165.         num++;                                                
  166. }




  167. /**** 判断是否测试NG ,员工在判断时需要 “手动再次停止” 一次耐压仪器,因为输出为高压,确保安全起见***/

  168. void ex1() interrupt 2
  169. {
  170.                     
  171.                         led_H=0;
  172.                         delay(100);
  173. ……………………

  174. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
自动耐压.rar (38.53 KB, 下载次数: 15)
典型的蜂鸣器驱动电路.pdf (48 KB, 下载次数: 11)
整流二极管-1N4001-4007-参数资料.pdf (71.46 KB, 下载次数: 11)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2017-6-1 18:04 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:169021 发表于 2017-6-3 01:49 | 只看该作者
好东东啊,这个很智能,楼主能发下原理图吗?
回复

使用道具 举报

地板
ID:206620 发表于 2017-6-13 08:57
你是伟城吗?我发你QQ里这里不会玩。添加不进。

5#
ID:206620 发表于 2017-6-17 11:05
51hei小小 发表于 2017-6-3 01:49
好东东啊,这个很智能,楼主能发下原理图吗?

你是伟城吗

6#
ID:3802 发表于 2019-1-25 10:57 | 只看该作者
值得拥有
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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