拨码开关控制实验电路图

拨码开关控制实验电路图
流程图
/* 基本开关控制实验  */
//==宣告区=================================
#include    <reg51.h> //定义8051头文件,引入reg52.h
#define    SW    P2//定义开关接至P2
#define    LED    P1//定义LED接至P 1
//==主程式=================================
main()//主程序开始
{    SW=0xff;//规划输入端口 
    while(1)//无穷循环,程式一直跑
        LED=SW;//读取开关(P2)状态,输出到LED(P1)
}//主程序结束
思考一下!
    在本实验里,有没有“抖动”的困扰?
    若希望拨码开关中的S1S3S5三个开关都on,则前四个LED 亮;S2 S4 S6开关on,则后四个LED 亮;S7S8 开关on,则所有LED全亮,程序应如何编写?
    若将拨码开关换成一般家里墙壁上的开关,而LED换成继电器(RELAY),是否可作为家里的负载控制?
按钮ON-OFF控制实验
按钮ON-OFF 控制实验电路图
流程图如下:
/
* 基本按钮 ON-OFF控制实验  */
//==声明区=======================================
#include<reg51.h>//定义8051头文件,引入reg52.h
sbit  PB1=P2^0;//声明按钮1接至P2.0
sbit  PB2=P2^1;//声明按钮2接至P2.1
sbit  LED=P1^0;//声明LED为P1.0
//==主程式=======================================
main()//主程序开始
{    LED=1;//关闭LED
    PB1=PB2=1;//规划输入端口
    while(1)//无穷循环,程式一直跑
    {   
二氧化碳制冷        if (PB2==0) 
            LED=1;//若按下PB2,则关闭LED
        else if (PB1==0) 
            LED=0;//若按下PB1,则点亮LED
    }//while循环结束
}//结束程序
思考一下!
在本实验里,有没有“抖动”的困扰?
若将按钮开关当成启动电机的ON-OFF开关,而LED换成继电器(RELAY),是否可作为电机控制?
若同时按下PB1 PB2按钮会怎样?
按钮切换式控制实验
按钮切换式控制实验电路图
流程图
实验代码:
/* 按钮切换式控制实验 */
//==声明区=====================================
#include<reg51.h>//定义8051头文件,引入reg52.h
sbit  PB1=P2^0;//声明PB1接至P2.0
sbit  LED=P1^0;//声明LED接至P1.0
无油空压机结构图
void  debouncer(void);//声明防弹跳函数
//==主程序=====================================
main()//主程式开始       
{    LED=1;//关闭LED
    PB1=1;//规划P2.0为输入埠
    while(1)//无穷循环,程序一直跑
    {    if (PB1==0)//若按下PB1
        {    debouncer();//呼叫防弹跳函数(按下时)
            LED=!LED;//切换LED为反相
            while(PB1 != 1);//若仍按住PB1,继续等
            debouncer();//呼叫防弹跳函数(放开时)
        }//if叙述结束
    }//while循环结束
}//主程序结束
//==子程序=====================================
/* 防弹跳函数函数,延迟约20ms */
void debouncer(void)//防弹跳函数开始
{    inti;//声明整数变数i
    for(i=0;i<2400;i++);//计数2400次,延迟约20ms
}//防弹跳函数结束
转向节思考一下!
在本实验里,改变debouncer函数的时间长短,看看有什么影响?
若按住PB1不放会怎样?如何改善?
按钮开关应用电路图
流程图
代码如下:
/* 按钮开关应用(两按钮控制七段显示器上下数) */
//==声明区==========================================
#include<reg51.h>//定义8051头文件,引入reg52.件
#define    SEG P0//定义七节显示器接至P0端口
/* 声明七节显示器驱动信号阵列(共阳) */
char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};//数字0-9
sbit  PB1=P2^0;//声明按钮1接至P2.0
sbit  PB2=P2^1;//声明按钮2接至P2.1
void debouncer(void);//声明防弹跳函数
//==主程式=================================
main()//主程序开始
{    unsigned char i=0;//声明变量i初值=0
    PB1=PB2=1;//规划输入端口
    SEG=TAB[i];//输出数字至七段显示器
    while(1)//无穷循环,程式一直跑
    {    if (PB1==0)//判断PB1是否按下
        {    debouncer();//呼叫防弹跳函数
            i= (i<9)? i+1:0;//若i<9则i=i+1,若i>=9清除为0
            SEG=TAB[i];    //输出数字至七段显示器
            while(PB1==0);    //PB1是否按住?
            debouncer();    //呼叫防弹跳函数
        }//if叙述结束
        if (PB2==0)//判断PB2是否按下   
        {    debouncer();//呼叫防弹跳函数
            i= (i>0)? i-1:9;//若i>0则i=i-1,i<=0重设为9
            SEG=TAB[i];//输出数字至七段显示器
            while(PB2==0);//PB1是否按住?
            debouncer();//呼叫防弹跳函数
        }//if叙述结束
    }//while循环结束
}//主程序结束
//==子程序==================================
/* 防弹跳函数函数,延迟约20ms */粽子机
void debouncer(void)//防弹跳函数开始
{    inti;//声明整数变量i
    for(i=0;i<2400;i++);//计数2400次,延迟约20ms
}//防弹跳函数结束
思考一下!
在本实验里,若按钮按住不放,会怎样?如何改善?
在本实验里,若PB1PB2两个按钮同时按,会怎样?
p503
BCD数字型拨码开关实验
BCD数字型拨码开关实验电路图
流程图
实验代码:
/* BCD数字型指拨开关实验 */
//==声明区======================================
#include<reg51.h>//定义8051头文件,引入reg52.件
#define    SEG P0//定义七节显示器接至P0
#define    SW P2//定义开关接至P2
/* 声明七节显示器驱动信号阵列(共阳) */
char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};//数字0-9
#define    SW_H() SW&0x0f//读取开关值(P2清除高4bits)
//==主程序======================================
main()//主程序开始
{    SW=0xff;//规划输入埠
    while(1)//无穷循环,程序一直跑
        SEG=TAB[SW_H()];//读取开关值,输出至七节显示器(P0)
}//主程序结束
思考一下!
在本实验里,有没有“抖动”的困扰?
若把本单元的BCD数字型拨码开关,改为16进位数字型拨码开关,程序应如何修改?
多重按钮开关实验
多重按钮开关实验电路图
流程图
实验中的自编库函数
/* myio.h自己写的程序库 */
//==声明区==============================
#define    LED P1//定义LED接至P1
void debouncer(void);//声明防弹跳函数
void delay10ms(int);//声明10毫秒延迟函数
void alter(int);//声明交互闪烁函数
void left(int);//声明单灯左移函数
void right(int);//声明单灯右移函数
void pili(int);    //声明霹雳灯函数
void flash(int);//声明闪烁函数
//==自己写的子程序========================
/* 防弹跳函数函数,延迟约20ms */
void debouncer(void)//防弹跳函数开始
{    delay10ms(2);//延迟约20ms
}//防弹跳函数结束
/* 延迟函数开始,延迟约x 10ms */
void delay10ms(int x)//延迟函数开始
{    inti,j;//声明整数变量i,j
    for (i=0;i<x;i++)//计数x次,延迟约x 10ms
        for (j=0;j<1200;j++);//计数1200次,延迟约10ms
}//延迟函数结束
/* 高低位元交互闪烁函数,执行x次 */
void alter(int x)//高低位元交互闪烁函数开始
{    inti;//声明变量i
    LED=0x0f;//初始状态(高位元亮,低位元灭)
    for(i=0;i<2*x-1;i++)//i变量for循环执行2x-1次
    {    delay10ms(50);//延迟50*10m=0.5s
        LED=~LED;//LED反相输出
    }//i变量for循环结束
    delay10ms(50);//延迟50 10m=0.5s           
}//高低位元交互闪烁函数结束
/* 全灯闪烁函数,执行x次 */
void flash(int x)//全灯闪烁函数开始
{    inti;//声明变量i

本文发布于:2024-09-22 09:31:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/205074.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   实验   开关   声明
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议