用单片机的不同按键,来控制控制小灯的开启时间,不过程序运行时,单机按键后小灯常亮,往给看看解,谢谢
#include#define uchar unsigned charuchar time,stand;sbit led=P1^0;bit flag=0;void t0isr() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;flag=~flag;if(flag) { time++; if(time>=stand){led=1;TR0=0);} }}main(){uchar sw;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;while(1) { while(1) { sw=P0; if(sw!=0xff)break; } time=2; sw=~sw; while(1) { sw=sw>>1; if(sw!=0)time+=2; else break; } TR0=1; led=0; }}
判断两次按键的时间间隔 如果大于1s就实现一种功能 小于1s实现另外一种功能
修改如下:
void t0isr() interrupt 1
{
TH0=0xdc;
TL0=0x00;
h++;
s++;
if(s>250)s=250;
if(h>50)
{
h=0;
LED8=~LED8;
}
}
void main()
{
unsigned char s=0;
unsigned char h=0;
TMOD=0x01;
TH0=0xdc; //定义定时器 最高为10毫秒一个周期
TL0=0x00; //最低为0
TR0=1; // 开启定时器
ET0=1
EA=1;
while(1)
{
//****按键开头****
if(K1==0)
{
s=0;
LED1=0;
if(s>=7)LED1=1;
}
if(K2==0)
{
s=0;
LED1=0;
if(s>=14)LED1=1;
}
if(K3==0)
{
s=0;
LED1=0;
if(s>=21)LED1=1;
}
if(K4==0)
{
s=0;
LED1=0;
if(s>=28)LED1=1;
}
if(K5==0)
{
s=0;
LED1=0;
if(s>=35)LED1=1;
}
if(K6==0)
{
s=0;
LED1=0;
if(s>=42)LED1=1;
}
if(K7==0)
{
s=0;
LED1=0;
if(s>=49)LED1=1;
}
if(K8==0)
{
s=0;
LED1=0;
if(s>=56)LED1=1;
}
if(K9==0)
{
s=0;
LED1=0;
if(s>=63)LED1=1;
}
//****按键尾****
}
}
}
你这个看不出来是啥?
单片机怎样识别按键值
一般的源值表如下,按键也对应如下 uchar code KeyCode[4][4]= { \/\/矩阵按键编号到标准键盘键码的映射表 { 0x31,0x32,0x33,0x26 },\/\/数字键1、数字键2、数字键3、向上键 { 0x34,0x35,0x36,0x25 },\/\/数字键4、数字键5、数字键6、向左键 { 0x37,0x38,0x39,0x28 },\/\/数字键7...
51单片机怎么用三个按键控制分别为时钟,秒表,倒计时
假如三个按键分别为k1,k2,k3。用k1选择3个功能,按一下切换一个功能。在时钟状态下,用k2选择调节位,用于调时,分别选小时的十位,个位,分的十位,个位,开始计时这5个状态。k3调节位加一,只能按加一调节了。在秒表状态下,k2为计时和停止切换。k3为清0。在倒计时状态下,k2和k3作用与...
89c51单片机 4*4按键的图
如图 关键还要看你的要求是显示0~F 还是0~15
求一个单片机程序:三个按键,一个启动设置,一个加,一个减。
include<reg52.h> define uchar unsigned char define uint unsigned int sbit aj1=P3^4;sbit aj2=P3^5;sbit aj3=P3^6;sbit aj4=P3^7;sbit dula=P2^6;sbit wela=P2^7;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,...
单片机编写程序四个按键赋予不同的功能
include<reg51.h> include<intrins.h> sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;void delay(int a){ int i;while(a--)for(i=0;i<120;i++);} main(){ unsigned char led1=0xfe,led2=0x55,led3=0x0f,keyval;while(1){ if(key1==0){ while(key...
怎样用单片机编程。两个独立按键,控制数码管的加减?
这个很容易嘛,你先设置一个寄存器,然后一直扫描两个按键(假设K1按下为加,K2按下为减),假设检测到K1被按下,寄存器就加1,如果检测到K2被按下,寄存器就减1;然后再调用显示函数就OK了。、 ORG 0000H LJMP START ORG 0030H START:MOV R2, #1 LOOP:CALL DISP JB P1.6,...
单片机一个按键实现短按 中长按 更长按 也就是三种功能 程序怎么写...
按键按下和抬起之间有防抖动延时,只要把防抖动延时时间设置大小不同就可以了。短按你设ms,中按搞个1-3s,长按弄个5-10s。我觉着这么行。
想用单片机控制两个按键不同顺序实现不同功能
按下按键价格标志,比如按下A键,加个flag_button_a = 1,按B的时候检测下A是否按下,按下的话响应动作,没有的话把B加个标记。
单片机 三个独立按键要实现六种功能,000,001,010,100,110,101,011.怎 ...
方法有多种,一种最贴近你题意的大概是按三种键的组合不同完成不同功能:比如ABC代表三个键分别如下:ABC=001:完成000号功能 ABC=010:完成001号功能 ABC=011:完成010号功能 ABC=100:完成011号功能 ABC=101:完成100号功能 ABC=110:完成101号功能 程序大概如下:include<reg51.h> sbit A=P1^2;...
51单片机识别四个独立按键是短按还是长按
识别长按,先要确定一个时间,超过这个时间为长按,否则即为短按。当按一下键后,开始计时,同时判断确定时间到否?到了,执行长按的程序,等待按键释放。在判断时间的时候,如果按键释放了,说明未到长按的时间,执行短按的程序。或者,按下时开始计时,等待按键释放,释放后,停止计时,根据计时的...
厨人军新博: 用c给你编一下 #include<reg52.h>//89s52单片机头文件#define K1 = P0^0 ; //用宏定义定义按键1 #define K2 = P0^1 ; //用宏定义定义按键2 #define LED = P3^7 ; //用宏定义定义小灯 void LED_shuanshuo (char a );void main (void) {char a ;...
鄢陵县19492651028: 单片机按键控制小灯? 跪求 解答 !!! - ?
厨人军新博: //只提供一种思路,假设P0口味低电平0时点亮,这种程序若先按下P3^7,P0^0亮5s中 按P3^6 无反应 #include<reg52.h> sbit a1=P0^1; sbit a0=P0^0; sbit a6=P3^6; sbit a7=P3^7; sbit a2=P0^2; void delay(int z) {int x,y;for(x=z;x>0;x--)for(y=110;y>...
鄢陵县19492651028: 两个单片机之间的通信,要求一个单片机按键控制另一个单片机的小灯亮?跪求! - ?
厨人军新博: #include sbit key=P1^0; main() { TMOD=0x20; SCON=0x50; TH1=0xfd; TL1=0xfd; TR1=1; while(1) { while(key==1); SBUF=0x55; while(!TI); TI=0; while(key==0); SBUF=0xaa; while(!TI); TI=0; } }#include sbit led=P1^0; main() { TMOD=0x20; SCON=0x...
鄢陵县19492651028: 51单片机的按键控制小灯亮灭的问题(程序类型:c语言) - ?
厨人军新博: #include<reg52.h> #define uint unsigned int sbit LED = P1^0; sbit KEY1 = P1^2; void delay(uint); void main(void) {LED = 1; //初始化LED熄灭KEY1 = 1; //赋值KEY1高电平while(1){if(!KEY1) //检测到按键按下{LED = ~LED; /*LED取反,...
鄢陵县19492651028: 单片机程序:用一个开关按键控制一个灯,按键在上面灯恒亮(高电平),按键在下面灯闪烁(低电平) - ?
厨人军新博: sbit KEY=P1^0;//假设开关接IO 1.0 sbit LED=P1^1;//假设led接IO 1.1 void delay() { //... } void main() { if(KEY){LED=1;} else{while(!KEY){LED=~LED;delay();}} }
鄢陵县19492651028: 单片机开关控制小灯泡 - ?
厨人军新博: ORG 0000H LJMP MAIN ORG 0030H MAIN: SETB P3.7 LP: JB P0.0,$ JNB P0.0,$ CPL P3.7 SJMP LP END
鄢陵县19492651028: 单片机C语言按键控制LED灯 - ?
厨人军新博: 其实是一样的,也没什么哪个规范这一说,这个看个人习惯了首先if(SW13==0)是判断此引脚是否为0 (按键按下)然后一个delay用于按键防抖动 没被注释的那部分是靠if在次判断是否为0按下按下后执行LED_ON函数使LED亮然后通过while...
鄢陵县19492651028: 51单片机编程—按键控制LED灯 - ?
厨人军新博: if(!KEY2)//假设按键低电平有效 { DelayMs(5);//延时2~10ms,按键消抖 if(!KEY2);//按键仍被按下,说明不是抖动 { LED=~LED;//自己定义一下LED到对应IO BUZZER=~BUZZER;//定义蜂鸣器到对应IO } }
鄢陵县19492651028: 89C52单片机 两个按钮控制两个小灯 程序? 两个按钮独立 每个按钮控制一个灯 按下去灯亮 松开灯灭 - ?
厨人军新博: 晕,你的思路都有问题啊,按下去灯亮,松开灯灭,都不要用单片机啊,直接电源-->电阻-->按键-->灯-->接地就行了. 第二种方式到还行,把芯片脚(外部中断口)-->按键-->地,芯片脚和按键之间接个电阻,再接个电阻,芯片脚设置为输入状态,按一次记下外部中断触发的次数,然后根据次数确定哪个灯亮
鄢陵县19492651028: 用51单片机的10做10个按键和串口控制一盏灯的亮和灭. - ?
厨人军新博: 写程序就算了,给你思路吧.P0口和P1.0\P1.1所做的按键按下时,都做同一件事,比如:sbit SW7=P1^1; sbit LED=P1^3; bool led_flag; if(!SW7) //按键7被按下 { led_flag=~led_flag; //将灯亮灭标志位取反 while(!SW7); //等待松开按键 } 而在主函数mian中还有一个灯亮灭的函数 led() { if(led_flag) //如果是灯灭的指令,则延时3秒,再将灯引脚电平翻转 Delay3s(); LED=led_flag; } 串口的不多说了.做的事情都是一样的