拨码开关控制实验电路图Word文档下载推荐.docx
《拨码开关控制实验电路图Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《拨码开关控制实验电路图Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
S2或S4或S6开关on,则后四个LED亮;
S7及S8开关on,则所有LED全亮,程序应如何编写?
若将拨码开关换成一般家里墙壁上的开关,而LED换成继电器(RELAY),是否可作为家里的负载控制?
按钮ON-OFF控制实验
按钮ON-OFF控制实验电路图
流程图如下:
/*基本按钮ON-OFF控制实验*/
//==声明区=======================================
#include//定义8051头文件,引入reg52.h
sbitPB1=P2^0;
//声明按钮1接至P2.0
sbitPB2=P2^1;
//声明按钮2接至P2.1
sbitLED=P1^0;
//声明LED为P1.0
//==主程式=======================================
{LED=1;
//关闭LED
PB1=PB2=1;
//规划输入端口while
(1)//无穷循环,程式一直跑{
if(PB2==0)LED=1;
//若按下PB2,则关闭LEDelseif(PB1==0)LED=0;
//若按下PB1,则点亮LED}//while循环结束
}//结束程序
若将按钮开关当成启动电机的ON-OFF开关,而LED换成继电器(RELAY),是否可作为电机控制?
若同时按下PB1与PB2按钮会怎样?
按钮切换式控制实验
按钮切换式控制实验电路图
实验代码:
/*按钮切换式控制实验*/
//==声明区=====================================#include//定义8051头文件,引入reg52.hsbitPB1=P2^0;
//声明PB1接至P2.0
//声明LED接至P1.0
voiddebouncer(void);
//声明防弹跳函数
//==主程序=====================================main()//主程式开始
PB1=1;
//规划P2.0为输入埠
while
(1)//无穷循环,程序一直跑{if(PB1==0)//若按下PB1{debouncer();
//呼叫防弹跳函数(按下时)LED=!
LED;
//切换LED为反相while(PB1!
=1);
//若仍按住PB1,继续等debouncer();
//呼叫防弹跳函数(放开时)}//if叙述结束}//while循环结束
//==子程序=====================================
/*防弹跳函数函数,延迟约20ms*/
voiddebouncer(void)//防弹跳函数开始
{inti;
//声明整数变数i
for(i=0;
i
}//防弹跳函数结束
在本实验里,改变debouncer函数的时间长短,看看有什么影响?
若按住PB1不放会怎样?
如何改善?
按钮开关应用电路图
代码如下:
/*按钮开关应用(两按钮控制七段显示器上下数)*/
//==声明区==========================================#include//定义8051头文件,引入reg52.h文件#defineSEGP0//定义七节显示器接至P0端口
/*声明七节显示器驱动信号阵列(共阳)*/
charcode
TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};
//数字0-9
//==主程式=================================main()//主程序开始
{unsignedchari=0;
//声明变量i初值=0
//规划输入端口SEG=TAB[i];
//输出数字至七段显示器while
(1)//无穷循环,程式一直跑{if(PB1==0)//判断PB1是否按下{debouncer();
//呼叫防弹跳函数i=(i=9清除为0SEG=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
//==子程序==================================
//声明整数变量i
在本实验里,若按钮按住不放,会怎样?
在本实验里,若PB1与PB2两个按钮同时按,会怎样?
BCD数字型拨码开关实验
BCD数字型拨码开关实验电路图
/*BCD数字型指拨开关实验*/
//==声明区======================================
#include//定义8051头文件,引入reg52.h文件#defineSEGP0//定义七节显示器接至P0
#defineSWP2//定义开关接至P2
#defineSW_H()SW&
0x0f//读取开关值(P2清除高4bits)
//==主程序
======================================
//规划输入埠
while
(1)//无穷循环,程序一直跑SEG=TAB[SW_H()];
//读取开关值,输出至七节显示器(P0)}//主程序结束
若把本单元的BCD数字型拨码开关,改为16进位数字型拨码开关,程序应如何修改?
多重按钮开关实验
多重按钮开关实验电路图
实验中的自编库函数
/*myio.h自己写的程序库*/
//==声明区==============================
#defineLEDP1//定义LED接至P1
voiddelay10ms(int);
//声明10毫秒延迟函数
voidalter(int);
//声明交互闪烁函数
voidleft(int);
//声明单灯左移函数
voidright(int);
//声明单灯右移函数
voidpili(int);
//声明霹雳灯函数
voidflash(int);
//声明闪烁函数
//==自己写的子程序========================
{delay10ms
(2);
//延迟约20ms
/*延迟函数开始,延迟约x10ms*/
voiddelay10ms(intx)//延迟函数开始
{inti,j;
//声明整数变量i,j
for(i=0;
}//延迟函数结束
/*高低位元交互闪烁函数,执行x次*/
voidalter(intx)//高低位元交互闪烁函数开始
//声明变量i
LED=0x0f;
//初始状态(高位元亮,低位元灭)for(i=0;
}//高低位元交互闪烁函数结束
/*全灯闪烁函数,执行x次*/
voidflash(intx)//全灯闪烁函数开始
LED=0x00;
//初始状态(全亮)for(i=0;
}//全灯闪烁函数结束
/*单灯左移函数,执行x圈*/
voidleft(intx)//单灯左移函数开始
{inti,j;
//声明变量i,j
}//单灯左移函数结束
/*单灯右移函数,执行x圈*/
voidright(intx)//单灯右移函数开始for(i=0;
i>
1)|0x80;
//左移1位後,MSB设为1}//j循环结束delay10ms(25);
//延迟2510m=0.25s}//i循环结束
/*霹雳灯函数,执行x圈*/
voidpili(intx)//霹雳灯函数开始
}//霹雳灯函数结束
多重按钮开关实验之一:
代码
/*多重按钮开关实验之1*/
//==声明区================================
#include//定义8051头文件,引入reg52.h文件#include"
myio.h"
//自己写的I/O程序库
//声明PB1=P2.0
//声明PB2=P2.1
sbitPB3=P2^2;
//声明PB3=P2.2
sbitPB4=P2^3;
//声明PB4=P2.3
//==主程序================================
{LED=0xff;
//初始状态(LED全灭)
P2=0xff;
//规划P2输入端口while
(1)//无穷循环,程序一直跑{if(PB1==0)//如果按下PB