拨码开关控制实验电路图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
拨码开关控制实验电路图
拨码开关控制实验电路图
流程图
/* 基本开关控制实验 */
//==宣告区=================================
#include //定义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//定义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//定义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
}//防弹跳函数结束
思考一下!
在本实验里,改变 debouncer 函数的时间长短,看看有什么影响?
若按住 PB1不放会怎样?如何改善?
按钮开关应用电路图
流程图
代码如下:
/* 按钮开关应用(两按钮控制七段显示器上下数) */
//==声明区========================================== #include//定义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清除为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
}//主程序结束
//==子程序==================================
/* 防弹跳函数函数, 延迟约20ms */
void debouncer(void)//防弹跳函数开始
{ int i;//声明整数变量i
for(i=0;i
}//防弹跳函数结束
思考一下!
在本实验里,若按钮按住不放,会怎样?如何改善?
在本实验里,若 PB1与 PB2两个按钮同时按,会怎样?
BCD 数字型拨码开关实验
BCD 数字型拨码开关实验电路图
流程图
实验代码:
/* BCD数字型指拨开关实验 */
//==声明区======================================
#include//定义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 次 */
void alter(int x)//高低位元交互闪烁函数开始
{ int i;//声明变量i
LED=0x0f;//初始状态(高位元亮, 低位元灭) for(i=0;i }//高低位元交互闪烁函数结束
/* 全灯闪烁函数, 执行x 次 */
void flash(int x)//全灯闪烁函数开始
{ int i;//声明变量i
LED=0x00;//初始状态(全亮) for(i=0;i
}//全灯闪烁函数结束
/* 单灯左移函数, 执行x 圈 */
void left(int x)//单灯左移函数开始
{ int i, j;//声明变量i,j
}//单灯左移函数结束
/* 单灯右移函数, 执行x 圈 */
void right(int x)//单灯右移函数开始 for(i=0;i
{ int i, j;//声明变量i,j
for(i=0;i>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
}//霹雳灯函数结束
多重按钮开关实验之一:代码
/* 多重按钮开关实验之1 */
//==声明区================================
#include//定义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//定义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//定义8051头文件,引入reg52.h 文件 #include "myio.h"//自己写的I/O程序库
#define PB P2//定义按钮开关接至P2
//==主程序====================================== main()//主程序开始
{ LED=0xff;//初始状态(LED全灭)
{ 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); //全灯闪烁三次
case 0x08://如果按下PB4 { debouncer();//防弹跳 while(~PB==8);//等待PB4放
开 debouncer();//防弹跳 pili(3);//霹雳灯三圈 flash(3);//全灯闪烁三次
break; }//退出switch 叙述 }//结束switch 叙述 }//while结束
}//主程序结束
• 在本实验里,若将按钮按住不放会如何?
ON-OFF 控制的另类思考:
● 低压工业配线的电机on-off 控制● 低压工业配线的电机正反转控制
低压工业配线的三相电机Y- 启动控制电机on-off 控制_电路图
电机on-off 控制_程序
电机正反转控制_电路图:
电机正反转控制_程序:
三相电机Y-∇启动控制_电路图:三相电机Y-∇启动控制_程序:。