找回密码
 立即注册
查看: 605|回复: 2

ZXC-0168 STC8A8K64D4单片机 第7讲 开关信号控制对应继电器输出自锁程序3

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2024-11-26 00:25:05

24

主题

7

回帖

256

积分

荣誉版主

积分
256
发表于 2023-11-13 13:58:40 | 显示全部楼层 |阅读模式
ZXC-0168 应用举例.jpg

ZXC-0168 标识图.jpg

ZXC-0168 原理图_00.jpg



*********************************************************************/
/*************  功能说明    **************
开关信号控制对应继电器输出自锁程序

使用 if....累加消抖...if....累加消抖 实现继电器输入控制输出(自锁程序)
******************************************/

#include "STC8A8K64D4.h"   //包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义
#include "intrins.h"       //一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用。
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型

/*************        本地常量声明        **************/
/*************        光耦隔离输入口        **************/
sbit IN1= P5^5;//光耦隔离输入口1
sbit IN2= P4^0;//光耦隔离输入口2
sbit IN3= P6^4;//光耦隔离输入口3
sbit IN4= P6^5;//光耦隔离输入口4
sbit IN5= P6^6;//光耦隔离输入口5
sbit IN6= P6^7;//光耦隔离输入口6
sbit IN7= P3^2;//光耦隔离输入口7
sbit IN8= P3^3;//光耦隔离输入口8
sbit IN9= P3^4;//光耦隔离输入口9
sbit IN10= P3^5;//光耦隔离输入口10

/*************        光耦隔离继电器输出口        **************/
sbit OUT1= P4^3;//继电器输出口1
sbit OUT2= P2^7;//继电器输出口2
sbit OUT3= P2^6;//继电器输出口3
sbit OUT4= P2^5;//继电器输出口4
sbit OUT5= P2^4;//继电器输出口5
sbit OUT6= P2^3;//继电器输出口6
sbit OUT7= P2^2;//继电器输出口7
sbit OUT8= P2^1;//继电器输出口8
sbit OUT9= P4^2;//继电器输出口9
sbit OUT10= P2^0;//继电器输出口10

sbit RUN= P4^4;//运行状态指示灯
sbit FMQ= P0^7;//蜂鸣器控制脚

/*******************标志位设定*********************/

bit IN_bz1=0; //输入标志位
bit IN_bz2=0; //输入标志位
bit IN_bz3=0; //输入标志位
bit IN_bz4=0; //输入标志位
bit IN_bz5=0; //输入标志位
bit IN_bz6=0; //输入标志位
bit IN_bz7=0; //输入标志位
bit IN_bz8=0; //输入标志位
bit IN_bz9=0; //输入标志位
bit IN_bz10=0;//输入标志位

uint IN_js1=0; //输入1计时变量
uint IN_js2=0; //输入2计时变量
uint IN_js3=0; //输入3计时变量
uint IN_js4=0; //输入4计时变量
uint IN_js5=0; //输入5计时变量
uint IN_js6=0; //输入6计时变量
uint IN_js7=0; //输入7计时变量
uint IN_js8=0; //输入8计时变量
uint IN_js9=0; //输入9计时变量
uint IN_js10=0; //输入10计时变量
uint IN_TIME=1000;//输入口消抖计时变量

//========================================================================
// 函数: void main(void)
// 描述: 主函数。
// 参数: none.
// 返回: none.
//========================================================================
void main()//主函数
{
P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
RUN=0;        //运行指示灯亮
while (1)//主函数执行循环扫描
{
       
if((IN1==0)&&(IN_bz1==0)){IN_js1++;if(IN_js1>=IN_TIME){if(IN1==0){OUT1=!OUT1;IN_bz1=1;}}}// 如果IN1有信号输入和标志位IN_bz1等于0,等待再次判断IN1是否有信号,如果有OUT1继电器状态取反IN_bz1标志位置1
if(IN1==1){IN_js1=0;IN_bz1=0;}                                                     // 如果IN1无信号输入,IN_js1变量值清零,IN_bz1标志位置0

if((IN2==0)&&(IN_bz2==0)){IN_js2++;if(IN_js2>=IN_TIME){if(IN2==0){OUT2=!OUT2;IN_bz2=1;}}}// 如果IN2有信号输入和标志位IN_bz2等于0,等待再次判断IN1是否有信号,如果有OUT2继电器状态取反IN_bz2标志位置1
if(IN2==1){IN_js2=0;IN_bz2=0;}                                                     // 如果IN2无信号输入,IN_js2变量值清零,IN_bz2标志位置0

if((IN3==0)&&(IN_bz3==0)){IN_js3++;if(IN_js3>=IN_TIME){if(IN3==0){OUT3=!OUT3;IN_bz3=1;}}}// 如果IN3有信号输入和标志位IN_bz3等于0,等待再次判断IN1是否有信号,如果有OUT3继电器状态取反IN_bz3标志位置1
if(IN3==1){IN_js3=0;IN_bz3=0;}                                                     // 如果IN3无信号输入,IN_js3变量值清零,IN_bz3标志位置0

if((IN4==0)&&(IN_bz4==0)){IN_js4++;if(IN_js4>=IN_TIME){if(IN4==0){OUT4=!OUT4;IN_bz4=1;}}}// 如果IN4有信号输入和标志位IN_bz4等于0,等待再次判断IN1是否有信号,如果有OUT4继电器状态取反IN_bz4标志位置1
if(IN4==1){IN_js4=0;IN_bz4=0;}                                                     // 如果IN4无信号输入,IN_js4变量值清零,IN_bz4标志位置0

if((IN5==0)&&(IN_bz5==0)){IN_js5++;if(IN_js5>=IN_TIME){if(IN5==0){OUT5=!OUT5;IN_bz5=1;}}}// 如果IN5有信号输入和标志位IN_bz5等于0,等待再次判断IN1是否有信号,如果有OUT5继电器状态取反IN_bz5标志位置1
if(IN5==1){IN_js5=0;IN_bz5=0;}                                                     // 如果IN5无信号输入,IN_js5变量值清零,IN_bz5标志位置0

if((IN6==0)&&(IN_bz6==0)){IN_js6++;if(IN_js6>=IN_TIME){if(IN6==0){OUT6=!OUT6;IN_bz6=1;}}}// 如果IN6有信号输入和标志位IN_bz6等于0,等待再次判断IN1是否有信号,如果有OUT6继电器状态取反IN_bz6标志位置1
if(IN6==1){IN_js6=0;IN_bz6=0;}                                                     // 如果IN6无信号输入,IN_js6变量值清零,IN_bz6标志位置0

if((IN7==0)&&(IN_bz7==0)){IN_js7++;if(IN_js7>=IN_TIME){if(IN7==0){OUT7=!OUT7;IN_bz7=1;}}}// 如果IN7有信号输入和标志位IN_bz7等于0,等待再次判断IN1是否有信号,如果有OUT7继电器状态取反IN_bz7标志位置1
if(IN7==1){IN_js7=0;IN_bz7=0;}                                                     // 如果IN7无信号输入,IN_js7变量值清零,IN_bz7标志位置0

if((IN8==0)&&(IN_bz8==0)){IN_js8++;if(IN_js8>=IN_TIME){if(IN8==0){OUT8=!OUT8;IN_bz8=1;}}}// 如果IN8有信号输入和标志位IN_bz8等于0,等待再次判断IN1是否有信号,如果有OUT8继电器状态取反IN_bz8标志位置1
if(IN8==1){IN_js8=0;IN_bz8=0;}                                                     // 如果IN8无信号输入,IN_js8变量值清零,IN_bz8标志位置0

if((IN9==0)&&(IN_bz9==0)){IN_js9++;if(IN_js9>=IN_TIME){if(IN9==0){OUT9=!OUT9;IN_bz9=1;}}}// 如果IN9有信号输入和标志位IN_bz9等于0,等待再次判断IN1是否有信号,如果有OUT9继电器状态取反IN_bz9标志位置1
if(IN9==1){IN_js9=0;IN_bz9=0;}                                                     // 如果IN9无信号输入,IN_js9变量值清零,IN_bz9标志位置0

if((IN10==0)&&(IN_bz10==0)){IN_js10++;if(IN_js10>=IN_TIME){if(IN10==0){OUT10=!OUT10;IN_bz10=1;}}}// 如果IN10有信号输入和标志位IN_bz10等于0,等待再次判断IN1是否有信号,如果有OUT10继电器状态取反IN_bz10标志位置1
if(IN10==1){IN_js10=0;IN_bz10=0;}                                                          // 如果IN10无信号输入,IN_js10变量值清零,IN_bz10标志位置0
}
}
/********************************************************************
                                                结束
*********************************************************************/

第7讲 开关信号控制对应继电器输出自锁程序3.rar

67.08 KB, 下载次数: 59

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-27 10:40:24

11

主题

425

回帖

1981

积分

版主

积分
1981
发表于 2023-11-13 14:05:43 | 显示全部楼层
感谢分享
QQ:2269694595     微信:18106296594
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:497
  • 最近打卡:2025-05-10 00:01:32

1

主题

114

回帖

1713

积分

金牌会员

积分
1713
发表于 2023-11-13 21:35:37 | 显示全部楼层
学习了,谢谢分享
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-11 18:42 , Processed in 0.120553 second(s), 66 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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