51单片机怎么用按键控两个数码管,按一下改变两个数字的显示速度,速

作者&投稿:福迫 (若有异议请与网页底部的电邮联系)
51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示~

1、首先,要把代码写好,点亮数码管。

2、代码写完后,要确认原先写好的代码是不是正确的。

3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。

4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。

5、这里改成的是代表数字0的代码,如图所示。

6、最后写好代码后,将生成的hex文件写进单片机,数码管显示的数字就变成0了。

给你个思路,在while循环里要实时刷新数码管显示,按键的判断放在定时器里,设一个变量,当按键按下时累加定时器中断次数,然后在主函数里判断变量值,超过一定数量则判断为按下,这时数码管计数变量++,当然你还要设按键抬起标志,仔细思考一下,肯定能写出来

#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,dat,dattop=10,cnt=0;
sbit keyu=P1^0;
sbit keyd=P1^1;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
void t1isr() interrupt 3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
cnt++;
if(cnt>=dattop)
{
cnt=0;
dat++;
dat%=100;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyu==0)
{
while(keyu==0);
if(dattop<100)dattop++;
}
if(keyd==0)
{
while(keyd==0);
if(dattop>0)dattop--;
}
}
}

这个简单,私聊教你,不收费,

903605094

有偿


怎样用单片机编程。两个独立按键,控制数码管的加减?
这个很容易嘛,你先设置一个寄存器,然后一直扫描两个按键(假设K1按下为加,K2按下为减),假设检测到K1被按下,寄存器就加1,如果检测到K2被按下,寄存器就减1;然后再调用显示函数就OK了。、 ORG 0000H LJMP START ORG 0030H START:MOV R2, #1 LOOP:CALL DISP JB P1.6,...

单片机51按下按键key1流水灯从上到下亮3次代码怎么写
可以采用以下步骤:1、要定义按键输入口和流水灯输出口。使用单片机51的P1和P2口,分别定义按键输入口和流水灯输出口。2、要初始化按键输入口为低电平。当按键没有被按下时,按键输入口就处于低电平状态。3、在主函数中,使用一个无限循环,不断检查按键输入口是否被按下。按下按键,则点亮第一个灯...

怎样用单片机实现按键 1下是一个信号 2下是另一个信号
是想实现鼠标单击和双击那样的效果吗?可以在一次按键后设定一个标志位,比如FLAG=1,延时1秒,然后如果1秒内。没的按键动作,则FLAG=0,如果有按键则判断。if(key==0&&flag==0){ flag=1;while(key==0);while(key==1&&num<1000){if(key==0&&flag==1){信号2;flag=0;break;} delayms(1...

51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一...
其实,控制秒表的启动和停止,很简单。要做秒表,一定要用定时器吧,假如用T0,那开始初始化时,不写TR0=1,先不启动。\\x0d\\x0a当按一下键,再启动,TR0=1,就开始计时了。\\x0d\\x0a再 按一下键,就停止,TR0=0,就不计时了。\\x0d\\x0a程序好写,先 定义一个按键\\x0d\\x0asbit ...

单片机用1个按键控制60秒定时,通过2个数码管显示。按一下启动,再按停止...
CLR P2.1 MOV A, B POP B MOVC A,@A+DPTR MOV P0,A ;把显示码传至A口 SETB P2.0 ;选通P2.0,显示 ACALL DELAY1S CLR P2.0 AJMP LOOP KEY_CHECK: ;看有没有键按下 MOV A,P3 ANL A,#0fFH ;逻辑与 CJNE A,#0FFH,KEY_CER ;如果读入的与...

51单片机怎样用按键实现数码管位切换
这要写程序,也是稍麻烦一点的。大概思路是这样的,用一个按键切换显示位,按一下,切换一位,是这样吧。用一个变量计数,每按一次键加1,一共切换多少位,就计数到多少。计到最大再回到第一位计数。例,四位数码管,计数为0,1,2,3,超过3就回0。好了,按键解决了,再解决显示的,计数值对...

我要用51如何单片机实现一个按键控制功能.?
我想,你可以这样,先好好学习一下中断...这样应该挺好实现的...如果有原理图的话,写这个还是不难的...

单片机P1口接8个弹性按键(P1.0~S0..P1.7~S7),P2口接一数码管,用C语言...
while(1){ if(key1==0){ delay1ms(10); \/\/按键去抖动 if(key1==0){ num=1;P0=table[num];} while(!key1);} if(key2==0){ delay1ms(10); \/\/按键去抖动 if(key2==0){ num=2;P0=table[num];} while(!key2);if(key3==0){ num=3;P0=table[num];} while(!key3);...

51单片机怎么用一个按键控制P0,P2顺序输出高电平
下面这个程序里面有你要的东西,自己找找。include"reg51.h"void delay(int n);sbit K1=P3^3; \/\/LED左移按键 sbit K2=P3^5; \/\/LED右移按键 sbit K3=P3^6; \/\/开启手动按键 sbit K4=P3^7; \/\/开启自动按键 bit mark1=0;bit mark2=0;unsigned char a,b,c,d;int x;v...

单片机编程 四个按键 K1=p1.1 K2=p1.2 k3=p1.3 k4=p1.4 p5 p6输出(k1...
include "reg51.h" \/\/ 试试 sbit k1 = P1^0;\/\/按键1 sbit k2 = P1^1;\/\/按键2 sbit k3 = P1^2;\/\/按键3 sbit k4 = P1^3;\/\/按键4 sbit p5 = P1^5; \/\/输出1 sbit p6 = P1^6; \/\/输出2 bit t1, t2;void main(void){ while(1){ if(k1==0 && t1==0) {t1...

鄢陵县17188482991: 51单片机怎么用一个按键控两个数码管,按一下改变两个数字的显示速度 -
昔肯赛德: #include #define uchar unsigned char; uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f uchar number,dat,dattop=10,cnt=0; sbit keyu=P1^0; sbit keyd=P1^1; void t0isr() interrupt 1 { TH0...

鄢陵县17188482991: 求单片机按键控制数码管程序 -
昔肯赛德: 实现方法有挺多种的,下面介绍一种: 1、按键子程序:实现按第一个键使键值keyvalue=1,第二个键使键值keyvalue=2,第三个键使键值keyvalue=3 2、显示子程序定义3个字节的显示缓存,如dispbuf1,dispbuf2,dispbuf3使dispbuf1的数字显...

鄢陵县17188482991: 求51单片机控制2个数码管的程序
昔肯赛德: 两只数码管段码分别由P0,P2输出控制,P0是十位,P2是个位.P3.2,P3.4分别接两只按键,P32.清0,P3.4计数. 以上程序来自《单片机C语言程序设计实训100例——基于8051+Proteus仿真》 #include &lt;reg52.h&gt; #define uchar unsigned ...

鄢陵县17188482991: 单片机上用两个按键独立控制两个数码管,怎样使在按下一个按键使对应的数码管改变后,另一个数码管亮着 -
昔肯赛德: 给你个思路,在while循环里要实时刷新数码管显示,按键的判断放在定时器里,设一个变量,当按键按下时累加定时器中断次数,然后在主函数里判断变量值,超过一定数量则判断为按下,这时数码管计数变量++,当然你还要设按键抬起标志,仔细思考一下,肯定能写出来

鄢陵县17188482991: c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序 -
昔肯赛德: 1、首先先在proteus画出仿真图,方便仿真程序.2、接着来编写程序,先来写入头函数.2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写.3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义.4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向.5、检查没有错误,编译一下,就可以进行仿真了.

鄢陵县17188482991: 51单片机如何用定时器中断,实现按键计数加减,两位数码管,C语言,谢谢 -
昔肯赛德: 用一个单元,存放计数值,每隔1秒加一,然后进行十进制调整,之后向P2输出即可.

鄢陵县17188482991: 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一秒、减一秒和继续 -
昔肯赛德: #include<reg51.h>#define uchar unsigned char; uchar LED1,LED2; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar num=0;sec,key; void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } void ...

鄢陵县17188482991: 急急急,单片机控制2个数码管(共阳),设置两个按键,开机数码管显示自己学号的后两位(学号24号). -
昔肯赛德: 两个共阳数码管,分别接在P0口和P2口,接成静态显示电路.两按键分别接在P3.2和P3.3两个脚上.仿真图如下,开机就显示24.

鄢陵县17188482991: 多个按键控制多个数码管的显示. -
昔肯赛德: 很简单 共阴 数码管共阴.连在P1口.P2^1作为按键.void main() { unsigned char a[2]=; char *p; p=a; //将a[0]的值传给p while(1) { if(P2^1==0) //键按下 { P1=p; //显示当前p指向的值 p++; //p指向后一位 if(*p=='/0') //如果指针P指向的值为'/0'则将P重新指向a的首地址 p=a; } } }

鄢陵县17188482991: 单片机可以实现一个独立按键控制数码管多个数字吗? -
昔肯赛德: 一个按键控制4个数码管显示4个数,最简单的方法是按一次键计一个数,最大数是9999,即可显示四位数.再简单点,按一次键开始自动计数,最大数还是9999,再按一次键停止计数.这样控制程序好写.长按和短按对于初学者有点难,当然了,要能写出程序来是最好啦.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网