51单片机设计一个秒表,用两个数码管(任意相邻的两个)显示。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
51单片机数字秒表设计用4位数码管分别显示十秒,秒,百毫秒,十毫秒计时范围为10ms到99s

/***************************************************************************/
#include
sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
void YS(char hs); void XS(int xm,int xs); void Time1(void);int n,i,m,s;
/***************************************************************************/
void main(void){Time1();while(1){XS(m,s);}}//主函数
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;
if(n>1000){n=0;s++; if(s>59){s=0;m++;if(m>59){m=0;}}}
}
/***************************************************************************/
void Time1(void)//定时器初始化
{
TH0=(65536-921)/256; TL0=(65536-921)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;
}
/***************************************************************************/
void XS(int xm,int xs) //数码管显示
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10; d3=(xm/1)%10; d4=(xm/10)%10;
P0=table[d1]; Axs=0; YS(10); Axs=1;//个位显示
P0=table[d2]; Bxs=0; YS(10); Bxs=1;//十位显示
P0=table[d3]; Cxs=0; YS(10); Cxs=1;//百位显示
P0=table[d4]; Dxs=0; YS(10); Dxs=1;//千位显示
}
/***************************************************************************/
void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数
/***************************************************************************/
这是我做的利用单片机定时器中断,模拟时钟的程序

和你要的一样,无偿奉献了

数码管的端口用的可能不一样,自己改下

两位跟一位电路不一样,一位时不必位选引脚,两位则必需指明位选的两个引脚,
两位时要轮询动态刷两个位,你这个delay方法不好使,要用时间中断处理

ORG 0000H
JMP BEGIN
ORG 000BH
LJMP T0INT
ORG 001BH
LJMP T1INT
LEDD EQU 30H
LEDC EQU 36H
SECC EQU 37H
TCNT EQU 3AH
ORG 0030H
;---------------------------------------
TABLE: ; 共阴极数码管显示代码表
DB 0FCH ;"0" 00H
DB 60H ;"1" 01H
DB 0DAH ;"2" 02H
DB 0F2H ;"3" 03H
DB 66H ;"4" 04H
DB 0B6H ;"5" 05H
DB 0BEH ;"6" 06H
DB 0E0H ;"7" 07H
DB 0FEH ;"8" 08H
DB 0F6H ;"9" 09H
DB 0EEH ;"A" 0AH
DB 3EH ;"B" 0BH
DB 9CH ;"C" 0CH
DB 7AH ;"D" 0DH
DB 9EH ;"E" 0EH
DB 8EH ;"F" 0FH
DB 00H ;" " 10H
; DB 3FH,06H,5BH,4FH,66H ;12345
; DB 6DH,7DH,07H,7FH, ;6789
;---------------------------------------
DELAY:
MOV R6,#25
DLY01:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DLY01
RET
;---------------------------------------
BEGIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TH1,#0F4H
MOV TL1,#48H
MOV LEDC,#0
MOV R0,#LEDD
CLR A
INIT:
MOV @R0,A
INC R0
DJNZ LEDC,INIT
SETB ET1
SETB TR1
MOV P2,#0
MOV TCNT,#0
MOV SECC,#0
SETB ET0
SETB EA
MOV SECC,#60
LCALL DISSEC
SETB TR0
SETB TR1
LOOP:
SJMP $
;---------------------------------------
T1INT:
PUSH ACC
CLR TR1
MOV TH1,#0F4H
MOV TL1,#48H
SETB TR1
MOV DPTR,#TABLE
MOV R0,#LEDD
MOV A,LEDC
T1INT0:
JNZ T1INT1
MOV P2,#01H
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P0,A
SJMP T1INTD
T1INT1:
MOV P2,#02H
INC R0
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P0,A
T1INTD:
INC LEDC
MOV A,LEDC
CJNE A,#2,T1INT6
T1INT6:
JC T1INTE
MOV LEDC,#0
T1INTE:
POP ACC
RETI
;---------------------------------------
HBCD:
MOV B,#10
DIV AB
SWAP A
ORL A,B
RET
;---------------------------------------
T0INT:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC TCNT
MOV A,TCNT
CJNE A,#20,T0INT1
T0INT1:
JC T0INTE
MOV TCNT,#0
INC SECC
MOV A,SECC
CJNE A,#60,T0INT2
JC T0INT2
MOV A,#60
MOV SECC,A
T0INT2:
LCALL DISSEC
T0INTE:
POP ACC
RETI
;---------------------------------------
DISSEC:
MOV A,SECC
LCALL HBCD
PUSH ACC
ANL A,#0FH
MOV 30H,A
POP ACC
SWAP A
ANL A,#0FH
MOV 31H,A
RET
;---------------------------------------
END

,?!。。。??

  • 51单片机设计一个秒表,用两个数码管(任意相邻的两个)显示。
    答:T1INT0:JNZ T1INT1
  • 51单片机制作一个秒表
    答://功能:0~99秒的简易秒表设计,两个静态数码管,定时器采用中断方式#include"reg51.h"#define uchar unsigned char#define uint unsigned int uchar count=0; //对50ms定时时间进行计数uchar miao=0; //秒计数器 //函数名:timer_1()//函数功能:定时器T1的中断函数,T1在工作方式1下每5...
  • 利用51单片机,通过两位数码管显示秒,按键实现计时和停止计时 具体内容...
    答:$ SETB TR0 CLR 01H SJMP LOOP0LP01: JB P1.1,LP02 JNB P1.1,$ SETB 01H SJMP LOOP0LP02: JB P1.2,LOOP0 JNB P1.1,$ CLR TR0 MOV P3,#0FDH MOV P2,#0 MOV P3,#0FEH MOV P2,#0 SJMP MAINLOOP0: JB 00H,LOOP1 MOV A,R0 SJMP LOOP2LOOP1: MOV A,R1LOOP2: MOV...
  • 编程实现倒计时的秒表,2位LED数码管显示,延时采用硬件延时的方法_百 ...
    答:include<reg51.h> unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码表 unsigned char second;//秒倒计时变量 unsigned char t0n;//T0中断次数计数 sbit k1=P3^2;//定义按键 void delay(){ unsigned int j;for(j=400;j>0;j--)...
  • 单片机程序 根据电路图,请编写程序,使前两个数码管实现00到59的秒表...
    答:请设计一个2位静态数码管从00到59显示的程序 include <reg51.h> unsigned char show[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};int n, j;qc()interrupt 1 using 3 {TH0=(65336-10000)/256;TL0=(65336-10000)%256;n++;if (n>=100){n=0;j++;if (j>=60)j=...
  • ...图设计一个51单片机实现秒表的程序,要求:2位数码管显示00-99秒,每...
    答:EA=1;ET0=1;} void T0INT() interrupt 1 //定时器T0中断 方式1 { uchar time;TH0=0x3c;TL0=0xb0;time++;if(time==20) //20X50ms=1s { time=0;ge++;} } void main(){ t0intinit( );while(1){ while(!KS){delay(10);if(KS)TR0=1;} while(!KP){ delay(10);if...
  • 单片机秒表设计
    答:用AT89C51设计一个2位的LED数码显示作为“秒表”,这应该是一个仿真题,可用两位一体的共阴数码管,用定时器T0定时,得到1秒计时。
  • c51单片机电子秒表计数器(只有两个数码管的)两个开关一个复位一个停止/...
    答:int0_srv()interrupt 0 { i=0;t=0;P0=led[0];P2=led[0];} void timer0()interrupt 1 { i++;if(i==20){ i=0;t++;} if(t==60)t=0;P0=led[t/10];P2=led[t%10];TH0=0x3c;TL0=0xb0;} void main(void){ TMOD=0x01;TH0=0x3c;TL0=0xb0;//丢了 P0=led[t/10];...
  • 哪位高手帮下忙,做一简单的单片机课题,万分感谢!!!急求
    答:/***数显秒表,范围0~99——火柴天堂作品-20120612***/ /***源程序硬件环境:51单片机,12MHz晶振,2位共阳数码管,P0 口段选,P20~P21 低电平位选(反相器),P21为高位数码管,P30~P31双独立按键***/ /***功能说明:按启动/暂停键(P30),开始/暂停计时,按 清零键(P31)清零数据***/ include"...
  • 以单片机为核心,设计一个2位的LED数码显示作为“秒表”。 C语言程序+...
    答:// 时钟秒表,仿真示例程序,可以参考一下。include<reg51.h> define uchar unsigned char define uint unsigned int sbit qingling=P1^0;//清零 sbit tiaofen=P1^1;//调分 sbit tiaoshi=P1^2;//调时 sbit sounder=P1^7;//naozhong uint a,b;uchar hour,minu,sec, //时钟 hour0,minu...