51单片机控制数码管显示时钟,独立按键怎么弄

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-05
51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一次按下计时,在按下时暂停?

其实,控制秒表的启动和停止,很简单。要做秒表,一定要用定时器吧,假如用T0,那开始初始化时,不写TR0=1,先不启动。
当按一下键,再启动,TR0=1,就开始计时了。
再 按一下键,就停止,TR0=0,就不计时了。
程序好写,先 定义一个按键
sbit key=P1^1; //具体是哪个 键,你自己改
主程序中,判断按键和启动/停止
if(key==0)
{
delay(); //具体延时时间自己定
if(key==0)
{
TR0=!TR0; //每按一次,取反 一次
while(key==0);
}
}

位选即wei=1;P0=0xfe;wei=0;可以放到while(1)下面,只不过在 duan=1;P0=leddata[num];duan=0;后面要加个毫秒的延时
你想你频繁地打开位锁存器 再打开段锁存器都是US级的,即使LED能够响应,亮度也不能保证

独立按键处理起来是非常简单的,一般都是IO口单独控制,所以只需要消抖和判断按键按下抬起状态就好。比如:
sbit key=P1^0;
if(key==0)
{
    delay(10);
    if(key==0)
    {
    keyval=1;
    while(key==0);
    }
}


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P2^0;
sbit k2=P2^7;
uint z,shu,bai,shi,ge,shu1,a,b,c;
uchar num,tt,temp;
uchar code table[]={
0x03,0x9f,0x25,0x0d,0x99,
0x49,0x41,0x1f,0x01,0x09,0x11};
void delay(uint z);
void main()
{
k2=0;
k1=1;
shu1=998;
shu=876;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P2=0xc1;
P1=0x03;
while(1)
{
P2=0xc1;
P1=table[a];
delay(1);
P2=0xa1;
P1=table[b];
delay(1);
P2=0x91;
P1=table[c];
delay(1);
P2=0x89;
P1=table[bai];
delay(1);
P2=0x85;
P1=table[shi];
delay(1);
P2=0x83;
P1=table[ge];
delay(1);

}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==5);
{ tt=0;
shu++;
a=shu1/100;
b=shu1%100/10;
c=shu1%10;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu==999)
{
shu=0;
shu1++;
}
if(shu1==999)
shu1=0;

}
}
一个完整的数码管程序,刚毕业时的,好多年了.

按键接个下拉电阻,单片机IO口检测低电平就可以了

  • 51单片机控制DS1302,时间显示在数码管上。
    答:打算用51单片机控制DS1302时钟芯片,做一个显示时间和日期的钟表。三个独立按键(“M”“+”“-”)直接连接在单片机的三个引脚上,用四位数码管显示时间(小时+分钟)秒不显示,按一... 打算用51单片机控制DS1302时钟芯片,做一个显示时间和日期的钟表。三个独立按键(“M” “+”“-”)直接连接在单片机的三个引脚...
  • 51单片机控制数码管显示时钟,独立按键怎么弄
    答:独立按键处理起来是非常简单的,一般都是IO口单独控制,所以只需要消抖和判断按键按下抬起状态就好。比如:sbit key=P1^0;if(key==0){ delay(10); if(key==0) { keyval=1; while(key==0); }}
  • 利用51单片机开发板独立键盘的一个键位来控制数码管的前两位。目的是...
    答:利用51单片机开发板独立键盘的一个键位来控制数码管的前两位。目的是每按下一次,数码加一。即有两位数码管是处于亮的状态。一开始显示“00”,可是每次按下独立键盘是数码管的前一位... 利用51单片机开发板独立键盘的一个键位来控制数码管的前两位。目的是每按下一次,数码加一。即有两位数码管是处于亮的状态。一...
  • 51单片机中用数码管做秒表时怎么用一个独立按键控制开始和暂停,即第一...
    答:要做秒表,一定要用定时器吧,假如用T0,那开始初始化时,不写TR0=1,先不启动。\x0d\x0a当按一下键,再启动,TR0=1,就开始计时了。\x0d\x0a再 按一下键,就停止,TR0=0,就不计时了。\x0d\x0a程序好写,先 定义一个按键\x0d\x0asbit key=P1^1; //具体是哪个 键,...
  • 使用51单片机实现,两位数码管实现秒计时,显示秒,能用独立按键控制开始...
    答:暂停CLR TR0CLR ET0SJMP LOOPLOOP3:DEC AJNZ LOOP ;清零MOV 36H,#0MOV 35H,#0MOV 34H,#0MOV 33H,#0SJMP LOOPEXTINT0:PUSH ACCINC KEYVALMOV A,KEYVALCJNE A,#3,EXT00EXT00:JC EXT01MOV KEYVAL,#0EXT01:POP ACCRETIT0ISR:PUSH ACCCLR TR0MOV TH0,#3CHMOV TL0,#0B0HSETB TR0...
  • 51单片机6位数码管显示时间
    答:C51单片机六位数码管时钟 用数码管dot分隔时分秒 用三个按键设置时间:SET键:小时设定->分钟设定->结束设定,小时设定状态时表示小时的两位数码管闪烁,分钟设定时表示分钟的两位数码管闪烁 CHANGE键:在小时设定状态和分钟设定状态改变数值 SET S键:秒置零 C语言代码://main.c include <REGX52.H>...
  • 51单片机关于独立按键数码管显示
    答:位选即wei=1;P0=0xfe;wei=0;可以放到while(1)下面,只不过在 duan=1;P0=leddata[num];duan=0;后面要加个毫秒的延时 你想你频繁地打开位锁存器 再打开段锁存器都是US级的,即使LED能够响应,亮度也不能保证
  • 51单片机C语言程序4个独立按键实现对数码管数字显示的加减清零等_百度...
    答:include <reg52.h>//P0是数码管。P1是LED.P2是按键sbit KEY_OUT_1 = P2^3;sbit KEY_OUT_2 = P2^2; sbit KEY_OUT_3 = P2^1;sbit KEY_OUT_4 = P2^0;#define uchar unsigned char#define ulint unsigned long#define Frequency 10//定时器中断时间 = f*T#define Time 1//一个周期...
  • 用51单片机控制数码管显示
    答:以单支共阴数码管为例,可将段极接到某端口Pn,共阴极接GND,则可编写出对应十六进制码的七段码表字节数据如右图:16键码显示的程序 我们在P1端口接一支共阴数码管SLED,在P2、P3端口接16个按键,分别编号为KEY_0、KEY_1到KEY_F,操作时只能按一个键,按键后SLED显示对应键编号。代码 1. #...
  • 51单片机 ,用C语言编程 通过独立按键控制蜂鸣器和静态数码管,
    答:1.数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。code:include<reg52.h> define uchar unsigned char define uint unsigned int sbit key1 = P3^4;sbit dula = P2^6;sbit wela = P2^7;uchar code ...