拨码开关控制实验电路
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
拨码开关控制实验电路图
流程图
/* 基本开关控制实验 */
//==宣告区=================================
#include
#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
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
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
#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]; //输出数字至七段显示器