拨码开关控制实验电路_第1页
拨码开关控制实验电路_第2页
拨码开关控制实验电路_第3页
拨码开关控制实验电路_第4页
拨码开关控制实验电路_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、拨码开关控制实验电路图流程图2 / 42/* 基本开关控制实验 */=宣告区=#include<reg51.h> /定义8051头文件,引入reg52.h#defineSWP2/定义开关接至P2#defineLEDP1/定义LED接至P 1/=主程式=main()/主程序开始 SW=0xff;/规划输入端口 while(1)/无穷循环,程式一直跑 LED=SW;/读取开关(P2)状态,输出到LED(P1)/主程序结束思考一下!在本实验里,有没有“抖动”的困扰? 若希望拨码开关中的S1、S3、S5三个开关都on,则前四个LED 亮;S2 或 S4 或 S6开关 on,则后四个LED

2、亮;S7及 S8 开关 on, 则所有LED全亮,程序应如何编写? 若将拨码开关换成一般家里墙壁上的开关,而LED换成继电器(RELAY),是否可作为家里的负载控制? 按钮ON-OFF控制实验按钮 ON-OFF 控制实验电路图流程图如下:/* 基本按钮 ON-OFF控制实验 */=声明区=#include<reg51.h>/定义8051头文件,引入reg52.hsbit PB1=P20;/声明按钮1接至P2.0sbit PB2=P21;/声明按钮2接至P2.1sbit LED=P10;/声明LED为P1.0/=主程式=main()/主程序开始 LED=1;/关闭LEDPB1=PB2

3、=1;/规划输入端口 while(1)/无穷循环,程式一直跑 if (PB2=0) LED=1;/若按下PB2,则关闭LEDelse if (PB1=0) LED=0;/若按下PB1,则点亮LED/while循环结束 /结束程序思考一下!在本实验里,有没有“抖动”的困扰? 若将按钮开关当成启动电机的 ON-OFF开关,而 LED换成继电器(RELAY),是否可作为电机控制? è若同时按下 PB1 与 PB2按钮会怎样?按钮切换式控制实验按钮切换式控制实验电路图流程图实验代码:/* 按钮切换式控制实验 */=声明区=#include<reg51.h>/定义8051头文件,引

4、入reg52.hsbit PB1=P20;/声明PB1接至P2.0sbit LED=P10;/声明LED接至P1.0void debouncer(void);/声明防弹跳函数 /=主程序=main()/主程式开始 LED=1;/关闭LEDPB1=1;/规划P2.0为输入埠 while(1)/无穷循环,程序一直跑 if (PB1=0)/若按下PB1debouncer();/呼叫防弹跳函数(按下时)LED=!LED;/切换LED为反相 while(PB1 != 1);/若仍按住PB1,继续等 debouncer();/呼叫防弹跳函数(放开时)/if叙述结束 /while循环结束 /主程序结束 /=

5、子程序=/* 防弹跳函数函数,延迟约20ms */void debouncer(void)/防弹跳函数开始 int i;/声明整数变数i for(i=0;i<2400;i+);/计数2400次,延迟约20ms /防弹跳函数结束思考一下!在本实验里,改变 debouncer函数的时间长短,看看有什么影响? 若按住 PB1不放会怎样?如何改善?按钮开关应用电路图流程图代码如下:/* 按钮开关应用(两按钮控制七段显示器上下数) */=声明区=#include<reg51.h>/定义8051头文件,引入reg52.h文件 #defineSEG P0/定义七节显示器接至P0端口/* 声

6、明七节显示器驱动信号阵列(共阳) */char code TAB10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98;/数字0-9sbit PB1=P20;/声明按钮1接至P2.0sbit PB2=P21;/声明按钮2接至P2.1void debouncer(void);/声明防弹跳函数 /=主程式=main()/主程序开始 unsigned char i=0;/声明变量i初值=0 PB1=PB2=1;/规划输入端口 SEG=TABi;/输出数字至七段显示器 while(1)/无穷循环,程式一直跑 if (PB1=0)/判断PB1是否按下 d

7、ebouncer();/呼叫防弹跳函数 i= (i<9)? i+1:0;/若i<9则i=i+1,若i>=9清除为0SEG=TABi;/输出数字至七段显示器 while(PB1=0);/PB1是否按住? debouncer();/呼叫防弹跳函数 /if叙述结束 if (PB2=0)/判断PB2是否按下 debouncer();/呼叫防弹跳函数 i= (i>0)? i-1:9;/若i>0则i=i-1,i<=0重设为9SEG=TABi;/输出数字至七段显示器 while(PB2=0);/PB1是否按住? debouncer();/呼叫防弹跳函数 /if叙述结束 /

8、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文件 #def

9、ineSEG P0/定义七节显示器接至P0#defineSW P2/定义开关接至P2/* 声明七节显示器驱动信号阵列(共阳) */char code TAB10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98;/数字0-9#defineSW_H() SW&0x0f/读取开关值(P2清除高4bits)/=主程序=main()/主程序开始 SW=0xff;/规划输入埠 while(1)/无穷循环,程序一直跑 SEG=TABSW_H();/读取开关值,输出至七节显示器(P0)/主程序结束思考一下!在本实验里,有没有“抖动”的困扰? 若把本单

10、元的BCD数字型拨码开关,改为16进位数字型拨码开关,程序应如何修改?多重按钮开关实验多重按钮开关实验电路图流程图实验中的自编库函数/* myio.h自己写的程序库 */=声明区=#defineLED P1/定义LED接至P1void debouncer(void);/声明防弹跳函数 void delay10ms(int);/声明10毫秒延迟函数 void alter(int);/声明交互闪烁函数 void left(int);/声明单灯左移函数 void right(int);/声明单灯右移函数 void pili(int);/声明霹雳灯函数 void flash(int);/声明闪烁函数

11、/=自己写的子程序=/* 防弹跳函数函数,延迟约20ms */void debouncer(void)/防弹跳函数开始 delay10ms(2);/延迟约20ms /防弹跳函数结束 /* 延迟函数开始,延迟约x 10ms */void delay10ms(int x)/延迟函数开始 int i,j;/声明整数变量i,jfor (i=0;i<x;i+)/计数x次,延迟约x 10ms for (j=0;j<1200;j+);/计数1200次,延迟约10ms /延迟函数结束 /* 高低位元交互闪烁函数,执行x次 */void alter(int x)/高低位元交互闪烁函数开始int i;

12、/声明变量iLED=0x0f;/初始状态(高位元亮,低位元灭)for(i=0;i<2*x-1;i+)/i变量for循环执行2x-1次 delay10ms(50);/延迟50*10m=0.5sLED=LED;/LED反相输出 /i变量for循环结束 delay10ms(50);/延迟50 10m=0.5s/高低位元交互闪烁函数结束 /* 全灯闪烁函数,执行x次 */void flash(int x)/全灯闪烁函数开始int i;/声明变量iLED=0x00;/初始状态(全亮)for(i=0;i<2*x-1;i+)/i变量for循环执行2x-1次 delay10ms(50);/延迟50

13、 10m=0.5sLED=LED;/P0反相输出/i变量for循环结束 delay10ms(50);/延迟50 10m=0.5s/全灯闪烁函数结束 /* 单灯左移函数,执行x圈 */void left(int x)/单灯左移函数开始int i, j;/声明变量i,jfor(i=0;i<x;i+)/i循环,执行x圈 LED=0xfe;/初始状态=1111 1110for(j=0;j<7;j+)/j循环,左移7次 delay10ms(25);/延迟25 10m=0.25sLED=(LED<<1)|0x01;/左移1位後,LSB设为1/j循环结束 delay10ms(25);

14、/延迟25 10m=0.25s/i循环结束*/单灯左移函数结束 /* 单灯右移函数,执行x圈 */void right(int x)/单灯右移函数开始 int i, j;/声明变量i,jfor(i=0;i<x;i+)/i循环,执行x圈 LED=0X7f;/初始状态=0111 1111for(j=0;j<7;j+)/j循环,右移7次 delay10ms(25);/延迟25 10m=0.25sLED=(LED>>1)|0x80;/左移1位後,MSB设为1/j循环结束 delay10ms(25);/延迟25 10m=0.25s/i循环结束 /单灯左移函数结束 /* 霹雳灯函数

15、,执行x圈 */void pili(int x)/霹雳灯函数开始 int i;/声明变量ifor(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=P20;/声明PB1=P2.0sbit PB2=P21;/声明PB2=P2.1sbit PB3=P22;

16、/声明PB3=P2.2sbit PB4=P23;/声明PB4=P2.3/=主程序=main()/主程序开始 LED=0xff;/初始状态(LED全灭)P2=0xff;/规划P2输入端口 while(1)/无穷循环,程序一直跑 if (PB1=0)/如果按下PB1debouncer();/防弹跳 alter(3);/高低位元交互闪烁三次 flash(3);/全灯闪烁三次 else if (PB2=0)/如果按下PB2debouncer();/防弹跳 left(3);/单灯左移三圈 flash(3);/全灯闪烁三次 else if (PB3=0)/如果按下PB3debouncer();/防弹跳 r

17、ight(3);/单灯右移三圈 flash(3);/全灯闪烁三次 else if (PB4=0)/如果按下PB4debouncer();/防弹跳 pili(3);/霹雳灯三圈 flash(3);/全灯闪烁三次 /while循环结束 /主程序结束思考一下!在本实验里,若同时按下多个按钮会如何? 在本实验里,若按住按钮不放会如何? 在本实验里,其中debouncer函数是个延迟20毫秒的函数,而 delay10ms函数是个延迟 10毫秒的函数,可否使用delay10ms 函数取代 debouncer函数?如何修改? 在本实验里,其中alter函数是个高四位与低四位交替闪烁 的函数,而flash函数

18、是个8灯闪烁的函数,其不同在于其初始值。请修改函数,再增加一个形式参数,以带入初始值,使之变成一个多用途的函数?多重按钮开关实验之二流程图/* 多重按钮开关实验之2 */=声明区=#include<reg51.h>/定义8051头文件,引入reg52.h文件 #include "myio.h"/自己写的I/O程序库#definePB P2/定义按钮开关接至P2/=主程序=main()/主程序开始 LED=0xff;/初始状态(LED全灭)while(1)/无穷循环,程序一直跑 PB=0xff;/规划输入埠 switch(PB)/switch叙述开始case 0x

19、01:/如果按下PB1debouncer();/防弹跳 alter(3);/交互闪烁三次 flash(3);/全灯闪烁三次 break; /退出switch叙述 case 0x02:/如果按下PB2debouncer();/防弹跳 left(3);/单灯左移三圈 flash(3);/全灯闪烁三次 break; /退出switch叙述 case 0x04:/如果按下PB3debouncer();/防弹跳 right(3);/单灯右移三圈 flash(3);/全灯闪烁三次 break; /退出switch叙述 case 0x08:/如果按下PB4debouncer();/防弹跳 pili(3);/

20、霹雳灯三圈 flash(3);/全灯闪烁三次 break; /退出switch叙述 /结束switch叙述 /while结束 /主程序结束思考一下!在本实验里,若同时按下多个按钮会如何? 在本实验里,若按住按钮不放会如何?放开按钮后动作实验流程图实验代码:/* 按钮放开后才动作实验*/=声明区=#include<reg51.h>/定义8051头文件,引入reg52.h文件 #include "myio.h"/自己写的I/O程序库 #definePB P2/定义按钮开关接至P2/=主程序=main()/主程序开始 LED=0xff;/初始状态(LED全灭)while(1)/无穷循环,程序一直跑 PB=0xff;/规划P2为输入端口 switch(PB)/switch叙述开始 case 0x01:/如果按下PB1debouncer();/防弹跳 while(PB=1);/等待PB1放开 debouncer();/防弹跳 alter(3);/交互闪烁三次 flash(3);/全灯闪

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论