51单片机做一个10秒倒计时的程序

51单片机做一个10秒倒计时的程序,第1张

C语言

#include

#define

uint

unsigned

int

#define

uchar

unsigned

char

sbit

p27=P2^7//数码管位选端定义

uchar

c,i

//数码管译码表

unsigned

char

code

NumDecode[]

=

{

0XC0,//0

0XF9,//1

0XA4,//2

0XB0,//3

0X99,//4

0X92,//5

0X82,//6

0XF8,//7

0X80,//8

0X90,//9

}

void

main()

{

i=0//10秒计时设置

c=0//中断次数计数

p27=1//数码管位选端关闭

TMOD=1//设置定时器0为工作方式1

TH0=(65536-46080)/256//定时50ms高8位求模

TL0=(65536-46080)%256//定时50ms低8位求余

EA=1//开总中断

ET0=1//定时器0中断

TR0=1//启动定时器0

while(1)

{

if(c==20)//50ms中断20次

{

c=0

i++//倒计时总数每秒减1

}

if(i<10)

{

p27=0//数码管位选选通

P0=NumDecode[i]//显示数据

}

else

//循环计时设置

{

i=0

}

}

}

void

timer0()

interrupt

1//定时器0中断入口

{

TH0=(65536-46080)/256//定时器重新赋初值

TL0=(65536-46080)%256

c++//中断次数

}

这是一个倒计时案例,你可以参考一下:

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 EA

 MOV R0,#9

 MOV R1,#9

 MOV R2,#0

 MOV R3,#9

 CLR 00H

 CLR 01H

LOOP:

 JB P1.0,LP01

 JNB P1.0,$

 SETB TR0

 CLR 01H

 SJMP LOOP0

LP01:

 JB P1.1,LP02

 JNB P1.1,$

 SETB 01H

 SJMP LOOP0

LP02:

 JB P1.2,LOOP0

 JNB P1.1,$

 CLR TR0

 MOV P3,#0FDH

 MOV P2,#0

 MOV P3,#0FEH

 MOV P2,#0

 SJMP MAIN

LOOP0:

 JB 00H,LOOP1

 MOV A,R0

 SJMP LOOP2

LOOP1:

 MOV A,R1

LOOP2:

 MOV DPTR,#TABLE

 MOVC A,@A+DPTR

 MOV R3,A

 SJMP LOOP

T0ISR:

    CLR TR0

    MOV TH0,#HIGH(65536-10000)

    MOV TL0,#LOW(65536-10000)

    SETB TR0

 JB 01H,T0C

 INC R2

T0C:

 CPL 00H

 MOV A,R3

 JB 00H,T001

 MOV P3,#0FDH

 MOV P2,A

 SJMP T002

T001:

 MOV P3,#0FEH

 MOV P2,A

T002:

 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 TR0

 RETI

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

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

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

END

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std

int is_right(int a[],int k)

{

    int jian_ge=a[1]-a[0]

    int count_num=0

    for(int i=0 i<k-1 i++)

    {

        if(a[i+1]-a[i]==jian_ge)

        {

            count_num++

        }

    }

    return count_num==k-1?true:false

}

int main()

{

    int i

    cin>>i

    vector <char> result

    vector <char> :: iterator it

    for(int j=1 j<=i j++)

    {

        int k

        cin>>k

        int a[k]

        for(int m=0 m<k m++)

        {

            cin>>a[m]

        }

        if(is_right(a,k)==1)

        {

            result.push_back('Y')

        }

        else

        {

            result.push_back('N')

        }

    }

//    reverse(result.begin(),result.end())

    for(it=result.begin() it!=result.end() it++)

    {

        cout<<*it<<endl

    }

    return 0

}


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

原文地址: https://outofmemory.cn/yw/7746406.html

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

发表评论

登录后才能评论

评论列表(0条)

保存