单按钮 3秒钟内按不同的次数 { 按1次的 2次的) 超2次的} 。 输出要求点亮维持一秒3个不同的LED灯点(例如:3秒钟内按一次点亮P1,0 按2次点亮p1.1 超过2下的点亮p1,2)..。
不过你的问题中要求3秒,时间太长了,不是很理想
我设计的是,8个LED,一个按键,按键的间隔不超过半秒即可,半秒后进行处理
每次按下按键,都重新开始计时,不论按几次按键,经过硬件实测
半秒的时间刚刚好,基本上没有空等待的时间,就是按完按键后,等待程序输出效果的时间
按键以及LED的端口你可以随意修改,如果感觉不错,记得采纳哦!
/***************************************************************************/
#include <reg51.h> //51单片机通用头文件
sbit k=P3^7;//定义按键
int t,n,s,fe=0;
/***************************************************************************/
void YS(int hs){int hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数
/***************************************************************************/
void main(void)//主函数
{
TMOD=0x01; EA=1; ET0=1;//定时器初始化
TH0=(65536-921)/256; TL0=(65536-921)%256;//定时器初值
while(1)
{
if(k==0)//如果按键被按下
{
YS(10);//延时去抖动
if(k==0)//如果是有效按键
{
TR0=1;//启动定时器,开始计时
n=0;//每次按键都清空定时计数
t++;//按键值累加一次
while(!k);//等待按键松开
}
}
if(fe==1)//如果没按键输入
{
switch(t)//则对已有的按键值进行处理
{
case 1:P2=0xfe;break; case 2:P2=0xfd;break;
case 3:P2=0xfb;break; case 4:P2=0xf7;break;
case 5:P2=0xef;break; case 6:P2=0xdf;break;
case 7:P2=0xbf;break; case 8:P2=0x7f;break;
default:P2=0xff;break;//如果不在范围内,则关闭所有LED
}
YS(500);fe=0;t=0;P2=0xff;//延时点亮一会,并清空按键计数值和设置标识符
}
}
}
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;
if(n>500){TR0=0;n=0;fe=1;}//如果达到指定时间,则关闭定时器,并设置标识符
}
/***************************************************************************/
51单片机检测引脚电平变化的C语言程序
sbit LED0 = P0^0; sbit LED1 = P0^1; sbit LED2 = P0^2; sbit LED3 = P0^3;sbit LED4 = P0^4; sbit LED5 = P0^5; sbit LED6 = P0^6; sbit LED7 = P0^7;sbit LED10 = P1^0;void main() { LED0 = 0; LED1 = 0; LED2 = 0; LED3 = 0; ...
51单片机电平检测程序怎么写
我设计的是,8个LED,一个按键,按键的间隔不超过半秒即可,半秒后进行处理 每次按下按键,都重新开始计时,不论按几次按键,经过硬件实测 半秒的时间刚刚好,基本上没有空等待的时间,就是按完按键后,等待程序输出效果的时间 按键以及LED的端口你可以随意修改,如果感觉不错,记得采纳哦!\/***\/ ...
51单片机如何用计数器检测脉冲信号(高低电平),程序怎么做!没有思路...
可以利用51单片机的计数器T0、T1,例如用计数器0的外部计数脉冲输入端T0计数,当计满100个脉冲数量后,触发中断。进入计数服务中断程序。如果有脉冲信号,经过电容微分后,在下降沿会产生一个向下的尖端脉冲,电阻R2是作为一个偏置,当有向下的尖端脉冲来后,反相端的电压会低于同向端的电压。从而比较器...
51单片机 如何检测某个引脚是否为高低电平 求一个C源程序实例
你若想单纯的去检测正在运行单片机的IO口的电平状态的话,直接用LED接到该IO口观察LED的状态即可。如果事先知道该IO口的电平时固定的,拿更好办了,直接用万用表测。 maoarchy | 发布于2011-01-27 举报| 评论 0 11 假如你要检测的脚是P2.0, C51如下:sbit P20 = P2^0;...if(P20==1){ ...} j...
怎样用51单片机计数器测量一个高电平脉冲的宽度,c语言程式,高电平开 ...
0接入脉冲,用T0定时计数器计数:TR0 = 0;while(P0.0 == 0) \/\/当检测到高电平,开启计数器 TR0 =1;while(P0.0 == 1) \/\/当脉冲变低,关闭计数器 TR0 = 0;然后直接读取 TH0和TL0中的计数数据,再乘以你的计数时间间隔(每计一个数的时间,跟你的时钟频率有关系)。
51单片机 C语言 怎样测量高电平持续的时间
假设定时器不溢出,P1.0为高电平输入引脚:while(P1^0==1);\/\/等待眼前的高电平过去 while(P1^0==0);\/\/等待下一个高电平来到 TR0=1;\/\/启动定时器 while(P1^0==1);\/\/等待高电平结束 TR0=0;\/\/关闭定时器 HIGH=TL0+TH0*256;\/\/读取时间 ...
单片机引脚电平变化检测程序
检测P3.1引脚 只要这个引脚电平有变化P2.1就取反。--- ORG 0000H DJNZ R7,MOV A, P3 MOV 20H, A XRL A, 21H MOV 22H, A MOV 21H, 20H JNB 22H.1, 0000H CPL P2.1 SJMP 0000H END 可以实现题目要求。
51单片机用c语言编程判断各i\/o口的是否有高低电平,应该怎样写程序?
就直接用 if (P_^_==0) ……这里的_表示数字,51有四个端口,各有八个,你随便用啊
请问51单片机怎么才能判断电位的高低?
判断I\/O口的电位,用汇编指令这样写:假如判断P1.0脚的电位;SETB P1.0 JNB P1.0,DIDIANPING \/\/如果是低电平,转移到:DIDIANPING AJMP GAODIANPING \/\/如果是高电平,转移到:GAODIANPING DIDIANPING:... \/\/低电平处理 RET GAODIANPING:... \/\/高电平处理 RET 思路就是:先置位成高...
51单片机中如何通过一个端口高低电平,控制另外端口的高低电平? C语言程...
这句话理解为给P1.0外加一个高电平,那么编程中只要加一个判断就可以实现你的目的了,可以参考按键程序,(如果是按键判断需要加入防抖动代码)示意代码如下:sbit k=P1^0;\/\/定义一个端口名称 if(k) P2=1;\/\/如果端口为1,P2置1 else if(k==0) P2=0;\/\/否则,如果端口为0,P2置0 ...