找回密码
 立即注册
查看: 347|回复: 1

ZXC-0168 STC8A8K64D4单片机第17讲 控制继电器花样流水灯程序

[复制链接]
  • TA的每日心情
    开心
    2024-3-29 12:03
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    24

    主题

    6

    回帖

    247

    积分

    荣誉版主

    积分
    247
    发表于 2023-11-23 12:49:54 | 显示全部楼层 |阅读模式
    ZXC-0168 应用举例.jpg

    ZXC-0168 原理图_00.jpg

    ZXC-0168 标识图.jpg



    【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
    *********************************************************************/
    /*************  功能说明    **************
    第17讲 控制继电器花样流水灯
    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=3;//延时时间变量
    uchar times=0;//累计时间
    //========================================================================
    // 函数声明
    void Delay50ms();                //@11.0592MHz
    void Delay100ms();                //@11.0592MHz
    void Delay200ms();                //@11.0592MHz
    void Delay400ms();                //@11.0592MHz
    void Delay1000ms();                //@11.0592MHz
    void Delay();                //延时函数@11.0592MHz
    void bo_ba();               //拨码函数
    void quan_kai();           //全开函数
    void quan_guan();           //全关函数
    void dan_liang_zuoyi();//正向单个点亮左移函数
    void dan_liang_youyi();//正向单个点亮右移函数
    void jian_ge_zuoyi();//正向间隔点亮左移函数
    void jian_ge_youyi();//反向间隔点亮右移函数       
    void jian_ge_zuoyi_liushui();//正向间隔点亮左移流水灯函数
    void jian_ge_youyi_liushui();//反向间隔点亮右移流水灯函数
    void liu_shui_kaihua();//流水灯开花函数
    void liu_shui_shousuo();//流水灯收缩函数
    void liu_shui_zuoyi();//正向单个点亮左移函数
    void liu_shui_youyi();//正向单个点亮右移函数
    void dan_liang_kaihua();//点亮开花函数
    void dan_liang_shousuo();//点亮开花函数
    //========================================================================
    /************************ 延时函数 ****************************/
    void Delay50ms()                //@11.0592MHz
    {
            unsigned char i, j, k;

            i = 3;
            j = 207;
            k = 28;
            do
            {
                    do
                    {
                            while (--k);
                    } while (--j);
            } while (--i);
    }
    //========================================================================
    /************************ 延时函数 ****************************/
    void Delay100ms()                //@11.0592MHz
    {
            unsigned char i, j, k;

            _nop_();
            i = 6;
            j = 157;
            k = 59;
            do
            {
                    do
                    {
                            while (--k);
                    } while (--j);
            } while (--i);
    }


    //========================================================================
    /************************ 延时函数 ****************************/
    void Delay200ms()                //@11.0592MHz
    {
            unsigned char i, j, k;

            i = 12;
            j = 57;
            k = 122;
            do
            {
                    do
                    {
                            while (--k);
                    } while (--j);
            } while (--i);
    }
    //========================================================================
    /************************ 延时函数 ****************************/
    void Delay400ms()                //@11.0592MHz
    {
            unsigned char i, j, k;

            i = 23;
            j = 113;
            k = 248;
            do
            {
                    do
                    {
                            while (--k);
                    } while (--j);
            } while (--i);
    }

    //========================================================================
    /************************ 延时函数 ****************************/
    void Delay1000ms()                //@11.0592MHz
    {
            unsigned char i, j, k;

            i = 57;
            j = 27;
            k = 112;
            do
            {
                    do
                    {
                            while (--k);
                    } while (--j);
            } while (--i);
    }

    //========================================================================
    /************************ 延时函数 ****************************/
    void Delay()//延时函数
    {
    bo_ba();//拨码函数       
    if(yan_shi==1){Delay50ms();}
    if(yan_shi==2){Delay100ms();}
    if(yan_shi==3){Delay200ms();}
    if(yan_shi==4){Delay400ms();}
    if(yan_shi==5){Delay1000ms();}
    }
    //========================================================================
    /************************ 拨码函数 ****************************/
    void bo_ba() //拨码函数
    {
    if((BM01==1)&&(BM02==1)&&(BM03==1)&&(BM04==1)){yan_shi=1;}//如果拨码开关没有拨下演示时间0.05秒
    if((BM01==0)&&(BM02==1)&&(BM03==1)&&(BM04==1)){yan_shi=2;}//如果拨码开关1拨下演示时间0.1秒
    if((BM01==1)&&(BM02==0)&&(BM03==1)&&(BM04==1)){yan_shi=3;}//如果拨码开关2拨下演示时间0.2秒
    if((BM01==1)&&(BM02==1)&&(BM03==0)&&(BM04==1)){yan_shi=4;}//如果拨码开关3拨下演示时间0.4秒
    if((BM01==1)&&(BM02==1)&&(BM03==1)&&(BM04==0)){yan_shi=5;}//如果拨码开关4拨下演示时间1秒
    }
    //========================================================================
    /************************ 全开函数 ****************************/
    void quan_kai()//全开函数
    {
    OUT1=0;
    OUT2=0;
    OUT3=0;
    OUT4=0;
    OUT5=0;
    OUT6=0;
    OUT7=0;
    OUT8=0;
    OUT9=0;
    OUT10=0;
    }
    /************************ 全关函数 ****************************/
    void quan_guan()//全关函数
    {
    OUT1=1;
    OUT2=1;
    OUT3=1;
    OUT4=1;
    OUT5=1;
    OUT6=1;
    OUT7=1;
    OUT8=1;
    OUT9=1;
    OUT10=1;
    }
    /************************ 正向单个点亮左移函数 ****************************/
    void dan_liang_zuoyi()//正向单个点亮左移函数
    {

    OUT10=0;Delay();OUT10=1;
    OUT9=0;Delay();OUT9=1;
    OUT8=0;Delay();OUT8=1;
    OUT7=0;Delay();OUT7=1;
    OUT6=0;Delay();OUT6=1;
    OUT5=0;Delay();OUT5=1;
    OUT4=0;Delay();OUT4=1;
    OUT3=0;Delay();OUT3=1;
    OUT2=0;Delay();OUT2=1;
    OUT1=0;Delay();OUT1=1;       
    }
    /************************ 反向单个点亮右移函数 ****************************/
    void dan_liang_youyi()//反向单个点亮右移函数
    {
    OUT1=0;Delay();OUT1=1;
    OUT2=0;Delay();OUT2=1;
    OUT3=0;Delay();OUT3=1;
    OUT4=0;Delay();OUT4=1;
    OUT5=0;Delay();OUT5=1;
    OUT6=0;Delay();OUT6=1;
    OUT7=0;Delay();OUT7=1;
    OUT8=0;Delay();OUT8=1;
    OUT9=0;Delay();OUT9=1;
    OUT10=0;Delay();OUT10=1;
    }
    /************************ 正向间隔点亮左移函数 ****************************/
    void jian_ge_zuoyi()//正向间隔点亮左移函数
    {
    OUT10=0;Delay();OUT10=1;
    OUT8=0;Delay();OUT8=1;
    OUT6=0;Delay();OUT6=1;
    OUT4=0;Delay();OUT4=1;
    OUT2=0;Delay();OUT2=1;
    OUT9=0;Delay();OUT9=1;       
    OUT7=0;Delay();OUT7=1;       
    OUT5=0;Delay();OUT5=1;       
    OUT3=0;Delay();OUT3=1;       
    OUT1=0;Delay();OUT1=1;       
    }
    /************************ 反向单个点亮右移函数 ****************************/
    void jian_ge_youyi()//反向单个点亮右移函数
    {

    OUT1=0;Delay();OUT1=1;
    OUT3=0;Delay();OUT3=1;
    OUT5=0;Delay();OUT5=1;
    OUT7=0;Delay();OUT7=1;
    OUT9=0;Delay();OUT9=1;
    OUT2=0;Delay();OUT2=1;       
    OUT4=0;Delay();OUT4=1;       
    OUT6=0;Delay();OUT6=1;
    OUT8=0;Delay();OUT8=1;
    OUT10=0;Delay();OUT10=1;               
    }
    /************************ 正向间隔点亮左移流水灯函数 ****************************/
    void jian_ge_zuoyi_liushui()//正向间隔点亮左移流水灯函数
    {
    OUT10=0;Delay();
    OUT8=0;Delay();
    OUT6=0;Delay();
    OUT4=0;Delay();
    OUT2=0;Delay();
    OUT9=0;Delay();
    OUT7=0;Delay();       
    OUT5=0;Delay();
    OUT3=0;Delay();
    OUT1=0;Delay();
    }
    /************************ 反向间隔点亮右移流水灯函数 ****************************/
    void jian_ge_youyi_liushui()//反向间隔点亮右移流水灯函数
    {


    OUT1=0;Delay();
    OUT3=0;Delay();
    OUT5=0;Delay();
    OUT7=0;Delay();
    OUT9=0;Delay();
    OUT2=0;Delay();
    OUT4=0;Delay();       
    OUT6=0;Delay();
    OUT8=0;Delay();
    OUT10=0;Delay();       
           
    }
    /************************ 流水灯左移函数 ****************************/
    void liu_shui_zuoyi()//正向单个点亮左移函数
    {
    OUT10=0;Delay();
    OUT9=0;Delay();
    OUT8=0;Delay();
    OUT7=0;Delay();
    OUT6=0;Delay();
    OUT5=0;Delay();
    OUT4=0;Delay();
    OUT3=0;Delay();
    OUT2=0;Delay();
    OUT1=0;Delay();
    }
    /************************ 流水灯右移函数 ****************************/
    void liu_shui_youyi()//正向单个点亮右移函数
    {

    OUT1=0;Delay();
    OUT2=0;Delay();
    OUT3=0;Delay();
    OUT4=0;Delay();
    OUT5=0;Delay();
    OUT6=0;Delay();
    OUT7=0;Delay();
    OUT8=0;Delay();
    OUT9=0;Delay();
    OUT10=0;Delay();       
    }
    /************************ 流水灯开花函数 ****************************/
    void liu_shui_kaihua()//流水灯开花函数
    {
    OUT5=0;OUT6=0;Delay();
    OUT4=0;OUT7=0;Delay();
    OUT3=0;OUT8=0;Delay();
    OUT2=0;OUT9=0;Delay();
    OUT1=0;OUT10=0;Delay();
    }
    /************************ 流水灯收缩函数 ****************************/
    void liu_shui_shousuo()//流水灯收缩函数
    {
    OUT1=0;OUT10=0;Delay();
    OUT2=0;OUT9=0;Delay();       
    OUT3=0;OUT8=0;Delay();       
    OUT4=0;OUT7=0;Delay();
    OUT5=0;OUT6=0;Delay();       
    }
    /************************ 点亮开花函数 ****************************/
    void dan_liang_kaihua()//点亮开花函数
    {
    OUT5=0;OUT6=0;Delay();OUT5=1;OUT6=1;
    OUT4=0;OUT7=0;Delay();OUT4=1;OUT7=1;
    OUT3=0;OUT8=0;Delay();OUT3=1;OUT8=1;
    OUT2=0;OUT9=0;Delay();OUT2=1;OUT9=1;
    OUT1=0;OUT10=0;Delay();OUT1=1;OUT10=1;
    }
    /************************ 点亮收缩函数 ****************************/
    void dan_liang_shousuo()//点亮开花函数
    {
    OUT1=0;OUT10=0;Delay();OUT1=1;OUT10=1;
    OUT2=0;OUT9=0;Delay();OUT2=1;OUT9=1;       
    OUT3=0;OUT8=0;Delay();OUT3=1;OUT8=1;       
    OUT4=0;OUT7=0;Delay();OUT4=1;OUT7=1;
    OUT5=0;OUT6=0;Delay();OUT5=1;OUT6=1;       
    }


    //========================================================================
    // 函数: 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)//主函数执行循环扫描
    {
    quan_guan();           //全关函数
    dan_liang_youyi();//正向单个点亮右移函数       
    dan_liang_youyi();//正向单个点亮右移函数       
    dan_liang_youyi();//正向单个点亮右移函数       
    dan_liang_zuoyi();//正向单个点亮左移函数
    dan_liang_zuoyi();//正向单个点亮左移函数
    dan_liang_zuoyi();//正向单个点亮左移函数
    quan_kai();           //全开函数
    Delay();        //延时函数
    dan_liang_kaihua();//点亮开花函数
    dan_liang_kaihua();//点亮开花函数
    Delay();        //延时函数
    dan_liang_shousuo();//点亮开花函数
    dan_liang_shousuo();//点亮开花函数
    quan_guan();           //全关函数
    dan_liang_youyi();//正向单个点亮右移函数       
    quan_guan();           //全关函数
    dan_liang_zuoyi();//正向单个点亮左移函数               
    Delay();        //延时函数
    quan_guan();           //全关函数       
    jian_ge_youyi_liushui();//反向间隔点亮右移流水灯函数
    Delay();        //延时函数
    quan_guan();           //全关函数       
    jian_ge_zuoyi_liushui();//正向间隔点亮左移流水灯函数
    Delay();        //延时函数
    quan_guan();           //全关函数       
    jian_ge_zuoyi();//正向间隔点亮左移函数
    Delay();        //延时函数
    quan_guan();           //全关函数  
    jian_ge_youyi();//反向间隔点亮右移函数       
    Delay();        //延时函数
    quan_guan();           //全关函数
    liu_shui_youyi();//正向单个点亮右移函数       
    Delay();        //延时函数
    quan_guan();           //全关函数       
    Delay();        //延时函数
    quan_kai();           //全开函数
    Delay();        //延时函数
    quan_guan();           //全关函数       
    Delay();        //延时函数
    quan_kai();           //全开函数
    Delay();        //延时函数
    quan_guan();           //全关函数       
    Delay();        //延时函数
    quan_kai();           //全开函数
    Delay();        //延时函数
    quan_guan();           //全关函数       
    Delay();        //延时函数
    liu_shui_kaihua();//流水灯开花函数
    Delay();        //延时函数
    quan_guan();           //全关函数       
    Delay();        //延时函数
    liu_shui_shousuo();//流水灯收缩函数
    Delay();        //延时函数
    quan_guan();           //全关函数
    Delay();        //延时函数
    liu_shui_zuoyi();//正向单个点亮左移函数
    Delay();        //延时函数
    quan_guan();           //全关函数
    Delay();        //延时函数
    liu_shui_youyi();//正向单个点亮右移函数       
    Delay();        //延时函数
    quan_guan();           //全关函数
    Delay();        //延时函数
    dan_liang_kaihua();//点亮开花函数
    Delay();        //延时函数
    quan_guan();           //全关函数
    Delay();        //延时函数
    dan_liang_shousuo();//点亮开花函数       
    Delay();        //延时函数
    quan_guan();           //全关函数
    Delay();        //延时函数
    }
    }
    /********************************************************************
                                                    主程序结束
    *********************************************************************/



    第17讲 控制继电器花样流水灯程序.rar

    78.29 KB, 下载次数: 16

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

    1.53 MB, 下载次数: 10

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 33 天

    [LV.5]常住居民I

    4

    主题

    77

    回帖

    114

    积分

    注册会员

    积分
    114
    发表于 2024-3-30 16:47:43 | 显示全部楼层
    牛人
    回复 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 14:56 , Processed in 0.074851 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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