导航:首页 > 操作系统 > 单片机多功能秒表

单片机多功能秒表

发布时间:2023-01-29 14:12:25

① 请问一下基于51单片机的多功能秒表怎样实现六个数码管的显示

用定时器定时10mS中断一次,每次中断毫秒计数器加10,若亳秒大于1000,清零亳秒,秒加1,若秒等于60,秒清0,分加1
主程序中只管计算分离分,十分,秒,十秒,十毫秒,百毫秒,并不断地查七段码表并刷新数码管

② 如何用单片机汇编语言设计一个秒表

C51 http://..com/question/42921479.html?fr=qrl&cid=192&index=1

http://..com/question/29519178.html?fr=qrl&cid=192&index=2
1.基于单片机的设计
2.计时精度:百分之一秒
2.5键操作完成 清除 启动 停止 设置初值 程序退出的功能
采用LED显示时、分、秒、百分之一.PROTEL图最好也有

用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。
三、程序代码:
A_BIT EQU 20H
B_BIT EQU 21H
TEMP EQU 22H
MOV P3,#0FFH
MOV P0,#0FFH
CLR F0
CLR F1
MOV DPTR,#NUMTAB
MOV P3,#0FFH
MOV P0,#0FFH
START:JB P3.6,START1
ACALL DELAY10
JB P3.6,START
JNB P3.6,$
LJMP GN1
START1: JB P3.7,START
ACALL DELAY10
JB P3.7,START1
JNB P3.7,$
LJMP GN2
GN1:
S1:MOV A,#0
MOV TEMP,A
GOON1: MOV R2,#2
JS1: MOV R3,#250
TIME1: MOV A,TEMP
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
LCALL DPLOP1
C1: JB P3.6,B1
ACALL DELAY10
JB P3.6,C1
JNB P3.6,$
CPL F0
ZT1: ; MOV P3,#0FFH
JB P3.6,$
ACALL DELAY10
JB P3.6,ZT1
JNB P3.6,$
LCALL DPLOP1

B1: JB P3.7,LOOP1
ACALL DELAY10
JB P3.7,B1
JNB P3.7,$
AJMP OVER
LOOP1: DJNZ R3,TIME1
DJNZ R2,JS1
INC TEMP
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1

ACALL OVER
RET
GN2: MOV A,#14H
MOV TEMP,A
MOV P3,#0FFH
MOV P0,#14H
GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP
MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
MOV DPTR,#NUMTAB
DPLOP2: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0,A

CLR P2.5
ACALL DELY1
SETB P2.5
MOV A,B_BIT
MOVC A,@A+DPTR

MOV P0,A

CLR P2.6
ACALL DELY1
SETB P2.6
C2: JB P3.6,B2
ACALL DELAY10
JB P3.6,C2
JNB P3.6,$

ZT2: MOV P3,#0FFH
JB P3.6,$
ACALL DELAY10
JB P3.6,ZT2
JNB P3.6,$

B2: JB P3.7,LOOP2
ACALL DELAY10
JB P3.7,B1
JNB P3.7,$
AJMP OVER
LOOP2: DJNZ R3,TIME2
DJNZ R2,JS2
DEC TEMP
MOV A,TEMP
JNZ GOON2
ACALL OVER
RET

OVER: AJMP START
DELY1: MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1: MOV A,A_BIT
MOVC A,@A+DPTR
MOV P0,A

CLR P2.5
ACALL DELY1
SETB P2.5
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
ACALL DELY1
SETB P2.6
RET
END

③ 单片机秒表设计

用AT89C51设计一个2位的LED数码显示作为“秒表”,这应该是一个仿真题,可用两位一体的共阴数码管,用定时器T0定时,得到1秒计时。

④ 用51单片机做了一个多功能秒表 但是 显示的时候,数码管不显示小数点,用的是 共阴级数码管程序如下

关键是程序显示部分你没有贴出来,贴出来的部分和小数点没关系

⑤ 单片机 按键秒表

秒表的设计程序
用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。
三、程序代码:
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
TEMP EQU 22H ;计数器数值存放内存位置 ;开机初始化
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#0FFH;使显示时间数码管熄灭
CLR F0
CLR F1
MOV DPTR,#NUMTAB ;指定查表启始地址
;等待按键输入
;根据按键的输入判断执行什么功能;按键1按下则执行功能1
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#0FFH;使显示时间数码管熄灭
START:JB P3.6,START1;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,START;如果是干扰就返回
JNB P3.6,$;等待按键松开
LJMP GN1 ;按键2按下则执行功能2START1: JB P3.7,START;循环判断开始按钮K2是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.7,START1;如果是干扰就返回
JNB P3.7,$
LJMP GN2;数码管显示秒表时间的程序
GN1: ;先初始化
S1:MOV A,#0
MOV TEMP,A
GOON1: MOV R2,#2
JS1: MOV R3,#250
TIME1: MOV A,TEMP ;将TEMP中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;个位在B LCALL DPLOP1 ;插入一段判断定时过程中是否有按键输入的程序段
C1: JB P3.6,B1
ACALL DELAY10;延时10毫秒消抖
JB P3.6,C1
JNB P3.6,$;等待按键松开
CPL F0
ZT1: ; MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
JB P3.6,$;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,ZT1;如果是干扰就返回
JNB P3.6,$;等待按键松开
LCALL DPLOP1

B1: JB P3.7,LOOP1
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVERLOOP1: DJNZ R3,TIME1 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS1 ;循环执行2次,时间为1 秒钟INC TEMP;满一秒钟对时间加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判断TEMP的数值是否为60?不为60循环
ACALL OVER
RET
GN2: MOV A,#14H ; 设定倒计时的时间20S
MOV TEMP,A;数码管显示倒计时时间的程序
;初始化
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#14H;使显示时间为设定的倒计时时间 GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP ;将TEMP中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;个位在B MOV DPTR,#NUMTAB ;指定查表启始地址
DPLOP2: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码

CLR P2.5 ;开个位显示
ACALL DELY1;显示1毫秒
SETB P2.5;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
ACALL DELY1;显示1毫秒
SETB P2.6;关闭十位显示,防止鬼影 ;插入一段判断定时过程中是否有按键输入的程序段
C2: JB P3.6,B2
ACALL DELAY10;延时10毫秒消抖
JB P3.6,C2
JNB P3.6,$;等待按键松开

ZT2: MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
JB P3.6,$;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,ZT2;如果是干扰就返回
JNB P3.6,$;等待按键松开

B2: JB P3.7,LOOP2
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVERLOOP2: DJNZ R3,TIME2 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS2 ;循环执行2次,时间为1 秒钟DEC TEMP;满一秒钟对时间减1
MOV A,TEMP
JNZ GOON2;判断TEMP的数值是否为0?不为0循环
ACALL OVER
RET
;结束定时
OVER: AJMP START;退到开机初始化状态;1毫秒延时子程序
DELY1: MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET;10毫秒延时子程序
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET;实验板上的两位一体的数码管0~9各数字的显示代码
NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码

CLR P2.5 ;开个位显示
ACALL DELY1;显示1毫秒
SETB P2.5;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
ACALL DELY1;显示1毫秒
SETB P2.6;关闭十位显示,防止鬼影
RET
END

⑥ 单片机秒表功能实现的原理

利用单 片机内定时器,一次定时50ms,定义4 个变量,分别是时、 分、秒和中断次数,每中断一次中断次数变量加1,累积20次,即是1S,然后秒加1,够60秒后秒清0,分加1,60 分后,分清0,时加1,24小时后 ,小时清0,这些都在中断程序中完成,主程序中不断地显示时间,这就是一个时钟。在此基础上,增加按键控制,可以调整时间,设定闹钟,使功能更加完善。

⑦ 单片机智能秒表 ,怎么写程序啊

include<reg52.h>
code char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
code char tab1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef};
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit beep=P1^7;
static unsigned char ms,sec,min;
static unsigned char Min[10],Sec[10],Ms[10];
static int i,j;
unsigned char flag;
void delay(unsigned int cnt)
{
while(--cnt);
}
void Beep()
{
unsigned char i;
for(i=0;i<250;i++)
{
beep=0;
delay(5);
beep=1;
delay(15);
}
}
void main()
{
unsigned char key3_flag=0,key4_flag=0;
TMOD|=0x01;
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=0;
TMOD|=0x10;
TH1=0xf8;
TL1=0xf0;
ET1=1;
TR1=1;
EA=1;
sec=0;
ms=0;
min=0;
P1=0xff;
i=0;
j=0;
start:
while(1)
{
if(!key1)
{
flag=0;
if(!key1)

delay(50);
if(!key1)
while(!key1)
{;}
TR0=!TR0;
}
if(!key2)
{
delay(50);
if(!key2)
{
while(!key2)
{;}
if(i==10)
{
TR0=0;
flag=1;
goto start;
}
else
flag=0;
Min[i]=min;
Sec[i]=sec;
Ms[i]=ms;
i++;
}
}
if(!key3)
{
flag=0;
delay(50);
if(!key3)
{
while(!key3)
{;}
TR0=0;
key3_flag=1;
if(j==i)
goto start;
else if(key4_flag)
j+=2;
key4_flag=0;
min=Min[j];
sec=Sec[j];
ms=Ms[j];
j++;
}
}
if(!key4)
{
flag=0;
delay(50);
if(!key4)
{
while(!key4)
{;}
TR0=0;
key4_flag=1;
if(j<0)
goto start;
else if(key3_flag)
j-=2;
key3_flag=0;
min=Min[j];
sec=Sec[j];
ms=Ms[j];
j--;
}
}
if(!key5)
{
flag=0;
delay(50);
if(!key5)
while(!key4)
{;}
TR0=0;
min=0;
ms=0;
sec=0;
for(i=0;i<10;i++)
{
Min[i]=0;
Sec[i]=0;
Ms[i]=0;
}
i=0;
}
while(flag)
{
Beep();
goto start;
}
}
}
void Timer1_isr(void) interrupt 3 using 0
{
static unsigned char num;
TH1=0xf8;
TL1=0xf0;
switch(num)
{
case 0:P2=0xfe;P0=tab[min/10];break;
case 1:P2=0xfd;P0=tab[min%10];break;
case 2:P2=0xfb;P0=tab[sec/10];break;
case 3:P2=0xf7;P0=tab1[sec%10];break;
case 4:P2=0xef;P0=tab[ms/10];break;
case 5:P2=0xdf;P0=tab[ms%10];break;
default:break;
}
num++;
if(num==6)
num=0;
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0xd8;
TL0=0xf0;
ms++;
if(ms==100)
{
ms=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
}
}
}

⑧ 基于单片机的多功能秒表设计,有什么重难点呢

按下按键时,TR0=0 TR1=0 即可
显示程序不要放在定时器中断程序里,定时器中断程序只负责更新时间
数码管的刷新放在主程序中,这样不管时间是否走动,数码 管一直显示

⑨ 51单片机 秒表设计

// 51单片机 秒表,显示时间为0000—9999秒,启动、停止,(停止后再次启动复位)

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar ,shi;

uint a1,a2;

sbit D1=P3^0;

sbit D2=P3^1;

sbit D3=P3^2;

sbit D4=P3^3;

sbit key=P3^5;

sbit key1=P3^7;

bit j ;

uint y ;

void main()

{

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;

ET0=1;

TR0=1;

=0;

shi=0;

while(1)

{

if(key==0)

{

j=0;

}

if(key1==0)

{

j=1; a2=0;

}

}

}

void timer0()interrupt 1

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

a1++;

y++;

if(a1==100)

{

a1=0;

if(j==1) a2++;

if(a2>=10000) a2=0;

}

D1 = 1; D2 = 1; D3 = 1; D4 = 1;

if(y==1)

{

P1=table[a2%10000/1000];

D4=0;

}

if(y==2)

{

P1=table[a2%1000/100];

D3=0;

}

if(y==3)

{

P1=table[a2%100/10];

D2=0;

}

if(y==4)

{

P1=table[a2%10];

D1=0;

y=0;

}

}

⑩ 求用单片机设计一个秒表AT89C51

;汇编程序如下。

;使用T0定时方式1,每隔50ms中断一次,用于修改时间及显示

;使用外部中断0、1,用于控制启动和清零

;========================================================

ORG0000H

AJMPMAIN

ORG0003H

AJMPX0_INT

ORG000BH

AJMPT0_INT

ORG0013H

AJMPX1_INT

MAIN:

MOVTMOD,#01H;T0定时方式1

MOVTH0,#(65536-50000)/256;50ms@12MHz

MOVTL0,#(65536-50000)MOD256;

SETBTR0

SETBET0;开启定时中断

SETBEX0

SETBEX1

SETBEA;定时器初始化结束,下面循环显示即可

MOVR1,#99H;0~99计数.

MOVR7,#1;50ms计数.

MOVP0,#0C0H

MOVP2,#0C0H

LOOP:

SJMPLOOP

;-----------------------------------------------------------

DELAY:;延时子程序.

AA4:MOVR4,#0

DJNZR4,$

DJNZR4,$

RET

;-----------------------------------------------------------

X0_INT:;启动/停止

CPLF0

RETI

;-----------------------------------------------------------

X1_INT:;清零

MOVR1,#0

MOVP0,#0C0H

MOVP2,#0C0H

RETI

;-----------------------------------------------------------

T0_INT:;50ms中断执行一次.

MOVTL0,#(65536-50000)MOD256;

MOVTH0,#(65536-50000)/256;50ms@12MHz

DJNZR7,T0_END;中断不到20次.

MOVR7,#20

JNBF0,T0_END

MOVA,R1

ADDA,#1

DAA

MOVR1,A

ANLA,#0FH

MOVDPTR,#TAB

MOVCA,@A+DPTR;查出段码

MOVP2,A

MOVA,R1

SWAPA

ANLA,#0FH

MOVCA,@A+DPTR;查出段码

MOVP0,A;显示十位数.

T0_END:

RETI

;-----------------------------------------------------------

TAB:

DB0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H

;===========================================================

;仿真截图如下:

阅读全文

与单片机多功能秒表相关的资料

热点内容
手机文档解压之后解压包去哪儿了 浏览:923
java中网络编程重要吗 浏览:683
如何登录别人的服务器 浏览:626
调度系统软件python 浏览:205
微信大转盘抽奖源码 浏览:497
压缩机损坏的表现 浏览:862
同步数据服务器怎么用 浏览:634
163邮箱服务器的ip地址 浏览:50
服务器跟域是什么 浏览:128
rails启动命令 浏览:465
logistic命令怎么用 浏览:738
c语言点滴pdf 浏览:747
linuxrtc编程 浏览:258
linux打包并压缩命令 浏览:644
aes加密的证书格式 浏览:99
oracledbcalinux 浏览:844
酬勤任务app怎么被特邀 浏览:199
android应用文件夹 浏览:1002
平面设计法则pdf 浏览:339
3d圆角命令怎么用 浏览:569