找回密码
 立即注册
查看: 677|回复: 0

ZXC-0168 STC8A8K64D4单片机第16讲 控制继电器流水灯输出方法2(定时器方式)

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

24

主题

7

回帖

256

积分

荣誉版主

积分
256
发表于 2023-11-23 12:47:04 | 显示全部楼层 |阅读模式
ZXC-0168 标识图.jpg

ZXC-0168 应用举例.jpg

ZXC-0168 原理图_00.jpg



【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
*********************************************************************/
/*************  功能说明    **************
第16讲 控制继电器流水灯输出方法2(定时器方式)
1.使用定时器方式 实现10路继电器循环输出 流水灯效果
******************************************/

#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 BM01= P7^0;//拨码开关1
sbit BM02= P7^1;//拨码开关2
sbit BM03= P7^2;//拨码开关3
sbit BM04= P7^3;//拨码开关4

sbit RUN= P4^4;//运行状态指示灯
sbit FMQ= P0^7;//蜂鸣器控制脚
uint tcnt=0;// 定时计数器
uchar yan_shi=1;//延时时间变量
uchar times=0;//累计时间
//========================================================================
// 函数声明
void quan_guan();           //全关函数
void bo_ba();               //拨码函数
void Timer0_Init();//定时器0初始化函数
//========================================================================
/************************ 定时器函数 ****************************/
void Timer0_Init()//定时器0初始化函数
{
AUXR |= 0x80;                //定时器时钟1T模式
TMOD &= 0xF0;                //设置定时器模式
TL0 = 0x33;                  //设置定时初始值
TH0 = 0xF5;                  //设置定时初始值
TF0 = 0;                    //清除TF0标志
TR0 = 1;                    //启动定时器0
ET0=1;          //使能INT0中断
EA = 1;         //打开总中断中断允许控制寄存器       
}
//========================================================================
/************************ 全关函数 ****************************/
void quan_guan()//全关函数
{
OUT1=1;
OUT2=1;
OUT3=1;
OUT4=1;
OUT5=1;
OUT6=1;
OUT7=1;
OUT8=1;
OUT9=1;
OUT10=1;
}
//========================================================================
/************************ 拨码函数 ****************************/
void bo_ba() //拨码函数
{
if((BM01==1)&&(BM02==1)&&(BM03==1)&&(BM04==1)){yan_shi=2;}//如果拨码开关没有拨下演示时间0.2秒
if((BM01==0)&&(BM02==1)&&(BM03==1)&&(BM04==1)){yan_shi=3;}//如果拨码开关1拨下演示时间0.3秒
if((BM01==1)&&(BM02==0)&&(BM03==1)&&(BM04==1)){yan_shi=6;}//如果拨码开关2拨下演示时间0.6秒
if((BM01==1)&&(BM02==1)&&(BM03==0)&&(BM04==1)){yan_shi=10;}//如果拨码开关3拨下演示时间1秒
if((BM01==1)&&(BM02==1)&&(BM03==1)&&(BM04==0)){yan_shi=20;}//如果拨码开关4拨下演示时间2秒
}
//========================================================================
// 函数: void main()
// 描述: 主函数。
// 参数: 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;        //运行指示灯亮
Timer0_Init();//定时器0初始化函数       
while (1)//主函数执行循环扫描
{
bo_ba();//拨码函数
}
}
/********************************************************************
                                                主程序结束
*********************************************************************/
/********************************************************************
                                                定时器中断函数
*********************************************************************/
void Timer0_Isr() interrupt 1 //250微秒@11.0592MHz
{
tcnt++;//每中断一次计数值加1       
if(tcnt==400)//如果定时器计数值等于400 也是就0.1秒时间
{
tcnt=0;
times++;
if(times==yan_shi){OUT1=0;}//如果延时时间累加值等于设定值OUT1继电器吸合
if(times==yan_shi*2){OUT2=0;}//如果延时时间累加值等于设定值OUT2继电器吸合
if(times==yan_shi*3){OUT3=0;}//如果延时时间累加值等于设定值OUT3继电器吸合
if(times==yan_shi*4){OUT4=0;}//如果延时时间累加值等于设定值OUT4继电器吸合
if(times==yan_shi*5){OUT5=0;}//如果延时时间累加值等于设定值OUT5继电器吸合
if(times==yan_shi*6){OUT6=0;}//如果延时时间累加值等于设定值OUT6继电器吸合
if(times==yan_shi*7){OUT7=0;}//如果延时时间累加值等于设定值OUT7继电器吸合
if(times==yan_shi*8){OUT8=0;}//如果延时时间累加值等于设定值OUT8继电器吸合
if(times==yan_shi*9){OUT9=0;}//如果延时时间累加值等于设定值OUT9继电器吸合
if(times==yan_shi*10){OUT10=0;}//如果延时时间累加值等于设定值OUT10继电器吸合
if(times==yan_shi*11){quan_guan();times=0;}//如果延时时间累加值等于设定值OUT10继电器吸合
}//如果定时器计数值等于400 也是就0.1秒时间
}
/********************************************************************
                                                结束
*********************************************************************/


第16讲 控制继电器流水灯输出方法2(定时器方式).rar

67.9 KB, 下载次数: 63

ZXC-0168 STC8A8K64D4单片机10路输入10路输出可编程工控板原理图.pdf

1.53 MB, 下载次数: 52

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-11 19:02 , Processed in 0.106343 second(s), 44 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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