收藏 分销(赏)

拨码开关控制实验电路图.docx

上传人:仙人****88 文档编号:9457152 上传时间:2025-03-27 格式:DOCX 页数:28 大小:4.50MB 下载积分:10 金币
下载 相关 举报
拨码开关控制实验电路图.docx_第1页
第1页 / 共28页
拨码开关控制实验电路图.docx_第2页
第2页 / 共28页


点击查看更多>>
资源描述
拨码开关控制实验电路图 流程图 /* 基本开关控制实验 */ //==宣告区================================= #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) }//主程序结束 思考一下! 在本实验里,有没有“抖动”的困扰? 若希望拨码开关中的S1、S3、S5三个开关都on,则前四个LED 亮;S2 或 S4 或 S6开关 on,则后四个LED 亮;S7及 S8 开关 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)//防弹跳函数开始 { int i;//声明整数变数i for(i=0;i<2400;i++);//计数2400次,延迟约20ms }//防弹跳函数结束 思考一下! 在本实验里,改变 debouncer函数的时间长短,看看有什么影响? 若按住 PB1不放会怎样?如何改善? 按钮开关应用电路图 流程图 代码如下: /* 按钮开关应用(两按钮控制七段显示器上下数) */ //==声明区========================================== #include<reg51.h>//定义8051头文件,引入reg52.h文件 #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)//防弹跳函数开始 { int i;//声明整数变量i for(i=0;i<2400;i++);//计数2400次,延迟约20ms }//防弹跳函数结束 思考一下! 在本实验里,若按钮按住不放,会怎样?如何改善? 在本实验里,若 PB1与 PB2两个按钮同时按,会怎样? BCD数字型拨码开关实验 BCD数字型拨码开关实验电路图 流程图 实验代码: /* BCD数字型指拨开关实验 */ //==声明区====================================== #include<reg51.h>//定义8051头文件,引入reg52.h文件 #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)//延迟函数开始 { int i,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)//高低位元交互闪烁函数开始 { int i;//声明变量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)//全灯闪烁函数开始 { int i;//声明变量i LED=0x00;//初始状态(全亮) for(i=0;i<2*x-1;i++)//i变量for循环执行2x-1次 { delay10ms(50);//延迟50 10m=0.5s LED=~LED;//P0反相输出 }//i变量for循环结束 delay10ms(50);//延迟50 10m=0.5s }//全灯闪烁函数结束 /* 单灯左移函数,执行x圈 */ void left(int x)//单灯左移函数开始 { int i, j;//声明变量i,j for(i=0;i<x;i++)//i循环,执行x圈 { LED=0xfe;//初始状态=1111 1110 for(j=0;j<7;j++)//j循环,左移7次 { delay10ms(25);//延迟25 10m=0.25s LED=(LED<<1)|0x01;//左移1位後,LSB设为1 }//j循环结束 delay10ms(25);//延迟25 10m=0.25s }//i循环结束*/ }//单灯左移函数结束 /* 单灯右移函数,执行x圈 */ void right(int x)//单灯右移函数开始 { int i, j;//声明变量i,j for(i=0;i<x;i++)//i循环,执行x圈 { LED=0X7f;//初始状态=0111 1111 for(j=0;j<7;j++)//j循环,右移7次 { delay10ms(25);//延迟25 10m=0.25s LED=(LED>>1)|0x80;//左移1位後,MSB设为1 }//j循环结束 delay10ms(25);//延迟25 10m=0.25s }//i循环结束 }//单灯左移函数结束 /* 霹雳灯函数,执行x圈 */ void pili(int x)//霹雳灯函数开始 { int i;//声明变量i for(i=0;i<x;i++)//i循环,执行x圈 { left(1);//单灯左移一圈 right(1);//单灯左移一圈 }//i循环结束 }//霹雳灯函数结束 多重按钮开关实验之一:代码 /* 多重按钮开关实验之1 */ //==声明区================================ #include<reg52.h>//定义8051头文件,引入reg52.h文件 #include"myio.h"//自己写的I/O程序库 sbit PB1=P2^0;//声明PB1=P2.0 sbit PB2=P2^1;//声明PB2=P2.1 sbit PB3=P2^2;//声明PB3=P2.2 sbit PB4=P2^3;//声明PB4=P2.3 //==主程序================================ main()//主程序开始 { LED=0xff;//初始状态(LED全灭) P2=0xff;//规划P2输入端口 while(1)//无穷循环,程序一直跑 { if (PB1==0)//如果按下PB1 { debouncer();//防弹跳 alter(3);//高低位元交互闪烁三次 flash(3);}//全灯闪烁三次 else if (PB2==0)//如果按下PB2 { debouncer();//防弹跳 left(3);//单灯左移三圈 flash(3);}//全灯闪烁三次 else if (PB3==0)//如果按下PB3 { debouncer();//防弹跳 right(3);//单灯右移三圈 flash(3);}//全灯闪烁三次 else if (PB4==0)//如果按下PB4 { debouncer();//防弹跳 pili(3);//霹雳灯三圈 flash(3);}//全灯闪烁三次 }//while循环结束 }//主程序结束 思考一下! 在本实验里,若同时按下多个按钮会如何? 在本实验里,若按住按钮不放会如何? 在本实验里,其中debouncer函数是个延迟20毫秒的函数,而 delay10ms函数是个延迟 10毫秒的函数,可否使用delay10ms 函数取代 debouncer函数?如何修改? 在本实验里,其中alter函数是个高四位与低四位交替闪烁 的函数,而flash函数是个8灯闪烁的函数,其不同在于其初始值。请修改函数,再增加一个形式参数,以带入初始值,使之变成一个多用途的函数? 多重按钮开关实验之二流程图 /* 多重按钮开关实验之2 */ //==声明区====================================== #include<reg51.h>//定义8051头文件,引入reg52.h文件 #include "myio.h"//自己写的I/O程序库 #define PB P2//定义按钮开关接至P2 //==主程序====================================== main()//主程序开始 { LED=0xff;//初始状态(LED全灭) while(1)//无穷循环,程序一直跑 { PB=0xff;//规划输入埠 switch(~PB)//switch叙述开始 { case 0x01://如果按下PB1 { debouncer();//防弹跳 alter(3);//交互闪烁三次 flash(3);//全灯闪烁三次 break; }//退出switch叙述 case 0x02://如果按下PB2 { debouncer();//防弹跳 left(3);//单灯左移三圈 flash(3);//全灯闪烁三次 break; }//退出switch叙述 case 0x04://如果按下PB3 { debouncer();//防弹跳 right(3);//单灯右移三圈 flash(3);//全灯闪烁三次 break; }//退出switch叙述 case 0x08://如果按下PB4 { debouncer();//防弹跳 pili(3);//霹雳灯三圈 flash(3);//全灯闪烁三次 break; }//退出switch叙述 }//结束switch叙述 }//while结束 }//主程序结束 思考一下! 在本实验里,若同时按下多个按钮会如何? 在本实验里,若按住按钮不放会如何? 放开按钮后动作实验 流程图 实验代码: /* 按钮放开后才动作实验*/ //==声明区====================================== #include<reg51.h>//定义8051头文件,引入reg52.h文件 #include "myio.h"//自己写的I/O程序库 #define PB P2//定义按钮开关接至P2 //==主程序====================================== main()//主程序开始 { LED=0xff;//初始状态(LED全灭) while(1)//无穷循环,程序一直跑 { PB=0xff;//规划P2为输入端口 switch(~PB)//switch叙述开始 { case 0x01://如果按下PB1 { debouncer();//防弹跳 while(~PB==1);//等待PB1放开 debouncer();//防弹跳 alter(3);//交互闪烁三次 flash(3);//全灯闪烁三次 break; }//退出switch叙述 case 0x02://如果按下PB2 { debouncer();//防弹跳 while(~PB==2);//等待PB2放开 debouncer();//防弹跳 left(3);//单灯左移三圈 flash(3);//全灯闪烁三次 break; }//退出switch叙述 case 0x04://如果按下PB3 { debouncer();//防弹跳 while(~PB==4);//等待PB3放开 debouncer();//防弹跳 right(3);//单灯右移三圈 flash(3); //全灯闪烁三次 break; }//退出switch叙述 case 0x08://如果按下PB4 { debouncer();//防弹跳 while(~PB==8);//等待PB4放开 debouncer();//防弹跳 pili(3);//霹雳灯三圈 flash(3);//全灯闪烁三次 break; }//退出switch叙述 }//结束switch叙述 }//while结束 }//主程序结束 • 在本实验里,若将按钮按住不放会如何? ON-OFF控制的另类思考: l 低压工业配线的电机on-off控制 ö l 低压工业配线的电机正反转控制 ö 低压工业配线的三相电机Y-Ñ启动控制 ö 电机on-off控制_电路图 电机on-off控制_程序 电机正反转控制_电路图: 电机正反转控制_程序: 三相电机Y-Ñ启动控制_电路图: 三相电机Y-Ñ启动控制_程序:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服