STC单片机的秒表设计c语言怎么写,要求第一次按下STOP开始计时,当再次按下STOP时,秒表为计

STC单片机的秒表设计c语言怎么写,要求第一次按下STOP开始计时,当再次按下STOP时,秒表为计,第1张

STOP按下一次K++;

if(CLEAR==0) {K=0;T=0;} 这个要写在计时器中断程序里

if(K==0)不计时

if(K==1)启动计时器开始计时 设计时时间为T

if(K==2)计数器停止计时 这三行写在主程序死循环里

再加上显示程序就可以了

#include<reg51h>

#define uschar unsigned char

#define usint unsigned int

uschar code table[]={0x3f,0x06,0x5b,0x4f,

                     0x66,0x6d,0x7d,0x07,

                     0x7f,0x6f,0x77,0x7c,

                     0x39,0x5e,0x79,0x71};//0-f

uschar code tab[]={0xfe,0xfd,0xfb};//1-3

sbit wele=P2^7;

sbit dule=P2^6;

usint t;

uschar a,b,c,i,j,n;

void init();

void display(usint x);

void delay(uschar z);

void main()

{

    init();

    while(1)

    {

        a=t/100;

        b=t%100/10;

        c=t%10;

        

        wele=1;

        P0=tab[0];

        wele=0;

        dule=1;

        P0=table[a];//10s

        delay(5);

        

        wele=1;

        P0=tab[1];

        wele=0;

        dule=1;

        P0=table[b];//1s

        delay(5);

        wele=1;

        P0=tab[2];

        wele=0;

        dule=1;

        P0=table[c];//100ms

        delay(5);

    }

}

void init()

{

    a=0;

    b=0;

    c=0;

    n=0;

    t=0;

    TMOD=0x01;

    TH0=(65535-46080)/256;

    TL0=(65535-46080)%256;//110592M 50ms

    EA=1;

    ET0=1;

    TR0=1; 

}

void timer0() interrupt 1

{

    TH0=(65535-46080)/256;

    TL0=(65535-46080)%256;

    n++;

    if(n==2)

    {

        n=0;

        t++;

        if(t==600)

            t=0;

    }

}

void delay(uschar z)

{

    for(i=z;i>0;i--)

        for(j=110;j>0;j--);

}

方法:首先:要学会数码管的显示程序

然后:按键的 *** 作,注意软件的消抖(具体的是延时,10ms左右)。

假设有k1~停表,k2~复位,k3~继续运行

先说停表和继续运行的

停表:如果k1按下,TR0=0;

继续运行:如果k3按下,TR0=1;

复位:直接用硬件复位单片机或者k2按下,数据清零。

要实现数据的循环:只要定时器计数到最大值时,再把最小值赋给它!

以下程序使用定时器1计数,定时10ms,60H为妙计数单元,4FH单元为秒标示位,一秒时间到,置位4FH ORG 0000H ;程序从0地址开始

LJMP MAIN ;跳到STRAT处执行

ORG 001BH

LJMP JIA1

ORG 0030H

MAIN:MOV TMOD,#01H ;设置T1工作在模式1

MOV TH1,#068H ;赋初值,定时10ms

MOV TL1,#0F0H

MOV IE,#88H ;开CPU中断,开定时器1中断

SETB TR1 ;启动T1定时器工作

MOV 60H,#100 ;给60H单元赋初值

CLR 4FH ;清零4FH单元

DISPLAY: ;显示子程序

MOV DPTR,#TAB ;DPTR指向编码表位置

MOV A,R3 ;将R3的内容复制到A

MOV B,#10

DIV AB ;A除B,商给A,余数给B

MOVC A,@A+DPTR ;根据A的值取出编码表中的编码

MOV P1,A ;由P1口输出A的内容

SETB P20 ;置位P20

CLR P20 ;清零P20

MOV A,B

MOVC A,@A+DPTR ;根据A的值取出编码表中的编码

MOV P1,A ;由P1口输出A的内容

SETB P21 ;置位P21

CLR P21 ;清零P21

JNB 4FH,DISPLAY ;判断1秒时间是否到,没有到,则跳转到DIAPLAY处

CLR 4FH ;1秒到,清4FH

LJMP DISPLAY ;调用显示子程序 JIA1:MOV TH1,#068H ;赋初值

MOV TL1,#0F0H

DJNZ 60H,TT ;60H单元自减1,判断是否为0,不为0则跳转到TT处

MOV 60H,#100 ;60H单元为0,则重新给其赋值100

SETB 4FH ;同时置位4FH单元

INC R3 ;R3自加1

CJNE R3,#60,TT ;判断R3是否为60,否则跳转TT处

MOV R3,#0 ;R3为60,则给R3赋0

TT:RETITAB: ;编码表

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;编码

END ;程序结束

K1 EQU P10

K2 EQU P11

K3 EQU P12

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

MOV TMOD,#01H

MOV TH0,#HIGH(65536-10000)

MOV TL0,#LOW(65536-10000)

SETB ET0

SETB TR0

SETB EA

MOV R0,#9

MOV R1,#9

MOV R2,#0

MOV R3,#99

CLR 00H

CLR 01H

LOOP:

JB K1,LP01

JNB K1,$

CLR 01H

INC R3

CJNE R3,#100,LOOP0

MOV R3,#0

SJMP LOOP0

LP01:

JB K2,LP02

JNB K2,$

CLR 01H

CJNE R3,#0,LP011

MOV R3,#99

SJMP LOOP0

LP011:

DEC R3

SJMP LOOP0

LP02:

JB K3,LOOP

JNB K3,$

SETB 01H

SJMP LOOP

LOOP0:

MOV A,R3

MOV B,#10

DIV AB

MOV R0,B

MOV R1,A

SJMP LOOP

T0ISR:

CLR TR0

MOV TH0,#HIGH(65536-10000)

MOV TL0,#LOW(65536-10000)

SETB TR0

MOV DPTR,#TABLE

T0C:

CPL 00H

JB 00H,T001

MOV P3,#0FDH

MOV A,R1

MOVC A,@A+DPTR

MOV P2,A

SJMP T002

T001:

MOV P3,#0FEH

MOV A,R0

MOVC A,@A+DPTR

MOV P2,A

T002:

JNB 01H,T0E

INC R2

MOV A,R2

CJNE A,#100,T0E

MOV R2,#0

MOV A,R0

JZ T003

DEC R0

SJMP T0E

T003:

MOV A,R1

JZ T004

DEC R1

MOV R0,#9

T0E:

RETI

T004:

CLR 01H

MOV R4,#16

T005:

CPL P00

LCALL DELAY

DJNZ R4,T005

RETI

DELAY:

MOV R6,#200

DLY:

MOV R7,#250

DJNZ R7,$

DJNZ R6,DLY

RET

TABLE: ; 共阴极数码管显示代码表

DB 3FH,06H,5BH,4FH,66H ;01234

DB 6DH,7DH,07H,7FH,6FH ;56789

END

以上就是关于STC单片机的秒表设计c语言怎么写,要求第一次按下STOP开始计时,当再次按下STOP时,秒表为计全部的内容,包括:STC单片机的秒表设计c语言怎么写,要求第一次按下STOP开始计时,当再次按下STOP时,秒表为计、跪求各位大神给我写一个51单片机电子秒表的程序、51单片机的定时器程序,c语言编写,使用内部定时器设计一个三位秒表 (秒,十秒,分),显示秒位的变动,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9377177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存