用AT89C51单片机设计一个秒表:00.0~99.9_我的转载资源,共同下载_百度空间

求用单片机设计一个秒表AT89C51
要求1、按开关K1秒表开始计时,再按开关K1计时暂停,按开关K2秒表复位。
    2、如果可以的话顺便发一下电路图
    3、{zh0}是用汇编编写程序
谢谢
悬赏分:100 - 解决时间:2010-5-30 08:33
{zj0}答案:
;--------------------------------------------------------
;说明:为了提高精度,下列给出的程序和电路图,比楼主提出的要求
;      增加了一位0.1秒的计数和显示功能,所以计时范围是00.0~99.9s。
;      想得到以00~99形式计秒的网友,可到原题的网址去看原文。
;--------------------------------------------------------
;汇编程序如下。
;使用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, #0              ;0~99秒计数
        MOV R2, #0              ;0.1秒数
        MOV R7, #1              ;50ms计数

        MOV P0, #0C0H           ;显示00.0
        MOV P2, #0C0H
        mov p1, #0C0H
LOOP:
        SJMP LOOP
;-----------------------------------------------------------
DELAY:                           ;延时子程序.
        MOV R4, #0
        DJNZ R4, $
        DJNZ R4, $
        RET
;-----------------------------------------------------------
X0_INT:                          ;启动/停止
        CPL F0
        RETI
;-----------------------------------------------------------
X1_INT:                          ;清零
        MOV R1, #0
        MOV P0, #0C0H
        MOV P2, #0C0H
        mov p1, #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, #2              ;#20
        JNB F0, T0_END
        mov a, r2
        add a, #1
        da   a
        anl a, #0fh
        mov r2, a
        jnz disp
        MOV A, R1
        ADD A, #1
        DA   A
        MOV R1, A
disp:
        mov a, r2
        anl a, #0fh
        movc a, @a+dptr          ;查出段码
        mov p1, a               ;显示0.1秒
        MOV A, R1
        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
;===========================================================
;PROTEUS仿真截图如下:


图片链接:
;-----------------------------------------------------------
提问者对于答案的评价:非常感谢
原题网址:
;-----------------------------------------------------------

;===========================================================
基于单片机89C51的计时器或秒表
AT89C51单片机秒表程序和电路图要求就是这样的了:
1. 设计中采用的单片机以及显示器件,用AT89C51设计一个2位LED数码显示秒表,有开始,停止,清零就行。
2. 设计实现的基本功能,系统显示时间为00~99秒,每秒自动加1,设计越简单越好。
求电路图和相应的C程序,过程{zh0}能详细些,因为要写实验报告~~希望高手帮忙
悬赏分:50 - 解决时间:2010-6-1 15:51
原题网址:
就是那个秒表问题,你给我的设计,汇编程序能改成C吗?
悬赏分:0 - 解决时间:2010-6-1 18:25
原题网址:
//---------------------------------------------
下面是00-99秒计数的语言C程序。

#include<reg52.h>
#include<intrins.h>
unsigned char i, j;
unsigned char code table[] = {
    0xc0, 0xf9, 0xa4, 0xb0, 0x99,
    0x92, 0x82, 0xf8, 0x80, 0x90
};
bit k;
//---------------------------------------------
void main( )
{
TMOD = 0x01;                       //;T0定时方式1
TH0 = (65536-50000) / 256;         //;50ms@12MHz
TL0 = (65536-50000) % 256;
TR0 = 1;                           //;定时器初始化结束
ET0 = 1;                           //;开启定时中断
EX0 = 1;
EX1 = 1;
EA = 1;
i = 0;
j = 0;
P0 = 0xC0;
P2 = 0xC0;
while(1);
}
//---------------------------------------------
void timer0(void) interrupt 1
{
TL0 = (65536-50000) % 256;
TH0 = (65536-50000) / 256;         //;50ms@12MHz
if (k) {
    j++;
    if (j == 20) {
      j = 0;
      i++;
      if (i == 100) i = 0;
      P0 = table[i / 10];
      P2 = table[i % 10];
    }
}
}
//---------------------------------------------
void x0(void) interrupt 0
{
k = ~k;
}
//---------------------------------------------
void x1(void) interrupt 2
{
i = 0;
j = 0;
P0 = 0xC0;
P2 = 0xC0;
}
//---------------------------------------------
提问者对于答案的评价:谢谢啦



郑重声明:资讯 【用AT89C51单片机设计一个秒表:00.0~99.9_我的转载资源,共同下载_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——