珠海网站公司哪家好,网站模板 安装,做网页的软件是什么,免费网站注册平台51单片机IO口控制
1.点亮LED灯
原理#xff1a;根据电路图#xff0c;指向IO口的引脚#xff1b;拉低电平#xff0c;灯亮、
如图#xff1a;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictur…51单片机IO口控制
1.点亮LED灯
原理根据电路图指向IO口的引脚拉低电平灯亮、
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictures/Camera Roll/屏幕截图 2023-07-19 014128.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldzpl4XB-1690308697531)(C:/Users/xie19/Pictures/Camera Roll/屏幕截图 2023-07-19 014157.png)]
#include reg52.hsbit ledOneP3^7;//根据电路图指定引脚
sbit ledTwoP3^6;void main()
{ledOne0; ledTwo0;//拉低电平灯亮
}2.LED灯闪烁
原理根据延时实现LED灯闪烁的效果也要根据原理图指定引脚
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TpMUOFiQ-1690308697532)(C:/Users/xie19/Pictures/Camera Roll/屏幕截图 2023-07-19 014128.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ntz7JKWI-1690308697533)(C:/Users/xie19/Pictures/Camera Roll/屏幕截图 2023-07-19 014157.png)]
#include reg52.h
#include intrins.hsbit ledOneP3^7; //根据电路图指定引脚
sbit ledTwoP3^6;void Delay500ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){ ledOne0;//置低电平点亮灯ledTwo0;//置低电平点亮灯Delay500ms(); ledOne1;//置高电平灭灯ledTwo1;//置高电平灭灯Delay500ms();}
}3.按下按键点亮灯
3.1查询法控制点灯
怎么知道sw1按键被按下KEY1位置和GND接通表现为低电平值为0怎么知道sw1按键没有被按下KEY1位置通过上拉电阻到5V表现为高电平值为1
通过下图得知
同理LED的分析
KEY1接到STC89C52RC的P2.1口我们只要不断检测P2.1口的值0-按下1-松开就知道按键是否被按下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYDfhi4N-1690308697533)(C:/Users/xie19/Pictures/Camera Roll/屏幕截图 2023-07-19 015556.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t82sTeun-1690308697534)(C:/Users/xie19/Pictures/Camera Roll/屏幕截图 2023-07-19 015619.png)]
/*
实现功能按下按键一点亮灯
*/#include reg52.h
#include intrins.hsbit ledOneP3^7; //根据电路图指定引脚
sbit key1P2^1;void main()
{while(1){ if(key10) //KEY1位置和GND接通表现为低电平值为0{ledOne0; 灯亮给一个P3.7低电平} }
}/*实现功能按下按键一LED亮按下按键二lED灭*/#include reg52.h
#include intrins.hsbit ledOne P3^7; //根据电路图指定引脚
sbit key1 P2^1;
sbit key2 P2^0;void main()
{while(1){ if(key10) //KEY1位置和GND接通表现为低电平值为0{ledOne0; //灯亮给一个P3.7低电平} if(key20){ledOne1; //灯灭给一个P3.7低电平} }
}/*按下按键一两盏灯亮按下按键二两盏灯灭
*/#include reg52.h
#include intrins.hsbit ledOne P3^7; //根据电路图指定引脚
sbit ledTwo P3^6;
sbit key1 P2^1;
sbit key2 P2^0;void main()
{while(1){ if(key10) //KEY1位置和GND接通表现为低电平值为0{ledOne0; //灯亮给一个P3.7低电平ledTwo0;} if(key20){ledOne1; //灯灭给一个P3.7低电平ledTwo1;} }
}3.2软件消抖
软件消抖为了防止开发板遭遇抖动导致灯亮灭不是人为导致的这里用延时更科学的方法应该是用定时器。
#include reg52.h
#include intrins.hsbit ledOne P3^7; //根据电路图指定引脚
sbit key1 P2^1;
sbit key2 P2^0;void Delay500us() //11.0592MHz
{unsigned char i;_nop_();i 227;while (--i);
}void main()
{while(1){ if(key10) //KEY1位置和GND接通表现为低电平值为0{Delay500us();//这里延时一下防止意外抖动软件消抖if(key10){ ledOne0; //灯亮给一个P3.7低电平} } if(key20){Delay500us();//这里延时一下防止意外抖动软件消抖if(key20){ ledOne1; //灯灭给一个P3.7低电平} } }
}3.3IO口翻转有一些代码会这么写
#include reg52.h
#include intrins.hsbit ledOne P3^7; //根据电路图指定引脚
sbit key1 P2^1;
sbit key2 P2^0;void Delay500us() //11.0592MHz
{unsigned char i;_nop_();i 227;while (--i);
}void main()
{ledOne1;while(1){ if(key10) //KEY1位置和GND接通表现为低电平值为0{Delay500us();//这里延时一下防止意外抖动软件消抖if(key10){ ledOne!ledOne; //灯亮给一个P3.7低电平(取反也可以叫IO口状态翻转)} } if(key20){Delay500us();//这里延时一下防止意外抖动软件消抖if(key20){ ledOne1; //灯灭给一个P3.7低电平} } }
}3.4.记录状态位点灯
状态位的作用是当按键被按下时不着急点灯在这里记下状态在别的地方点灯当业务比较复杂时可以在当下记下状态在别的地方实现
#define的作用主要是让没有意义的数据变得有意义让代码的可读性更好。
#include reg52.h
#include intrins.h#define off_status 0
#define on_status 1 sbit ledOne P3^7; //根据电路图指定引脚
sbit key1 P2^1;
sbit key2 P2^0;void Delay500us() //11.0592MHz
{unsigned char i;_nop_();i 227;while (--i);
}void main()
{int ledMarkoff_status;ledOne1;while(1){ if(key10) //KEY1位置和GND接通表现为低电平值为0{Delay500us();//这里延时一下防止意外抖动软件消抖if(key10){ ledMarkon_status;//当按键被按下记录状态位在别的地方点灯适用与业务场景复杂} } if(key20){Delay500us();//这里延时一下防止意外抖动软件消抖if(key20){ ledMarkoff_status;} }if(ledMarkon_status){ledOne0;}else{ledOne1;} }
}4.震动传感器点灯
原理当输出低电平的时候震动点亮灯
#include reg52.h
#includeintrins.hsbit led1P3^7;
sbit virbrateP3^3;void Delay2000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 15;j 2;k 235;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){if(virbrate0) //模块说明D0输出低电平震动{led10;Delay2000ms();led11;} else{led11;} } }5.震动控制继电器
继电器电子开关
#include reg52.h
#includeintrins.hsbit switcherP1^1;
sbit vibrate P3^3;void Delay2000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 15;j 2;k 235;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){if(vibrate0) //模块说明D0输出低电平震动{switcher0;//当发生震动适合导通继电器给继电器IN一个低电平Delay2000ms();switcher1;//高电平继电器N0和COM不通} else{switcher1;} } }6.按键控制继电器开关
#include reg52.h
#includeintrins.hsbit key1 P2^1;
sbit key2 P2^0;
sbit switcher P1^1;void main()
{while(1){if(key10) //模块说明D0输出低电平震动{switcher0;//当发生震动适合导通继电器给继电器IN一个低电平} if(key20){switcher1;} } }7.433M控制继电器开关
按下A按键,继电器亮按下B按键,继电器灭
#include reg52.h
#includeintrins.hsbit D0_ON P1^2;
sbit D1_OFF P1^3;
sbit switcher P1^1;void main()
{//查询方式哪个按键被按下 while(1){if(D0_ON1) //收到遥控信号A,D0表现为高电平{switcher0;//A被按下我们导通继电器给继电器IN一个低电平} if(D1_OFF1)//收到遥控信号C,D1表现为高电平{switcher1;//B被按下我们不导通继电器给继电器IN一个高电平} } }8.电动车简易报警器
硬件模块51单片机震动传感器喇叭继电器433M模块
#include reg52.h
#includeintrins.h#define J_ON 1
#define J_OFF 0
sbit switcher P1^0;
sbit D0_ON P1^1;
sbit D1_OFF P1^2;
sbit vibrate P1^3;void Delay2000ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 15;j 2;k 235;do{do{while (--k);} while (--j);} while (--i);
}
void Delay500ms() //11.0592MHz
{unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i);
}
void main()
{int mark J_OFF;while(1){//1. 如果a按键被按下设定为开启警报模式if(D0_ON 1){//长响表示进入警报模式switcher 0;Delay2000ms();switcher 1;//设定警报模式标记mark J_ON ;}//2. 如果b按键被按按下设定为关闭警报模式if(D1_OFF 1){//短响表示进入解除警报模式switcher 0;Delay500ms();switcher 1;//设定警报解除模式标记mark J_OFF ;}//3. 如果标记是在警报模式下if(mark J_ON){//3.1 如果发生了震动if(vibrate 0){//喇叭响给继电器低电平导通switcher 0;}//3.2 如果不发生震动else{//喇叭不响给继电器高电平不导通switcher 1;}}}
}