#include
unsigned char val;
unsigned char i,j,k;
sbit k1=P3^4;
void delayms(int ms) // 1ms
{
unsigned char i,j;
for(;ms>0;ms--)
for(i=6;i>0;i--)
for(j=82;j>0;j--);
}
void main()
{
val=0xff;
while(1)
{
if(k1==0)
{
delayms(10);
if(k1==0)
{
P0=val;
val--;
}
while(k1==0); //等待按键释放,要按信一直减,取消这一句即可
}
}
}
/***********************************************************************************************************************
多按键识别,
#include
unsigned char val;
unsigned char key_val;
sbit k1=P3^2;
sbit k2=P3^3;
sbit k3=P3^4;
sbit k4=P3^5;
void delayms(int ms) // 1ms
{
unsigned char i,j;
for(;ms>0;ms--)
for(i=6;i>0;i--)
for(j=82;j>0;j--);
}
void scankey()
{
key_val=0x00;
key_val |=(!k4); //0x08
key_val <<=1;
key_val |=(!k3); //0x04
key_val <<=1;
key_val |=(!k2); //0x02
key_val <<=1;
key_val |=(!k1); //0x01
}
void main()
{
while(1)
{
scankey();
if(key_val!=0)
{
delayms(10);
scankey();
if(key_val!=0)
{
switch(key_val)
{
case 0x01: P0=0xfe;break; //k1
case 0x02: P0=0xfd;break; //k2
case 0x04: P0=0xfb;break; //k3
case 0x08: P0=0xf7;break; //k4
}
}
}
}
}
***************************************************//////////////////////////////////////
关键字:C51 按键识别 等待释放
引用地址:
C51按键识别,等待释放
推荐阅读最新更新时间:2024-03-16 15:22
Startup code 启动文件c51
Startup code:启动代码。在Keil中,启动代码在复位目标系统后立即被执行。启动代码主要实现以下功能: (1) 清除内部数据存储器 (2) 清除外部数据存储器 (3) 清除外部页存储器 (4) 初始化small模式下的可重入栈和指针 (5) 初始化large模式下的可重入栈和指针 (6) 初始化compact模式下的可重入栈和指针 (7) 初始化8051硬件栈指针 (8) 传递初始化全局变量的控制命令或者在没有初始化全局变量时给main函数传递命令。 在每一个启动文件中,提供了可供用户自己修改有来控制程序执行
[单片机]
C51/C52单片机的定时器计数器与中断(内附代码)
一、定时器/计数器简介 设置等待时间,到达等待时间之后执行指定的硬件操作。 定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集AD数据,如果将定时器和IO结合起来就可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以产生PWM方波,定时器产生PWM控制电机状态是工业控制的普通。 二、定时器/计数器相关寄存器介绍 1、计数寄存器TH和HL T/C是16位的,计数寄存器由TH高8位和TL低8位构成 对应T/C0为TH0和TL0, 对应T/C1为TH1和TL1,定时器/计数器的初始值通过TH0/TL0和TH1/TL1设置 2、定时器/计数器控制寄存器TCON
[单片机]
C51—小知识点
1-write总线:和IIC总线类似,是一种通信方式,主机对1-Wire总线的基本操作分为复位、读和写三种。总线上接上拉电阻。对时序的要求比较严格 ROM指令、操作协议: 晶振: CCH:控制信道(CCH)是用于传送信令信息和短的分组数据的信道。 占空比:占空比是指一个脉冲循环内,通电(高电平)时间相对于总时间所占的比例。 PWM:脉冲宽度调试技术,通过对一系列脉冲宽度进行调节来改变来等效获得所需波形 上、下拉电阻:如果一个线路中的电压处于不确定的状态(例如一个引脚不和任何其它回路连通时),那我们就说它的电压是浮动的,他会随着时间不断变化,跳动,而且很容易受到外界环境的影响。处于这种不确定状态的电路会被随机解释为高
[单片机]
单片机红外电视遥控器C51程序代码
//************************************************************** //名称:单片机红外电视遥控器C51程序代码() /*-------------------------------------------------------------- 描述: 一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行 脉冲幅度调制而产生的.当发射器按键按下后,即有遥控码发出,所按的键 不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的 组合表示二进制的 0 ;以脉宽为0.565m
[单片机]
ASM51无参数化调用C51 函数的实现原理
阐述了ASM51无参数化调用C51 函数的实现原理并给出实例来验证该方法的优越性和可行性。文章中表明这样一种观点:“利用汇编语言对I/O接口、中断向量及程序空间分配的巨大优势,让程序员对MCS51内的每一字节甚至是每一比特(可位寻址空间)全部进行统筹安排,设计好各个程序模块,包括I/O口地址和中断向量地址的处理;同时在具体数据处理、通信等不需要过多与硬件打交道的程序模块中,充分利用C51语言强大高效的编程能力”。上述观点并没有错,但是对I/O接口、中断向量及程序空间分配及MCS-51内的每一个字节甚至是每一比特(可位寻址空间)全部进行统筹安排,对于大多数程序员来讲恰恰是件不容易的事。地址空间、栈的起始地址和中断向量地址的分配等
[单片机]
《初学者C51自学笔记》之89C51初步认识
左边是一个总线型的,为什么是总线型呢?它的引脚P1、P2、P3、P0都是有8位,而右边P3是没有P3.6的,所以它是非总线型的。 51单片机内部集成8位CPU,4K字节的ROM,128字节RAM,4个8位并行I/O口,一个全双工串行口,2个16位定时器/计数器,5个中断源。 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器 RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据(断电数据会消失) ROM:用以存放程序、一些原始数据和表格;(断电数据不会丢失) I/O口:四个8位并行I/O口,既可用作输入,也可用作输出; T/C:两个定时/记数器,既可以工作在
[单片机]
外中断C51程序
没有中断时以流水灯显示,外中断0使左右4个LED交替闪烁,外中断1使LED闪亮, #include reg51.h unsigned char code design ={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00}; void Delay(unsigned int i){ unsigned int j; for(;i 0;i--) for(j=0;j 125;j++); } void main(){ unsigned char i; EA=1; EX0=1; EX1=1; IT0=1; //脉冲触发方式 IT1=0; //使用电平触发
[单片机]
C51单片机的IO口介绍(下)
上一篇文章我们对C51的IO简单的介绍了一下,现在我们来简单了解C51的IO的结构 这里我们学习一下比较常见的单片机的IO模式,分别是准双向,开漏输出和推挽输出 (这里要提一嘴,我们用的STC88C52RC是没有推挽输出功能的,STC公司后续推出的一些机型才有推挽输出功能) 接下来我们来看看这几种模式 1.准双向 看看下面的原理图,机内信号通过一个非门取反后送入一个MOS管,MOS管负责控制这个IO的高低电平,配合内部上拉电阻完成高低电平的输出 为了方便我们分析,我们把这个MOS管看成一只NPN三极管。区别是三极管靠电流导通,MOS管靠电压导通 结合前面我们讲过的知识,对于一只NPN三极管,基极b电压比集电极c电压
[单片机]