导航:首页 > 操作系统 > 单片机按键加一

单片机按键加一

发布时间:2023-07-19 20:28:24

单片机 按键(采用独立式按键)按下一次,让液晶第一位显示的数码加1,显示范围0~9

程序清单如下:

#include < reg51.h >// 51单片机头文件

#define uchar unsigned char // 宏定义,用uchar替代无符号字符型

#define uint unsigned int // 宏定义,用uint 替代无符号整数型

sbit Key = P2 ^ 7;

uchar Count = 0;

uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、'-'、' ' 'P'

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

};//延时N毫秒

void DelayNms( uint N ) // 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的

{

uint x,y;

for( x=N; x>0; x-- )

for( y=110; y>0; y-- );

}

//数码管显示 // 显示方式为动态扫描,视觉暂留原理

void Display( uchar Num ) // *p指向Main函数中的数组ShowNum的首地址

{

P0 = DataChar[ Num ]; // 向P0赋段码值

DelayNms(2); // 短暂的延时

P0 = 0x00; // 让数码管熄灭,否则会造成数字重叠

}

void main( void )

{

while(1)

{

if( Key == 0 )

{

DelayNms(30);

if( Key == 0 )

{

Count += 1;

Count = (Count>9)? 0 : Count;

}

while( !Key );

}

Display( Count );

}

}

Ⅱ c51单片机按键加1,保持

1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态。
2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。设按键接单片机p01引脚,故可采用以下程序实现按键扫描
if(p01==0)//按下按键,进入下降沿
{
delay2();//20ms延时去按键前抖动
while(p01==0);//等待上升沿到
来,即按键弹起
flag=~flag;//flag取反,实现状态切换
}
void
delay2()//20ms延时子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
注:根据按键的具体接法,若按下按键向单片机输入低电平,则采用以上程序;若按下按键向单片机输入高电平,则将两处p01==0均改为p01==1。

Ⅲ 单片机C语言如何实现按键按一下的时候加一,长按的时候连加。

这个可以通过定时器来实现,比如当按键时间小于2秒时,按一次加1,当超过2秒时,没50毫秒加1实现连加功能。例程如下:
#include<reg51.h>
unsigned int a;
unsigned char times;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>40)
{

a++;
printf("%d",a);

}

}

main()
{
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0xfd;
TL1=0xfd;
TR0=1;
TR1=1;
ET0=1;
EA=1;
times=0;
a=0;
while(1)
{
if(key==0)

{

a++;

printf("%d",a);

while(key==0);

times=0;

}

}

}

Ⅳ 单片机按键按一次就加一

按键相对是个低速任务。你按的再快,一秒可以按十次吗?什么?你可以。。那你就是作弊了。因为哪怕你反应的过来。按键可不行。所以。这个本质你需要牢牢抓住。那么你可以选择一秒之内只检测几次按键。把几乎是连续在使用的机器时间碎片化。比如在一个碎片里只查一次按键。是的,你现在就是这么做的。只是循环太快。碎片太多。按键的抖动你都查到了。所以你需要的仅仅是慢下来。极限就是刚刚说的查10次。算算,这是一个100ms的定时。明白定时器的真正用途了吗?如果你实际这么实验了你会发现这的确有效。不会加个成百上千了。接下来你需要设置一个逻辑让按键检测只对下降沿起作用。最好的办法就是和前次的状态比较。如果上次的状态为高而此次状态为低。那么这就是个下降沿。于是你需要一个寄存器保存上一次的状态。并每次比较后更新。原来这寄存器是这么用的。。实际实验后发现这么干已经可以保证基本每次长按只会加1。但是短按似乎会丢失。那是因为。100ms实在是长了些。电平保持100ms有时是太难了。所以,你可以适当提高频率。比如提高10倍。以10ms为周期。基本能解决大多数问题。

Ⅳ 单片机按一下加一,加到20的程序

假设P0 P1口各接一个数码管,p2.0接按键,程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P2^0;
uchar num=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void )//主程序
{
while(1)
{
if(key==0)//判断按键是否按下
{
Delay1ms(10);//延时消抖
if(key==0)
{
while(key==0);;//等待按键抬起
num++;
if(num==20)num=0;
}
}
P0=table[num%10];
P1=table[num/10];
}
}

Ⅵ 单片机c语言按键每按一次加一一直到加到100程序怎么写求高手指点。

给你参考
//12M晶振。2位共阳数码管,P0为段码,P2.0、P2.1位控

#include <reg51.h>
#define uchar unsigned char

sbit P20=P2^0;
sbit P21=P2^1;
sbit KEY=P2^2;
uchar ge,shi;
uchar code tab[ ]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,};

void delay_ms(unsigned int ms) //1ms延时
{
uchar a;
while(ms--)
for(a=123;a>0;a--);
}

void display();

void main()
{
while(1)
{
display();
while(!KEY)
{
display();
if(KEY)
ge++;
}
if(ge==10)
{
ge=0;
shi++;
}
if(shi==100)
{
shi=0;
}
}
}

void display( )
{
P20=1;
P0=tab[ge];
delay_ms(5);
P20=0;
P21=1;
P0=tab[shi];
delay_ms(5);
P21=0;
}

Ⅶ 单片机按键加一、减一

利用外部中断实现按键按一下数码管数字加1,实现00-99的循环,另一个按键实现清零,不管数码管数字是多少,该按键按下数码管显示00

阅读全文

与单片机按键加一相关的资料

热点内容
unix网关命令 浏览:873
想自己做网站要学编程吗 浏览:597
租个服务器开个私服需要什么 浏览:272
图片换成pdf格式 浏览:663
javamidi编程 浏览:833
android60demo 浏览:69
头条算法怎么复习 浏览:514
灯光控制通道可以编程设置吗 浏览:783
webpack命令行 浏览:807
卸载云服务器操作系统 浏览:31
java文件移动文件夹 浏览:451
针织公斤足称算法 浏览:460
电脑下载的图片从文件夹重新编组 浏览:645
安卓源码编译引导失败 浏览:676
苹果怎么添加自定义app文件夹 浏览:930
橙牛app怎么找客服 浏览:307
php对象魔术方法 浏览:487
OBV能量潮幅图指标源码 浏览:915
编程15个好习惯 浏览:678
电脑u盘文件夹显示屏幕保护程序 浏览:803