写程序,99秒倒计时,按下按键停止,流水灯开始点亮,再次按下后流水灯停止,倒计时继续

写程序,99秒倒计时,按下按键停止,流水灯开始点亮,再次按下后流水灯停止,倒计时继续,第1张

你可以简单地认为单片机只能输出5v或者0v的电压 分别对应1和0,那么led灯的另一端接地或者接5v,如果你 的单片机输出5v接到led灯,led灯另一端接地 , 那就产生电压了,电路就导通了,灯就亮了 ,反之也是这个道理。时间方面可以写大致的延时,或者用定时器,这样就比较精确了,你学会了这个就可以说入门了。

#include<reg51h>

#define LEDData P0

unsigned char code LEDCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char time=99;

unsigned char second,count,count1; //秒,计数器

sbit LEDH = P2^6; //高位阴极

sbit LEDL = P2^7; //低位阴极

sbit buzzer = P2^5; //蜂鸣器

sbit Alam=P3^6;

bit Over = 0; //倒计时到0标志

void Delay5ms(void)

{

unsigned int i;

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

}

void DisplayTime(void)

{

LEDData=LEDCode[second/10];

LEDH=0;

Delay5ms();

LEDH=1;

LEDData=LEDCode[second%10];

LEDL=0;

Delay5ms();

LEDL=1;

}

//主函数

void main(void)

{

TMOD=0x11; //两个8为计数器

TL0=0xb0; //两个8位定时计数器

TH0=0x3c; //两个8位定时计时器

TL1=0xb0; //作计数器

TH1=0x3c; //作寄存器

second=time;

EA=1; //总中断打开

ET0=1; //定时器0中断打开

ET1=1; //定时器1中断打开

TR0=0; //定时器0开关关闭

TR1=0; //定时器1开关关闭

EX0=1; //外部中断0开

IT0=1; //边沿触发

IT1=1; //边沿触发

EX1=1; //外部中断1开

PX0=1; //外部中断0为高优先级控制位

PX1=1; //外部中断1为高优先级控制位

PT0=0; //定时/ 计数器T0为低优先级中断

while(1)

{

DisplayTime();

if(Over){

buzzer();/延时一会儿buzzer();延时一会儿buzzer();延时一会儿

}

}

}

void PxInt0(void) interrupt 0

{

if(Over==1)

{

second=time;

Over=0;

TR1=0; //定时器1开关关闭

Alam=1;

TH1=0x3C; //作寄存器

TL1=0xB0; //作计时器

}

else

{

second=second;

}

TR0=1; //--------------开启计时器

}

void PxInt1(void) interrupt 2

{

TR0=0; //--------------关闭计时器

}

//中断服务函数

void time0_int(void) interrupt 1

{

TL0=0xb0; //计时器

TH0=0x3c; //寄存器

TR0=1; //开启计时器

count++;

if(count==20)

{

count=0;

second--;

if(second==0)

{

second=0;

Over=1;

TR0=0; //定时器0关闭

TR1=1; //定时器1打开

}

}

}

//中断服务函数

void time1_int(void) interrupt 3

{

TL1=0xb0; //计时器

TH1=0x3c; //寄存器

TR1=1; //定时器1打开

count1++;

if(count1==10)

{

count1=0;

Alam=~Alam;

buzzer();调用响一声函数

}

}

//响一声函数

void buzzer(void)

unsigned int b,c;

for(b=60;b>0;b--)

{ for(c=3;c>0;c--)

buzzer=!buzzer //将蜂鸣器控制端取反

}

99秒倒数的 楼主看行不

在写 很麻烦的

#include <reg51h>

unsigned char table[]={0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0};

unsigned char int_time ;

unsigned char second;

void delay(void)

{

unsigned char i,j;

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

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

}

void DisplaySecond(unsigned char k)

{

P2=0xf7;

P0=table[k/10];

delay();

P2=0xfb;

P0=table[k%10];

delay();

P2=0xff;

}

void main(void)

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

int_time=0;

second=0;

while(1)

{

DisplaySecond(second);

}

}

void interserve(void ) interrupt 1

{

TR0=0;

int_time++;

if(int_time==20)

{

int_time=0;

second++;

if(second==99)

second=0;

}

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

}

这是99秒倒计时汇编程序:

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 P10,LP01

JNB P10,$

SETB TR0

CLR 01H

SJMP LOOP0

LP01:

JB P11,LP02

JNB P11,$

SETB 01H

SJMP LOOP0

LP02:

JB P12,LOOP0

JNB P11,$

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 <dosh>

#include <stdioh>

#include "Windowsh"

void main(void)

{

for (int i=99; i>0; i--)

{

printf("The remnants seconds:%d s\n", i);

Sleep(1000);

}

}

以上就是关于写程序,99秒倒计时,按下按键停止,流水灯开始点亮,再次按下后流水灯停止,倒计时继续全部的内容,包括:写程序,99秒倒计时,按下按键停止,流水灯开始点亮,再次按下后流水灯停止,倒计时继续、用单片机AT89S51做的99秒倒计时怎样加上“滴滴”声。、基于51单片机控制的9999秒倒计时器的设计,程序怎样做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存