c51单片机:两个独立按键控制一个led,k1按下松开led闪烁,k2按下松开led灭?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
编程c51单片机:实现按下按键K1,LED左移动一位(其中一个LED灯灭),按下按键K2,LED右移动一位。

#include
sbit k1=P1^0;
sbit k2=P1^1;
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char led=0xfe;
while(1)
{
if(k1==0)
{
delay(10);
if(k1==0)
{
while(k1==0);
led=(led<<1)|0x01;
if(led==0xff)led=0xfe;
}
}
if(k2==0)
{
delay(10);
if(k2==0)
{
while(k2==0);
led=(led>>1)|0x80;
if(led==0xff)led=0x7f;
}
}
}
}

按K1部分加一行
flag=1;
led=0xfe;//重新赋值
K2部分也加这一行
因按K4后,Ied=led+1;
就不是亮一个啦


#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;//把所要控制的led灯定义为p2.0这个口
sbit k1=P2^1;
sbit k2=P2^2;

void delay(u16 i)
{
while(i--);
}//一个延时程序
void main()
{
if(k1==1)
while(1)
{
led=1;
delay(50000); //大约延时450ms
led=0;
if(k2==1)
break;
}
led=0;
}

思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。



  • 怎样用单片机编程:独立按键两个键控制一个数码管的加减 一个键加 一...
    答:这个很容易嘛,你先设置一个寄存器,然后一直扫描两个按键(假设K1按下为加,K2按下为减),假设检测到K1被按下,寄存器就加1,如果检测到K2被按下,寄存器就减1;然后再调用显示函数就OK了。、
  • 单片机C51,三个内容。一个最小系统带一个流水灯。两个按键控制两个灯...
    答:流水灯:#include<reg51.h>#include<intrins.h>void delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}main(){P0=0xfe;while(1) { P0=_crol_(P0,1); delay(200); }}按键控制两个灯#include<reg51.h>sbit led1=P1^0;sbit led2=P1^1;void ext0() inter...
  • 51单片机两程序独立按键切换连接程序怎么写?
    答:两段程序还是要合并成一个主程序的,只是分开成两段而已。sbit ins1=独立按键所在I/O脚;bit keyab=0; //区分执行A,B程序的标志位,=0,执行A段,=1执行B段 main(){ ...while(1) //while前的程序照常写 { if(ins1==0){ keyab=!keyab;while(ins1==0);} if(keyab==1...
  • 51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现_百度...
    答:键阵键盘多用于键数目较多的时候。这样可以更多的节省IO口的占用量,对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为...
  • 请问单片机怎么用独立按键按一下实现一个功能,按另一个按键实现另一个...
    答:如果这两个功能都是一个死循环,可以考虑用中断,这样就不必在两个独立的功能中插入按键检测了 while(1){ while(flag==1){死循环1} while(flag==2){死循环2} } 如果这两个功能不是死循环,就 简单了 while(1){ if(key1==0) {延时消抖 功能1} if(key2==0) {延时消抖 功能2} }...
  • 51单片机流水灯如何通过两个按键启动和停止 ,怎么停止
    答:// 改了一下试试 include<reg52.h> //包含 reg52.h 这个头文件 include<intrins.h> define led P2// char i;sbit k1=P3^6; //启动按键 sbit k2=P3^7;//停止按键 bit s=0; // 启停标志 char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED灯的数组 void...
  • c51单片机定时器30秒倒计时程序,一个按键控制开始,另一个按键控制暂停和...
    答:include<reg51.h>unsigned char code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9unsigned char sec=30,scanled;unsigned char disdat[2];sbit keys=P1^0;sbit keyc=P1^1;sbit fmq=P3^0;void delay(unsigned int x){unsigned int i,j;for(i=...
  • 51单片机 ,用C语言编程 通过独立按键控制蜂鸣器和静态数码管,_百度...
    答:1.数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。code:include<reg52.h> define uchar unsigned char define uint unsigned int sbit key1 = P3^4;sbit dula = P2^6;sbit wela = P2^7;uchar code ...
  • c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序_百 ...
    答:1、首先先在proteus画出仿真图,方便仿真程序。2、接着来编写程序,先来写入头函数。2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写。3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义。4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向。5、检查没有错误,...
  • C51单片机把两个独立按键控制流水灯的程序变成三个按键控制怎么改?
    答:想要第三个按键控制数码管,让数码管60s倒计时 --- 需要楼主提供:《数码管60s倒计时》的程序。增加一个控制按键,不难。难的是,符合你的显示电路的显示程序。你不提供这段程序,按键,加在何处?