ZXC-0168 第4讲STC8A8K64D4单片机工控板开关信号控制对应继电器输出点动方法3 使用if...if...语句实现_单片机 继电器输出-程序员宅基地

技术标签: 嵌入式硬件  单片机  

/********************************************************************
实现功能:应用程序
使用芯片:STC8A8K64D4
晶振:11.0592MHZ
波特率:9600
编译环境:Keil5
作者:张新春 
微信/手机:13603455408
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! 
*********************************************************************/
/*************  功能说明    **************
开关信号控制对应继电器输出点动方法3

使用 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;//输入标志位
//========================================================================
// 函数声明
void Delay10ms();        //延时函数@11.0592MHz
//========================================================================
/************************ 10ms消抖延时函数 ****************************/
void Delay10ms()        //延时函数@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 144;
j = 157;
do
{
while (--j);
} while (--i);
}
//========================================================================
// 函数: 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)){Delay10ms();if(IN1==0){OUT1=0;IN_bz1=1;}}// 如果IN1有信号输入和标志位IN_bz1等于0,等待10毫秒再次判断IN1是否有信号,如果有OUT1继电器吸合IN_bz1标志位置1
if((IN1==1)&&(IN_bz1==1)){Delay10ms();if(IN1==1){OUT1=1;IN_bz1=0;}}// 如果IN1无信号输入和标志位IN_bz1等于1,等待10毫秒再次判断IN1是否有信号,如果无OUT1继电器断开IN_bz1标志位置0

if((IN2==0)&&(IN_bz2==0)){Delay10ms();if(IN2==0){OUT2=0;IN_bz2=1;}}// 如果IN2有信号输入和标志位IN_bz2等于0,等待10毫秒再次判断IN2是否有信号,如果有OUT2继电器吸合IN_bz2标志位置1
if((IN2==1)&&(IN_bz2==1)){Delay10ms();if(IN2==1){OUT2=1;IN_bz2=0;}}// 如果IN2无信号输入和标志位IN_bz2等于1,等待10毫秒再次判断IN2是否有信号,如果无OUT2继电器断开IN_bz2标志位置0

if((IN3==0)&&(IN_bz3==0)){Delay10ms();if(IN3==0){OUT3=0;IN_bz3=1;}}// 如果IN3有信号输入和标志位IN_bz3等于0,等待10毫秒再次判断IN3是否有信号,如果有OUT3继电器吸合IN_bz3标志位置1
if((IN3==1)&&(IN_bz3==1)){Delay10ms();if(IN3==1){OUT3=1;IN_bz3=0;}}// 如果IN3无信号输入和标志位IN_bz3等于1,等待10毫秒再次判断IN3是否有信号,如果无OUT3继电器断开IN_bz3标志位置0

if((IN4==0)&&(IN_bz4==0)){Delay10ms();if(IN4==0){OUT4=0;IN_bz4=1;}}// 如果IN4有信号输入和标志位IN_bz4等于0,等待10毫秒再次判断IN4是否有信号,如果有OUT4继电器吸合IN_bz4标志位置1
if((IN4==1)&&(IN_bz4==1)){Delay10ms();if(IN4==1){OUT4=1;IN_bz4=0;}}// 如果IN4无信号输入和标志位IN_bz4等于1,等待10毫秒再次判断IN4是否有信号,如果无OUT4继电器断开IN_bz4标志位置0

if((IN5==0)&&(IN_bz5==0)){Delay10ms();if(IN5==0){OUT5=0;IN_bz5=1;}}// 如果IN5有信号输入和标志位IN_bz5等于0,等待10毫秒再次判断IN5是否有信号,如果有OUT5继电器吸合IN_bz5标志位置1
if((IN5==1)&&(IN_bz5==1)){Delay10ms();if(IN5==1){OUT5=1;IN_bz5=0;}}// 如果IN5无信号输入和标志位IN_bz5等于1,等待10毫秒再次判断IN5是否有信号,如果无OUT5继电器断开IN_bz5标志位置0

if((IN6==0)&&(IN_bz6==0)){Delay10ms();if(IN6==0){OUT1=0;OUT6=0;IN_bz6=1;}}// 如果IN6有信号输入和标志位IN_bz6等于0,等待10毫秒再次判断IN6是否有信号,如果有OUT6继电器吸合IN_bz6标志位置1
if((IN6==1)&&(IN_bz6==1)){Delay10ms();if(IN6==1){OUT1=1;OUT6=1;IN_bz6=0;}}// 如果IN6无信号输入和标志位IN_bz6等于1,等待10毫秒再次判断IN6是否有信号,如果无OUT6继电器断开IN_bz6标志位置0

if((IN7==0)&&(IN_bz7==0)){Delay10ms();if(IN7==0){OUT1=0;OUT2=0;OUT7=0;IN_bz7=1;}}// 如果IN7有信号输入和标志位IN_bz7等于0,等待10毫秒再次判断IN7是否有信号,如果有OUT7继电器吸合IN_bz7标志位置1
if((IN7==1)&&(IN_bz7==1)){Delay10ms();if(IN7==1){OUT1=1;OUT2=1;OUT7=1;IN_bz7=0;}}// 如果IN7无信号输入和标志位IN_bz7等于1,等待10毫秒再次判断IN7是否有信号,如果无OUT7继电器断开IN_bz7标志位置0

if((IN8==0)&&(IN_bz8==0)){Delay10ms();if(IN8==0){OUT8=0;IN_bz8=1;}}// 如果IN8有信号输入和标志位IN_bz8等于0,等待10毫秒再次判断IN8是否有信号,如果有OUT8继电器吸合IN_bz8标志位置1
if((IN8==1)&&(IN_bz8==1)){Delay10ms();if(IN8==1){OUT8=1;IN_bz8=0;}}// 如果IN8无信号输入和标志位IN_bz8等于1,等待10毫秒再次判断IN8是否有信号,如果无OUT8继电器断开IN_bz8标志位置0

if((IN9==0)&&(IN_bz9==0)){Delay10ms();if(IN9==0){OUT9=0;IN_bz9=1;}}// 如果IN9有信号输入和标志位IN_bz9等于0,等待10毫秒再次判断IN9是否有信号,如果有OUT9继电器吸合IN_bz9标志位置1
if((IN9==1)&&(IN_bz9==1)){Delay10ms();if(IN9==1){OUT9=1;IN_bz9=0;}}// 如果IN9无信号输入和标志位IN_bz9等于1,等待10毫秒再次判断IN9是否有信号,如果无OUT9继电器断开IN_bz9标志位置0

if((IN10==0)&&(IN_bz10==0)){Delay10ms();if(IN10==0){OUT10=0;IN_bz10=1;}}// 如果IN10有信号输入和标志位IN_bz10等于0,等待10毫秒再次判断IN10是否有信号,如果有OUT10继电器吸合IN_bz10标志位置1
if((IN10==1)&&(IN_bz10==1)){Delay10ms();if(IN10==1){OUT10=1;IN_bz10=0;}}// 如果IN10无信号输入和标志位IN_bz10等于1,等待10毫秒再次判断IN10是否有信号,如果无OUT10继电器断开IN_bz10标志位置0


}
}
/********************************************************************
                        结束
*********************************************************************/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zxc115451619/article/details/132872447

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法