找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1188|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

ZXC-0168 STC8A8K64D4單片機(jī) 第6講 開(kāi)關(guān)信號(hào)控制對(duì)應(yīng)繼電器輸出自鎖程序2

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:280979 發(fā)表于 2023-11-15 12:24 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式




【聲明】此程序僅用于學(xué)習(xí)與參考,引用請(qǐng)注明版權(quán)和作者信息!
*********************************************************************/
/*************  功能說(shuō)明    **************
開(kāi)關(guān)信號(hào)控制對(duì)應(yīng)繼電器輸出自鎖程序

使用 if....Delay(消抖)...while....Delay(消抖) 實(shí)現(xiàn)繼電器輸入控制輸出 (自鎖程序)
******************************************/

#include "STC8A8K64D4.h"   //包含此頭文件后,里面聲明的寄存器不需要再手動(dòng)輸入,避免重復(fù)定義
#include "intrins.h"       //一般程序中需要使用到空指令_nop_();字符循環(huán)移位指令_crol_等時(shí)使用。
#define uchar unsigned char//宏定義無(wú)符號(hào)字符型
#define uint unsigned int  //宏定義無(wú)符號(hào)整型

/*************        本地常量聲明        **************/
/*************        光耦隔離輸入口        **************/
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;//運(yùn)行狀態(tài)指示燈
sbit FMQ= P0^7;//蜂鳴器控制腳

/*******************標(biāo)志位設(shè)定*********************/

bit IN_bz1=0; //輸入標(biāo)志位
bit IN_bz2=0; //輸入標(biāo)志位
bit IN_bz3=0; //輸入標(biāo)志位
bit IN_bz4=0; //輸入標(biāo)志位
bit IN_bz5=0; //輸入標(biāo)志位
bit IN_bz6=0; //輸入標(biāo)志位
bit IN_bz7=0; //輸入標(biāo)志位
bit IN_bz8=0; //輸入標(biāo)志位
bit IN_bz9=0; //輸入標(biāo)志位
bit IN_bz10=0;//輸入標(biāo)志位
//========================================================================
// 函數(shù)聲明
void Delay10ms();                //延時(shí)函數(shù)@11.0592MHz
//========================================================================
/************************ 10ms消抖延時(shí)函數(shù) ****************************/
void Delay10ms()                //延時(shí)函數(shù)@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 144;
j = 157;
do
{
while (--j);
} while (--i);
}
//========================================================================
// 函數(shù): void main(void)
// 描述: 主函數(shù)。
// 參數(shù): none.
// 返回: none.
//========================================================================
void main()//主函數(shù)
{
P0M1 = 0x00;   P0M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
P1M1 = 0x00;   P1M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
P2M1 = 0x00;   P2M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
P3M1 = 0x00;   P3M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
P4M1 = 0x00;   P4M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
P5M1 = 0x00;   P5M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
P6M1 = 0x00;   P6M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
P7M1 = 0x00;   P7M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
RUN=0;        //運(yùn)行指示燈亮
while (1)//主函數(shù)執(zhí)行循環(huán)掃描
{
       
if((IN1==0)&&(IN_bz1==0)){Delay10ms();if(IN1==0){OUT1=!OUT1;IN_bz1=1;}}// 如果IN1有信號(hào)輸入和標(biāo)志位IN_bz1等于0,等待10毫秒再次判斷IN1是否有信號(hào),如果有OUT1繼電器狀態(tài)取反IN_bz1標(biāo)志位置1
while(!IN1){Delay10ms();if(IN1==1){IN_bz1=0;}}                         // 等待IN1無(wú)信號(hào)輸入和標(biāo)志位IN_bz1等于1,等待10毫秒再次判斷IN1是否有信號(hào),如果無(wú)IN_bz1標(biāo)志位置0

if((IN2==0)&&(IN_bz2==0)){Delay10ms();if(IN2==0){OUT2=!OUT2;IN_bz2=1;}}// 如果IN2有信號(hào)輸入和標(biāo)志位IN_bz2等于0,等待10毫秒再次判斷IN2是否有信號(hào),如果有OUT2繼電器狀態(tài)取反IN_bz2標(biāo)志位置1
while(!IN2){Delay10ms();if(IN2==1){IN_bz2=0;}}                         // 等待IN2無(wú)信號(hào)輸入和標(biāo)志位IN_bz2等于1,等待10毫秒再次判斷IN2是否有信號(hào),如果無(wú)IN_bz2標(biāo)志位置0

if((IN3==0)&&(IN_bz3==0)){Delay10ms();if(IN3==0){OUT3=!OUT3;IN_bz3=1;}}// 如果IN3有信號(hào)輸入和標(biāo)志位IN_bz3等于0,等待10毫秒再次判斷IN3是否有信號(hào),如果有OUT3繼電器狀態(tài)取反IN_bz3標(biāo)志位置1
while(!IN3){Delay10ms();if(IN3==1){IN_bz3=0;}}                         // 等待IN3無(wú)信號(hào)輸入和標(biāo)志位IN_bz3等于1,等待10毫秒再次判斷IN3是否有信號(hào),如果無(wú)IN_bz3標(biāo)志位置0

if((IN4==0)&&(IN_bz4==0)){Delay10ms();if(IN4==0){OUT4=!OUT4;IN_bz4=1;}}// 如果IN4有信號(hào)輸入和標(biāo)志位IN_bz4等于0,等待10毫秒再次判斷IN4是否有信號(hào),如果有OUT4繼電器狀態(tài)取反IN_bz4標(biāo)志位置1
while(!IN4){Delay10ms();if(IN4==1){IN_bz4=0;}}                         // 等待IN4無(wú)信號(hào)輸入和標(biāo)志位IN_bz4等于1,等待10毫秒再次判斷IN4是否有信號(hào),如果無(wú)IN_bz4標(biāo)志位置0

if((IN5==0)&&(IN_bz5==0)){Delay10ms();if(IN5==0){OUT5=!OUT5;IN_bz5=1;}}// 如果IN5有信號(hào)輸入和標(biāo)志位IN_bz5等于0,等待10毫秒再次判斷IN5是否有信號(hào),如果有OUT5繼電器狀態(tài)取反IN_bz5標(biāo)志位置1
while(!IN5){Delay10ms();if(IN5==1){IN_bz5=0;}}                         // 等待IN5無(wú)信號(hào)輸入和標(biāo)志位IN_bz5等于1,等待10毫秒再次判斷IN5是否有信號(hào),如果無(wú)IN_bz5標(biāo)志位置0

if((IN6==0)&&(IN_bz6==0)){Delay10ms();if(IN6==0){OUT6=!OUT6;IN_bz6=1;}}// 如果IN6有信號(hào)輸入和標(biāo)志位IN_bz6等于0,等待10毫秒再次判斷IN6是否有信號(hào),如果有OUT6繼電器狀態(tài)取反IN_bz6標(biāo)志位置1
while(!IN6){Delay10ms();if(IN6==1){IN_bz6=0;}}                         // 等待IN6無(wú)信號(hào)輸入和標(biāo)志位IN_bz6等于1,等待10毫秒再次判斷IN6是否有信號(hào),如果無(wú)IN_bz6標(biāo)志位置0

if((IN7==0)&&(IN_bz7==0)){Delay10ms();if(IN7==0){OUT7=!OUT7;IN_bz7=1;}}// 如果IN7有信號(hào)輸入和標(biāo)志位IN_bz7等于0,等待10毫秒再次判斷IN7是否有信號(hào),如果有OUT7繼電器狀態(tài)取反IN_bz7標(biāo)志位置1
while(!IN7){Delay10ms();if(IN7==1){IN_bz7=0;}}                         // 等待IN7無(wú)信號(hào)輸入和標(biāo)志位IN_bz7等于1,等待10毫秒再次判斷IN7是否有信號(hào),如果無(wú)IN_bz7標(biāo)志位置0

if((IN8==0)&&(IN_bz8==0)){Delay10ms();if(IN8==0){OUT8=!OUT8;IN_bz8=1;}}// 如果IN8有信號(hào)輸入和標(biāo)志位IN_bz8等于0,等待10毫秒再次判斷IN8是否有信號(hào),如果有OUT8繼電器狀態(tài)取反IN_bz8標(biāo)志位置1
while(!IN8){Delay10ms();if(IN8==1){IN_bz8=0;}}                         // 等待IN8無(wú)信號(hào)輸入和標(biāo)志位IN_bz8等于1,等待10毫秒再次判斷IN8是否有信號(hào),如果無(wú)IN_bz8標(biāo)志位置0

if((IN9==0)&&(IN_bz9==0)){Delay10ms();if(IN9==0){OUT9=!OUT9;IN_bz9=1;}}// 如果IN9有信號(hào)輸入和標(biāo)志位IN_bz9等于0,等待10毫秒再次判斷IN9是否有信號(hào),如果有OUT9繼電器狀態(tài)取反IN_bz9標(biāo)志位置1
while(!IN9){Delay10ms();if(IN9==1){IN_bz9=0;}}                         // 等待IN9無(wú)信號(hào)輸入和標(biāo)志位IN_bz9等于1,等待10毫秒再次判斷IN9是否有信號(hào),如果無(wú)IN_bz9標(biāo)志位置0

if((IN10==0)&&(IN_bz10==0)){Delay10ms();if(IN10==0){OUT10=!OUT10;IN_bz10=1;}}// 如果IN10有信號(hào)輸入和標(biāo)志位IN_bz10等于0,等待10毫秒再次判斷IN10是否有信號(hào),如果有OUT10繼電器狀態(tài)取反IN_bz10標(biāo)志位置1
while(!IN10){Delay10ms();if(IN10==1){IN_bz10=0;}}                            // 等待IN10無(wú)信號(hào)輸入和標(biāo)志位IN_bz10等于1,等待10毫秒再次判斷IN10是否有信號(hào),如果無(wú)IN_bz10標(biāo)志位置0


}
}
/********************************************************************
                                                結(jié)束
*********************************************************************/

ZXC-0168 STC8A8K64D4單片機(jī)10路輸入10路輸出可編程工控板原理圖.pdf

1.53 MB, 下載次數(shù): 13, 下載積分: 黑幣 -5

第6講 開(kāi)關(guān)信號(hào)控制對(duì)應(yīng)繼電器輸出自鎖程序2.rar

66.82 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:562099 發(fā)表于 2023-11-18 21:39 | 只看該作者
電路圖,電路板介紹詳細(xì)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表