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

作者&投稿:储倪 (若有异议请与网页底部的电邮联系)
求单片机程序 简易电子秒表的设计 应用AT89C51单片机的定时器设计一个~

做了一个4位数码管的,可以计时到9分59.9秒
KEYVAL EQU 30HDAT EQU 33HSCANLED EQU 39HCLK EQU 77HSEC EQU 78HSEC1 EQU 79HSEC2 EQU 7AHDOT BIT 00HORG 0000HLJMP MAINORG 0003HLJMP EXTINT0ORG 000BHLJMP T0ISR ;50ms定时ORG 001BHLJMP T1ISR ;扫描显示ORG 0030HMAIN: MOV SP,#5FH MOV TMOD,#11H MOV TH0,#03CH MOV TL0,#0B0H MOV TH1,#0ECH MOV TL1,#078H MOV KEYVAL,#2 MOV 33H,#10H MOV 34H,#10H MOV 35H,#10H MOV 36H,#10H MOV CLK,#0 SETB IT0 SETB EX0 CLR TR0 CLR ET0 MOV R2,#0 SETB TR1 SETB ET1 SETB EALOOP: MOV A,KEYVALLOOP1: JNZ LOOP2 ;启动 SETB TR0 SETB ET0 SJMP LOOPLOOP2: DEC A JNZ LOOP3 ;暂停 CLR TR0 CLR ET0 SJMP LOOPLOOP3: DEC A JNZ LOOP ;清零 MOV 36H,#0 MOV 35H,#0 MOV 34H,#0 MOV 33H,#0 SJMP LOOPEXTINT0: PUSH ACC INC KEYVAL MOV A,KEYVAL CJNE A,#3,EXT00EXT00: JC EXT01 MOV KEYVAL,#0EXT01: POP ACC RETIT0ISR: PUSH ACC CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 INC CLK MOV A,CLK CJNE A,#2,T0ISRE MOV CLK,#0 INC 36H MOV A,36H CJNE A,#10,T0ISRE MOV 36H,#0 INC 35H MOV A,35H CJNE A,#10,T0ISRE MOV 35H,#0 INC 34H MOV A,34H CJNE A,#6,T0ISRE MOV 34H,#0 INC 33H MOV A,33H CJNE A,#10,T0ISRE MOV 33H,#0T0ISRE: POP ACC RETIT1ISR: PUSH ACC CLR TR1 MOV TH1,#0ECH MOV TL1,#78H SETB TR1 MOV DPTR,#LEDTABT100: MOV R0,#DAT MOV A,SCANLED ADD A,R0 MOV R0,A MOV A,SCANLED JNZ T101 MOV P2,#01H SETB DOT SJMP T1DIST101: DEC A JNZ T102 MOV P2,#02H CLR DOT SJMP T1DIST102: DEC A JNZ T103 MOV P2,#04H SETB DOT SJMP T1DIST103: MOV P2,#08H CLR DOTT1DIS: MOV A,@R0 MOVC A,@A+DPTR JNB DOT,T1DIS1 ORL A,#01HT1DIS1: CPL A MOV P0,A INC SCANLED MOV A,SCANLED CJNE A,#4,T1END MOV SCANLED,#0T1END: POP ACC RETILEDTAB: 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

END

P3口都闲着,把三个按纽放在P3口,好写程序。三个按键什么作用?只计秒吗?最大是999.9秒吗?用c语言写吗?问题都不说清楚,就等什么程序?

;汇编程序如下。

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

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

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

        ORG  0000H

        AJMP MAIN

        ORG  0003H

        AJMP X0_INT

        ORG  000BH

        AJMP T0_INT

        ORG  0013H

        AJMP X1_INT

MAIN:

        MOV  TMOD,#01H            ;T0定时方式1

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

        MOV  TL0, #(65536-50000) MOD 256;

        SETB TR0

        SETB ET0                 ;开启定时中断

        SETB EX0

        SETB EX1

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

        MOV  R1, #99H            ;0~99计数.

        MOV  R7, #1              ;50ms计数.

        MOV  P0, #0C0H

        MOV  P2, #0C0H

LOOP:

        SJMP LOOP

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

DELAY:                           ;延时子程序.

AA4:    MOV  R4,  #0

        DJNZ R4,  $

        DJNZ R4,  $

        RET

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

X0_INT:                          ;启动/停止

        CPL  F0

        RETI

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

X1_INT:                          ;清零

        MOV  R1, #0

        MOV  P0, #0C0H

        MOV  P2, #0C0H

        RETI

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

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

        MOV TL0, #(65536-50000) MOD 256;

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

        DJNZ R7, T0_END          ;中断不到20次.

        MOV  R7, #20

        JNB  F0, T0_END

        MOV  A,  R1

        ADD  A,  #1

        DA   A

        MOV  R1, A

        ANL  A,  #0FH

        MOV  DPTR, #TAB

        MOVC A, @A+DPTR          ;查出段码

        MOV  P2, A

        MOV  A,  R1

        SWAP A

        ANL  A,  #0FH

        MOVC A, @A+DPTR          ;查出段码

        MOV  P0, A               ;显示十位数.

T0_END:

        RETI

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

TAB:

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

        END

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

;仿真截图如下:



对不起,我不会用汇编做,所以用c语言编了一个,希望对你有帮助

#include <reg51.h>

#define uchar unsigned char

sbit start=P3^6;

sbit stop=P3^5;

uchar code dulatab[]={0x3f,0x06,0x5b,0x4f,0x66,

       0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //数字编码0-9

uchar code welatab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位控制字

uchar msec,sec,min; 

void delay(uchar time)  //延时

{

 uchar i,j;

 for(i=0;i<time;i++)

 {

  for(j=0;j<110;j++)

  ;

 }

}

void writeled(uchar num,uchar addr)

{  

 //关显示

 P2=0xff;

 //送数据

 P0=dulatab[num];

 //开显示

 P2=welatab[addr];   

 delay(4);  

}

void display(uchar msec,uchar sec,uchar min)

{

 uchar msech,msecl,sech,secl,minh,minl;

 msech=msec/10;

 msecl=msec%10;

 sech=sec/10;

 secl=sec%10;

 minh=min/10;

 minl=min%10;

 writeled(minh,0);

 writeled(minl,1);

 writeled(10,2);

 writeled(sech,3);

 writeled(secl,4);

 writeled(10,5);

 writeled(msech,6);

 writeled(msecl,7);

}

void init()

{

 TMOD=0x10;

 TH1=0xd8;

 TL1=0xf0;

// TR1=1;

 EA=1;

 ET1=1;

}

void keyscan()

{

 if(start==0)

 {

  delay(2);

  if(start==0)

  {

   TR1=~TR1;

   while(start==0)

   {

    display(msec,sec,min); 

   }

  }

 }

 if(stop==0&&TR1==0)

 {

  delay(2);

  if(stop==0)

  {

   msec=0;

   sec=0;

   min=0;

   while(stop==0)

   {

    display(msec,sec,min); 

   }

  }

 }

}

void main()

{

 init();

 while(1)

 {

  display(msec,sec,min);

  keyscan(); 

 }  

}

void timer1() interrupt 3

{

 TH1=0xd8;

 TL1=0xf0;

 msec++;

 if(msec==100)

 {

  msec=0;

  sec++;

  if(sec==60)

  {

   sec=0;

   min++;

   if(min==60)

   {

    min=0;

   } 

  }

 }

 

}




用51单片机设计一个秒表,计时范围从00:00-59:59.
4];void dischg(){disdat[3]=sec%10;disdat[2]=sec\/10;disdat[1]=min%10;disdat[0]=min\/10;}void ext0() interrupt 0{key++;key%=3;}void t0isr() interrupt 1\/\/秒计时{TH0=0x3c;TL0=0xb0;time++;if(time==20){time=0;sec++;if(sec>59){sec=0;min++;if(min>59)...

单片机怎么设计一个0-9的一位数秒表,用定时器实现 c语言程序及其注释...
include<reg52.h> \/\/ 包含51单片机寄存器定义的头文件 unsigned char code Tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};\/\/数码管显示0~9的段码表 unsigned char int_time; \/\/记录中断次数 unsigned char second; \/\/储存秒 \/ 函数功能:快速动态扫描...

利用51单片机,6个数码管设计一秒表。要求:刚开始时间为12点(120000...
define uint unsigned int define show P2 code table[16]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };code tuble[9]= { 0x00,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe };uchar t_h,t_m,t_s;bit KEY=1;sbit wela=...

单片机AT89C51芯片完成简易秒表的设计(三个8字数码管从0~999秒)设置一...
unsigned char key_s, key_v;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, \/\/ 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};\/\/ 4, 5, 6, 7, 8, 9, off unsigned char dis_buf[8]; \/\/ 显示缓冲区 unsigned char sec_bcd[8]; \/\/ 秒计数值, ...

利用单片机内部定时器设计一个秒表,显示最大值为 59.99 秒。
#define K1Pin0#define K2Pin1#define K3Pin2u8 key=0xff;\/\/消抖后的有效按键值u8 key_down=0x00;\/\/按键下降沿扫描结果,1有效u8 key_up=0x00; \/\/上升沿扫描结果,1有效u8 key_sc=0xff;\/\/上次扫描的按键值\/\/按键扫描程序void scanKey(){static u8 temp0;static u8 ms;u8 temp=0;if...

求一个51单片机延时1秒的程序,用汇编!!
DEL1S:MOV R7,#10 D1: MOV R6,#200 D2: MOV R5,#250 DJNZ R5,DJNZ R6,D2 DJNZ R7,D1 RET 说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5 ...

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单片机 秒表设计
\/\/ 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 bai,shi;uint...

51单片机设计一个秒表,用两个数码管(任意相邻的两个)显示。
ORG 0000H JMP BEGIN ORG000BH LJMPT0INT ORG001BH LJMPT1INT LEDDEQU30H LEDCEQU 36H SECCEQU 37H TCNTEQU 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"...

单片机秒表设计
显示部分由于硬件连接状态不明,无法提供程序,有些硬件方案要求一次发送所有的显示内容,这种可以直接参考我下面的部分。有些硬件方案可以分别更改每一位的显示内容,这样可以利用DispFlag的不同位代表不同的显示字符位置,并且在相应计数部分程序中置位,送入主程序显示,当然显示执行完毕后清零相关位是必须...

合肥市17073163470: 帮帮忙吧,谁有单片机秒表的程序设计!急有!要求计时精度为百分之一秒,5键操作,难度很大,必有重谢! -
璩师醋酸: 用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能.能用按键选择以上两功能之一. 三、程序代码: A_BIT EQU 20H ...

合肥市17073163470: 单片机AT89C51芯片完成简易秒表的设计(三个8字数码管从0~999秒)设置一个开始按钮和一个复位按钮,谢了! -
璩师醋酸: #include unsigned char data dis_digit; unsigned char key_s, key_v; unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off unsigned char dis_buf[8]; // 显示缓冲区 unsigned ...

合肥市17073163470: AT89C51单片机设计一个简易秒表? -
璩师醋酸: 定时器10ms中断 检测按键且10ms位加一 若10ms=10,100ms位加一 若10ms=10,1000ms位加一 以此内推 显示最好用LCD的 用数码管的也行 有疑问mail:290765583@163.com

合肥市17073163470: 用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一.另设计一个“开始”按键和一 -
璩师醋酸: 因为分数低,只好给你说我的思路 因为是秒表,当然用定时器,我常用的是定时器0,工作方式1 TMOD=0X01;给一个溢满值3CB020次为一秒 if(counter> 19) {second++;conunter= 0;} 而后,动态显示,懂吧,用调用延迟 然后快加,每10ms快速加1,关了定时器0,换定时器1?至于暂停,也是一个中断吧,保持现状,就是变量值不改变,而后当然调用显示函数.再按下按键跳出循环.不知道行不行,参考而已

合肥市17073163470: 设计要求用AT89C51设计一个2位的LED数码显示作为“秒表”用C语言编写 -
璩师醋酸: #include#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;unsigned char j,k,c1,c0,m,n=255;unsigned char pp;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(...

合肥市17073163470: 单片机计时器
璩师醋酸: //1:用AT89C51单片机的定时/计数器T0产生一秒的 //定时时间,作为秒计数时间,当一秒产生时,秒 //计数加1,秒计数到60时,自动从0开始.单片机 //晶振频率为12MHZ //由于是刚刚注册,积分没有多少,请大家帮个忙,谢谢! #include&lt;...

合肥市17073163470: 用C语言编写AT89C51单片机程序,设计一个智能数字钟. -
璩师醋酸: 基本要求:1.C语言程序要求是模块化设计.2.该闹钟基于AT89C51单片机及相关外围电路进行设计.3.该闹钟有6个数码管(共阳极),可分别显示时间(时、分、秒)、及定时时间(分、秒).4.该闹钟有4个按钮,S1是切换显示按键,该键按下时可分别实现切换正常走时显示、设定走时显示、设置定时时间,启动定时,回到正常状态等功能.S2是设定键,即该键按下,将分别选中需要设定的选项.S3键是加键,即按下去表示相应选项加1.S4键是减键,即按下去表示相应的选项减1.5.该闹钟可以定时时间到,LED将发出提示闪光,且持续30s.发挥要求:1.定时时间可被打断,即打断后恢复时继续计时.2.设置闹钟报警功能;3.能切换显示年月日等信息.

合肥市17073163470: 用at89c51单片机做一个秒表计时器 -
璩师醋酸: 参考一下:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/295f9639bccb7c2f96ddd86f.html

合肥市17073163470: 基于单片机89C51的计时器或秒表 -
璩师醋酸: 到我的空间,看“用AT89C51单片机设计一个秒表:00.0~99.9”,即可. 其中,也有“00~99秒”的内容,在后面的链接上.

合肥市17073163470: 用keiluVision5 AT89C5110秒秒表编程 -
璩师醋酸: 这是一个秒表,有按键实现 启动、暂停核清零功能.#include <reg51.H> sbit P3_5 =P3^5; unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00}; unsigned char second; ...

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