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

下载本文档

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

文档简介

1、拨码开关控制实验电路图30pf |18192040poop0 1p0.2p0.3p0.4p05p0.6p0.7 89c51 31 89s51p2.7p26p25p24p23p22p2 1p20_=八i <s1 s2 s3 s4 s5 s6 s7 s8排阻拨码开关流程图(_开始j读取开关状态i/*基本开关控制实验*/=宣告区=include <reg51. h> /定义 8051 头文件,引入 reg52. h ftdefine sw p2/定义开关接至p2ttdefine led pl/定义 led 接至 p 1/=主程式=main ()/主程序开始 sw=0xff;/规划输

2、入端口while(l) /无穷循环,程式一直跑led=sw; /读取开关(p2)状态,输出到led (pl) 主程序结束思考一下!在本实验里,有没有“抖动”的困扰?若希望拨码开关中的s1、s3、s5三个开关都on,则前四个led亮;s2或s4或s6开关on,则后四个led亮;s7及s8开关on,则所有 led全亮,程序应如何编写?若将拨码开关换成一般家里墙壁上的开关,而led换成继电器 (relay),是否可作为家里的负载控制?按钮on-off控制实验按钮on-off控制实验电路图vcc30pf-jl,12mhz厶 p1.040po.op0.1p0.2p0.3p0.4p0.5p0.69p0.7

3、89c51 3189s51p2.7p2.6p2.5p2.4p2.318p2.219p2.120p2.014441k1/l 二 2关 b - > p开 apbon流程图如下:/*基本按钮on-off控制实验*/=声 明 |x =#include<reg51.h>定义 8051 头文件,引入 reg52.hsbit pb1=p2ao;声明按钮 1 接至 p2.0sbit pb2=p2a1;声明按钮 2 接至 p2.1sbit led=p1ao;声明 led 为 p1.0=主程式=main()主程序开始 led"/关闭 ledpb2pb2j;/规划输入端口while(l)

4、/无穷循环'程式一直跑if (pb2=0)led=1;/若按下pb2,则关闭ledelse if (pb1=o)led=o;/若按下pbl,则点亮led/while循环结束结束程序思考一下!在本实验里,有没有“抖动”的困扰?若将按钮开关当成启动电机的onoff开 关,而led换成继电器(relay),是否可 作为电机控制? 9若同时按下pb1与pb2按钮会怎样?按钮切换式控制实验 按钮切换式控制实验电路图vccrl j?1ufresetport 1100kport 3i qpi.oi40ipooiip0.1ip0.2iip0.3p0.4llp0.5iip0.6i 9p0.7(89c51

5、c .3189s5130pf |30pf"t"12mhzjp2.7!p2.6i11ap2.511ip2.411ap2.31 18ip2.2i 191p2.11 20p2.0<1<iii<i<444<444i<4mport 0 卞220port 2<<10kpbk 按钮开关流程图/*按钮切换式控制实验*/=声 明 |x = #include<reg51.h>/定义 8051 头文件,引入 reg52.h sbit pb1=p2ao;声明 pb1 接至 p2.0sbit led=p1ao;声明 led 接至 p1.0v

6、oid debouncer(void);/ 声明防弹跳函数/= main()/主程式开始led=1;/关闭 ledpb1=1;规划p2.0为输入埠while(l) 无穷循环,程序一直跑 if (pb1=o)/若按下 pb1 debouncer(); 呼叫防弹跳函数(按下时)led二!led;/切换led为反相 while(pbl != 1);/若仍按住pb1,继续等 debouncer();/呼叫防弹跳函数倣开时)/if叙述结束/while循环结束主程序结束防弹跳函数函数/=子程序= 尸延迟约20ms */void debouncer(void)防弹跳函数开始inti;/声明整数变数ifor(

7、i=0;i<2400;i+);/计数 2400 次,延迟约 20ms防弹跳函数结束思考一下!在本实验里,改变debouncer函数的时间长短,看看有什么影响?若按住pb1不放会怎样?如何改善?vcc按钮开关应用电路图port 340p0.0p0.1p0.2p0.3p04p05p06p0 789c51 3189s51流程图声明驱动信号数组声明去抖动函数上数aaaaj<220x7abccom共阳七段数码管p2.7,4p2.6p2.5 |p2.4,*p2.3,>p2.2p2.1p2.0vcc输出下1个(pb1pb210k按钮开关noyes去抖动函数代码如下:/*按钮开关应用(两按钮

8、控制七段显示器上下数)*/=声 明 |x = #include<reg51.h>定义 8051 头文件,引入 reg52.h 文件 #define seg p0定义七节显示器接至p0端口/*声明七节显示器驱动信号阵列(共阳)*/char codetab10=0xc0/0xf9/0xa4/0xb0/0x99/0x92,0x83/0xf8/0x80/0x98; 数字sbit pb1=p2ao;声明按钮 1 接至 p2.0sbit pb2=p2a1;声明按钮 2 接至 p2.1 void debouncer(void);/声明防弹跳函数/=主程式=main()/主程序开始unsigned

9、 char i=0;声明变量 i 初值=0pb1=pb2=1; 规划输入端口seg=tabi;/输出数字至七段显示器while(l)/无穷循环,程式一直跑 if (pb1=o)判断pb1是否按下 debouncer();/呼叫防弹跳函数i= (i<9)? i+l:0;/若 i<9 则 i=i+l,若 i>=9 清除为 0seg=tabi; 输出数字至七段显示器while(pbl=0); /pb1 是否按住?debouncerf);呼叫防弹跳函数/if叙述结束 if (pb2=0)判断pb2是否按下 debouncer();/呼叫防弹跳函数i= (i>0)? i-l:9;

10、/若 i>0 则 i=i-l, i<=0 重设为 9seg=tabi;/输出数字至七段显示器while(pb2=0);/pbl 是否按住? debouncer();/呼叫防弹跳函数/if叙述结束/while循环结束主程序结束/=子程序= /*防弹跳函数函数,延迟约20ms */void debouncer(void)防弹跳函数开始inti;/声明整数变量for(i=0;i<2400;i+);/计数 2400 次/延迟约 20ms防弹跳函数结束 思考一下!在本实验里,若按钮按住不放,会怎样?如何改善?在本实验里,若pb1与pb2两个按钮同时按,会怎样?bcd数字型拨码开关实验b

11、cd数字型拨码开关实验电路图vccr4-i jjoufport 110kport 3440p0.0p0.1p02p0.3p04p0.5p069p0789c51 3189s51流程图p27p26p25p24p2 318p2219p2 120p2.0m七段数码管am 1(开始)读取开关状态1输出对丿 中的驱i应数组 动信号实验代码:/* bcd数字型指拨开关实验*/=声明 |x =#include<reg51.h>定义 8051 头文件,引入 reg52.h 文件#define seg p0定义七节显示器接至p0ttdefine sw p2/定义开关接至p2/*声明七节显示器驱动信号阵

12、列(共阳)*/char codetab10=0xc0/0xf9/0xa4/0xb0/0x99/0x92/0x83/0xf8/0x80/0x98;/ 数字0-9 #define sw_h() sw&oxof/读取开关值(p2 清除高 4bits)/=主程序=main()/主程序开始 sw=oxff;/规划输入埠while(l)/无穷循环,程序一直跑seg二tabsw_h();读取开关值瀚出至七节显示器(po)主程序结束 思考一下!在本实验里,有没有“抖动”的困扰?若把本单元的bcd数字型拨码开关,改为16进位数字型拨码开关, 程序应如何修改?多重按钮开关实验多重按钮开关实验电路图vcct

13、r ,iuf100kreset i30pf i30pft12mhzvcc流程图/* myio.h自己写的程序库*/=声 明 =#define led pl定义 led 接至 pl void debouncer(void);/声明防弹跳函数void delayloms(int);/声明10毫秒延迟函数void alter(int);/声明交互闪烁函数void left(int);/声明单灯左移函数void right(int);/声明单灯右移函数void pili(int);声明霹雳灯函数void flash(int);/声明闪烁函数/=自己写的子程序=/*防弹跳函数函数,延迟约20ms */v

14、oid debouncer(void)防弹跳函数开始 delayl0ms(2);/延迟约 20ms防弹跳函数结束/*延迟函数开始,延迟约x 10ms */void delayloms(int x)延迟函数开始intij;/声明整数变量i,jfor (i=0;i<x;i卄)计数 x 次,延迟约 x 10msfor (j=0;j<1200;j+);/计数 1200 次,延迟约 10ms延迟函数结束/*高低位元交互闪烁函数,执行x次*/void alter(int x)高低位元交互闪烁函数开始inti;/声明变量iled=0x0f; 初始状态(高位元亮/氐位元灭)for(i=0;i<

15、;2*x-l;i+)/i 变量 for 循环执行 2x-l 次 delayl0ms(50);延迟 50*10m=0.5sled=-led;/led 反相输出/i变量for循环结束delayl0ms(50);延迟 50 10m=0.5s 高低位元交互闪烁函数结束 /*全灯闪烁函数,执行x次*/ void flash(int x)全灯闪烁函数开始 inti;/声明变量iled=oxoo; 初始状态(全亮)for(i=0;i<2*x-l;i+)/i 变量 for 循环执行 2x-l 次 delayl0ms(50);延迟 50 10m=0.5sled=led;/p0 反相输出/i变量for循环结

16、束delayl0ms(50);/延迟 50 10m=0.5s全灯闪烁函数结束/*单灯左移函数,执行x圈*/void left(int x)单灯左移函数开始 inti, j;/声明变量 i,jfor(i=0;i<x;i+)/i 循环,执行 x 圈 led=0xfe; 初始状态=11111110 for(j=0;j<7;j+)/j 循环,左移 7 次 delayl0ms(25);/延迟 25 10m=0.25sled=(led«1) |0x01;/左移 1 位後丄sb 设为 1/j循环结束delayl0ms(25);延迟 25 10m=0.25s/i循环结束*/单灯左移函数结

17、束/*单灯右移函数,执行x圈*/void right(int x)单灯右移函数开始 intij;/声明变量ijfor(i=0;i<x;i+)/i 循环,执行 x 圈 led=0x7f; 初始状态=01111111for(j=0;j<7;j+)/j 循环,右移 7 次 delayl0ms(25);延迟 25 10m=0.25sled=(led»1) |0x80;/左移 1 位後msb 设为 1 /j循环结束 delayl0ms(25);延迟 25 10m=0.25s/i循环结束单灯左移函数结束/*霹雳灯函数,执行x圈*/void pili(int x)霹雳灯函数开始 int

18、i;/声明变量ifor(i=0;i<x;i+)/i 循环,执行 x 圈 left(l);/单灯左移一圈 right(l);/单灯左移一圈/i循环结束霹雳灯函数结束 /*多重按钮开关实验之1 */多重按钮开关实验之一:代码=声 明 |x =#include<reg52.h>定义 8051 头文件,引入 reg52.h 文件#include,lmyio.h>,自己写的 i/o 程序库sbit pb1=p2ao;声明 pb1=p2.osbit pb2=p2a1;声明 pb2=p2.1sbit pb3=p2a2;声明 pb3=p2.2sbit pb4=p2a3;声明 pb4=p

19、2.3/=main()/主程序开始 led=oxff;初始状态(led全灭)p2=0xff;规划p2输入端口while(l) 无穷循环,程序一直跑 if (pb1=o)/如果按下 pb1 debouncer(); 防弹跳alter;高低位元交互闪烁三次flash;/全灯闪烁三次else if (pb2=0)如果按下 pb2 debouncer();/ 防弹跳left;单灯左移三圈flash;/全灯闪烁三次else if (pb3=0)如果按下 pb3 debouncer(); 防弹跳right;单灯右移三圈flash;/全灯闪烁三次else if (pb4=0)如果按下 pb4 debounc

20、er();/ 防弹跳pili(3);霹雳灯三圈flash;/全灯闪烁三次/while循环结束主程序结束思考一下!在本实验里,若同时按下多个按钮会如何?在本实验里,若按住按钮不放会如何?在本实验里,其中debouncer函数是个延迟20毫秒的函数,而delayloms函数是个延迟10毫秒的函数,可否使用delayloms函数取 代debouncer函数?如何修改?!1!在本实验里,其中alter函数是个高四位与低四位交替闪烁的函数,而flash函数是个8灯闪烁的函数,其不同在于其初始值。请修改函数,再增加一个形式参数,以带入初始值,使之变成一个多用途的函数?多重按钮开关实验之二流程图/*多重按钮

21、开关实验之2*/=声明 |x = #include<reg51.h>定义 8051 头文件,引入 reg52.h 文件 #include ,myioh,1 自己写的i/o程序库ttdefine pb p2定义按钮开关接至p2/=主程序= main()/主程序开始 led=oxff;初始状态(led全灭)while(l) 无穷循环,程序一直跑 pb=oxff; 规划输入埠switch(pb)/switch 叙述开始 case 0x01:/如果按下 pb1 debouncer();/ 防弹跳alter;交互闪烁三次flash;全灯闪烁三次break;退出 switch 叙述case 0

22、x02:/如果按下 pb2 debouncer();/ 防弹跳left;单灯左移三圈flash;全灯闪烁三次break;退出 switch 叙述case 0x04:/如果按下 pb3 debouncer();/ 防弹跳right;单灯右移三圈flash;全灯闪烁三次break;退出 switch 叙述 case 0x08:/如果按下 pb4 debouncer(); 防弹跳pili(3);霹雳灯三圈flash;全灯闪烁三次break;退出 switch 叙述结束switch叙述/while 结束主程序结束思考一下!在本实验里,若同时按下多个按钮会如何? 在本实验里,若按住按钮不放会如何? 放开按钮后动作实验实验代码:/*按钮放开后才动作实验*/=声明 |x = #include<reg51.h>定义 8051 头文件,引入 reg52.h 文件 include "myio.h"自己写的i/o程序库ttdefine pb p2定义按钮开关接至p2/=主程序= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = main()/主程序开始 l

温馨提示

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

评论

0/150

提交评论