ZXC-0168 STC8A8K64D4单片机 第15讲 控制继电器流水灯输出方法1(延时方式)
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
*********************************************************************/
/*************功能说明 **************
第15讲 控制继电器流水灯输出方法1(延时方式)
1.使用Delay500ms();延时函数 控制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;//蜂鸣器控制脚
uchar yan_shi=1;//延时时间变量
//========================================================================
// 函数声明
void Delay50ms(yan_shi); //延时函数@11.0592MHz
void quan_guan(); //全关函数
void bo_ba(); //拨码函数
//========================================================================
/************************ 50ms消抖延时函数 ****************************/
void Delay50ms(yan_shi) //@11.0592MHz
{
unsigned char i, j, k;
i = yan_shi;
j = 243;
k = 255;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//========================================================================
/************************ 全关函数 ****************************/
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=4;}//如果拨码开关没有拨下演示时间0.2秒
if((BM01==0)&&(BM02==1)&&(BM03==1)&&(BM04==1)){yan_shi=8;}//如果拨码开关1拨下演示时间0.4秒
if((BM01==1)&&(BM02==0)&&(BM03==1)&&(BM04==1)){yan_shi=12;}//如果拨码开关1拨下演示时间0.6秒
if((BM01==1)&&(BM02==1)&&(BM03==0)&&(BM04==1)){yan_shi=20;}//如果拨码开关1拨下演示时间1秒
if((BM01==1)&&(BM02==1)&&(BM03==1)&&(BM04==0)){yan_shi=40;}//如果拨码开关1拨下演示时间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; //运行指示灯亮
while (1)//主函数执行循环扫描
{
bo_ba();//拨码函数
OUT1=0; //继电器1吸合
Delay50ms(yan_shi); //延时
OUT2=0; //继电器2吸合
Delay50ms(yan_shi); //延时
OUT3=0; //继电器3吸合
Delay50ms(yan_shi); //延时
OUT4=0; //继电器4吸合
Delay50ms(yan_shi); //延时
OUT5=0; //继电器5吸合
Delay50ms(yan_shi); //延时
OUT6=0; //继电器6吸合
Delay50ms(yan_shi); //延时
OUT7=0; //继电器7吸合
Delay50ms(yan_shi); //延时
OUT8=0; //继电器8吸合
Delay50ms(yan_shi); //延时
OUT9=0; //继电器1吸合
Delay50ms(yan_shi); //延时
OUT10=0; //继电器10吸合
Delay50ms(yan_shi); //延时
quan_guan();//全关函数
Delay50ms(yan_shi); //延时
}
}
/********************************************************************
结束
*********************************************************************/
页:
[1]