STC学习笔记2-按键实验
STC学习笔记2-按键实验本实验演示STC15F104E如何识别按键事件
按按钮一次,LED灯就翻转一次亮灭状态。然后等待下一次按钮事件。
材料:
STC15F104E一片
一个LED
一个220Ω电阻
一个按键开关
电路图:
解析:220Ω电阻用于限流,由于STC输入端默认是上拉的,所以我们对开关不用加拉电阻,直接接地即可。
程序:/*
STC15F104E按键实验
Ansifa
2012-2-19
硬件连接方法:
一个LED串联一个220Ω电阻,接到VCC和P3.3引脚。
一个按钮接到P3.2与GND之间。
*/
#include "reg51.h"
sbit key = P3 ^ 2;//按钮
sbit LED = P3 ^ 3;//灯
void DelayMS(n) //@5MHz 软件延时n毫秒函数
{
unsigned char i, j;
i = 5*n;
j = 218;
do
{
while (--j);
} while (--i);
}
void main()
{ LED=1; //LED=0是亮,1是灭,初值灭灯
while(1)//制造一个死循环
{
//先检测高电平,等待30ms后检测是否低电平,就能把下降沿检测出来,这个是下降沿触发电路,有防抖功能。
if(key == 1) //因为按钮接key端和GND,所以是下降沿触发。
{
DelayMS(30);
if(key == 0)
{
LED = !LED;//翻转LED亮灭状态
}
}
}
}Keil uVersion2工程文件:
(Keil 下载地址:http://www.doyoung.net/DOC/KeilC51uV2_PS.zip)
实物视频:
由于一下找不到按钮开关,所以用一条电线接触GND引脚暂时代替。
http://player.youku.com/player.php/sid/XMzU0MzM3Mzgw/v.swf 340 发表于 2017-3-7 23:29
那是不是就说用stc15l系列3v供电就不需要了?
那未必,要用STC系列3V至少也要配个150欧姆的电阻。 有个问题: unsigned char i, j;
i = 5*n;
j = 218;
do
{
while (--j);
} while (--i);
}中,wihile(--j) 在第一次do while循环就会把J的值耗至0,那当--i 的时候,j一直是0 ,那你的延时函数基本上只能真正延时 0.2毫秒吧,是不是??? 是不是应该:
do {
while(--j);
j = 218;
} while (--i);
那个电阻是起什么作用的?不接会怎样? 340 发表于 2013-8-13 23:13 static/image/common/back.gif
那个电阻是起什么作用的?不接会怎样?
电阻做限流防止LED太亮损坏 楼主延时函数为什么是char?不是int或者long?解释一下啊,而且如沙发说的,第一次就会把j变成0,我这延时无论i是多少都闪的很快 我也来写1个,比这简单。。
#include "reg51.h"
#include "intrins.h"
sbit led=P3^3;
sbit key=P3^2;
void main(){
led=1;key=1;
while(1){
if(key == 0) {
led=~led;
while(key == 0);
}}}
很详细,工程文件都有,方便学习,比葫芦画瓢
340 发表于 2013-8-13 23:13 static/image/common/back.gif
那个电阻是起什么作用的?不接会怎样?
电阻是限流的,防止流过LED的电流 I 太大使其烧毁。一般 I 取10mA 即可,现在高亮LED的电流 I 取3~5mA就很亮啦! xinhoujue 发表于 2014-10-6 19:02
电阻是限流的,防止流过LED的电流 I 太大使其烧毁。一般 I 取10mA 即可,现在高亮LED的电流 I 取3~5mA就 ...
那是不是就说用stc15l系列3v供电就不需要了? xinhoujue 发表于 2017-3-10 17:58
那未必,要用STC系列3V至少也要配个150欧姆的电阻。
两节1.5v干电池或纽扣电池供电不加电阻会不会有什么问题?
页:
[1]