导航:首页 > 操作系统 > 单片机秒表推荐

单片机秒表推荐

发布时间:2024-07-01 21:30:12

① 用51单片机制作倒计时秒表需要什么元件,麻烦列个清单。新手刚刚开始学

至少需要:
1、单片机--1
2、30p电容--2
3、12M晶振--1
4、10u电容--1
5、8.2K电阻--1
6、按钮开关--1
7、数码管组--1(4个数码管)
8、8电阻排--1
9、辅料(导线、焊锡等)

② 求用单片机设计一个秒表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

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

;仿真截图如下:

③ 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下每50秒产生中断,执行该中断函数
//形式参数:无
//返回值:无
void timer_1() interrupt 3 //T1的中断类型号为3
{
TH1=(65536-50000)/256; //重新设置T1计数初值高8位
TL1=(65536-50000)%256; //重新设置T1计数初值低8位
count++; //50ms计数器加1
if(count==20) //1s时间到
{
count=0; //50ms计数器清0
miao++; //秒计数器加1
if(miao==100)miao=0; //miao计数到100,则从0开始计数
}
}

bit b=0;
void int_0() interrupt 0
{
if(b == 0){TR1 = 0;b = 1;}
else
{
b = 0;
TR1 = 1;
}
}

void int_1() interrupt 2
{
miao=0;
count = 0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
}

//函数名:disp
//函数功能:将i的值显示在两个静态连接的数码管上
//形式参数:i,取值范围0~99
//返回值:无
void disp(uchar i)
{
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定义0~9显示码,共阳极数码管
P1=led[i/10]; //显示i高位
P2=led[i%10]; //显示i地位
}
void main()
{
TMOD=0x10;//设置T1在工作方式1
TH1=(65536-50000)/256;//设置T1计数初值高8位,定时时间50ms
TL1=(65536-50000)%256;//设置T1计数初值低8位
ET1=1;//开放T1中断允许
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1=1;
EA=1;//开放总中断允许
TR1=1;//启动T1开始计时
while(1)
{
disp(miao);//显示秒计数器值
}
}

④ 利用51单片机设计一个秒表

刚做的一个现实最小是0.1秒的,给你参考吧,0.01的也做过不过已经删除了,因为最后一位现实出来几乎都看不清楚,变化太快了。

#include<reg51.h>

#define uchar unsigned char

uchar ledtab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xfe,0x3e,0x9c,0x7a,0x9e,0x8e,0x00};

uchar keyval,dat,scanled,clk;

uchar disdat[4];

void ext0(void) interrupt 0

{

keyval++;

keyval%=3;

}

void t0isr(void) interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

clk++;

if(clk>1)

{

clk=0;

disdat[3]++;

if(disdat[3]>9)

{

disdat[3]=0;

disdat[2]++;

if(disdat[2]>9)

{

disdat[2]=0;

disdat[1]++;

if(disdat[1]>9)

{

disdat[1]=0;

disdat[0]++;

if(disdat[0]>9)disdat[0]=0;

}

}

}

}

}

void t1isr(void) interrupt 3

{

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;

P2=0x01<<scanled;

dat=ledtab[disdat[scanled]];

if((scanled==0)||(scanled==2))dat|=0x01;

P0=~dat;

scanled++;

scanled%=4;

}


main()

{

uchar i;

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;

keyval=2;

scanled=0;

clk=0;

IT0=1;

EX0=1;

ET0=1;

TR1=1;

ET1=1;

EA=1;

while(1)

{

switch(keyval)

{

case 0:TR0=1;break;

case 1:TR0=0;break;

case 2:for(i=0;i<4;i++)disdat[i]=0;break;

default:break;

}

}

}

⑤ 单片机 按键秒表

秒表的设计程序
用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

⑥ 利用51单片机设计一个秒表 (一定要按要求做到0.01秒)

最低位,是0.01s 变化一次,一秒钟,变化 100 次。

这么快,人的眼睛,分辨不出来。

只能看到一个 8。


停止时,才能看到稳定的数字。

程序如下:

#include<reg52.h>

sbit P3_5 =P3^5;

unsigned char counet, m[4] = {0,0,0,0};

void display()

{

unsigned char code Tab[] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char code Bit[] = {8, 4, 2, 1};

unsigned char i, j;

for (i = 0; i < 4; i++) {

P0 = Tab[m[i]]; if (i == 2) P0 &= 127;

P2 = Bit[i]; for(; j > 0; j++); P2 = 0;

}

}

void wait_key()

{

while( P3_5) display();

while(!P3_5) display();

}

main()

{

TMOD = 0x02;

IE = 0x82;

while(1) {

wait_key(); TR0 = 1; TH0 = TL0 = 6;

wait_key(); TR0 = 0;

wait_key(); m[0] = m[1] = m[2] = m[3] = 0;

}

}

void time0() interrupt 1

{

counet++;

counet %= 40;

if(!counet) {

m[0]++; m[0] %= 10;

if(!m[0]) {

m[1]++; m[1] %= 10;

if(!m[1]) {

m[2]++; m[2] %= 10;

if(!m[2]) {

m[3]++; m[3] %= 10;

}}}}

}

⑦ 单片机秒表设计

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

阅读全文

与单片机秒表推荐相关的资料

热点内容
linux的帮助命令 浏览:534
一个服务器都有什么玩 浏览:870
加密挖掘导致欧洲的时钟运行缓慢 浏览:831
如何只使用手机让手机识别nfc加密卡 浏览:489
我的世界yw服务器怎么进服 浏览:832
格力年报pdf 浏览:710
单片机的节能原理 浏览:603
cmd怎么登录以太网服务器 浏览:768
java设计模式百度 浏览:380
手机卡片加密如何解除 浏览:193
软件加密技术下载 浏览:764
福昕pdf阅读器forandroid 浏览:591
linuxphp54安装教程 浏览:49
云服务器上云文档 浏览:516
如何凭图片找到app 浏览:46
买房人解压后多久能过户 浏览:272
java异或符号 浏览:778
android建立服务器 浏览:882
招商银行app是怎么绑定银行卡 浏览:591
自制云终端服务器 浏览:699