汇编语言 51单片机 倒计时器程序
可以在SJMP $这里改成判断R2是不是为0,如是就重新载入60…如果不是就跳回重新判断R2
这么简单的要求,不用大动干戈。
看看下面的程序,是不是最简单:
ORG 0000H
SETB TR0 ;启动T0
MOV R2, #250 ;定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 ;定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ ;等待8ms
CLR TF0
DJNZ R2, LOOP ;每隔8ms,R2减一次一
CPL P1.0 ;R2为0则LED亮灭转换
LJMP 0000H
END
本程序,已经实验成功。
这是一个倒计时案例,你可以参考一下:
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
你好!几位数码管,最大计时多少
我想用51单片机编个倒计时的c程序,要求用两位数码管显示分钟的,并用一...
在设计倒计时程序时,数码管的1、2口直接悬空或接在一起确实可能存在一些问题,建议合理连接,确保信号传输的稳定。建议使用两个全局变量分别表示个位和十位,这样在显示时可以避免重复计算,简化程序逻辑。编程时,需要设置按键响应中断,控制一个标志变量flag的值。按键可以切换三种状态:正常、暂停、到时间...
51单片机通过使用74HC164实现60秒倒计时电路图如下:该怎么编程序(C语 ...
使用中断计时是实现60秒倒计时的一种有效方法。这种计时方式可以确保精确的时间控制,避免因循环延时造成的误差积累。在实现过程中,可以利用51单片机的定时器中断功能,设置定时器的计数方式和中断模式,以达到每秒减1的效果。在显示方面,可以使用两个端口来控制位选,通过动态扫描的方式逐行点亮数码管。数码...
求C51单片机汇编语言控制两位数码管60秒倒计时的程序,最好能说明下思路...
include <at89x52.h> include <intrins.h> define uchar unsigned char define uint unsigned int define seg P0 define sw P2 int tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};int dis[]={0,0};uint X;uchar Count=0;uchar sec=60;void display(){ int a;int...
c51单片机定时器30秒倒计时程序,一个按键控制开始,另一个按键控制暂停和...
j<120;j++);}void dischg(){disdat[0]=sec\/10;disdat[1]=sec%10;}void t0isr() interrupt 1\/\/秒计时{TH0=0x3c;TL0=0xb0;time++;if(time==20){time=0;if(sec>0 && flag==0)sec--;}dischg();}void t1isr() interrupt 3\/\/显示{TH1=0xec;TL1=0x78;switch(scanled)...
求51单片机24秒倒计时器程序设计
void delay(void);void delay1(void);void main (){ unsigned char i,k;P0=0x00;P2=0x00;delay();P0=0xFF;P2=0xFF;delay();i=0;k=0;while(1){ for(k=0;k<55;k++){ P0=DT[i\/10];COM1=1;COM2=0;delay();P0=DT[i%10];COM1=0;COM2=1;delay();} i++;if(i>24)i...
汇编语言 51单片机 倒计时器程序
ORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN: 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 01HLOOP: JB P1.0,LP01 JNB P1.0,$ SETB TR0 CL...
51单片机试题,写一个用单个数码管显示10秒倒计时的程序,急!!!
TR0 = 1;\/\/定时器0开始计时 } void main(){ Timer0Init()ET0=1; \/\/开启定时器0中断 EA=1;while(1);\/\/等待中断 } void time0(void)interrupt 1 { TL0 = 0x18;\/\/设置定时初值 TH0 = 0xFC;\/\/设置定时初值 if(disp&1=0){ duan=1;P0=dispcode[time%10];duan=0;wei=1;P0=...
51单片机数码管倒计时程序,从999999开始倒计时,用定时器T1的中断...
这个和代码顺序有关系:while (1) { if (flag1s == 1) \/\/判断1秒定时标志 { flag1s = 0; \/\/1秒定时标志清零 sec--; \/\/秒计数自减1【这里是先减一,后面再送显示】 \/\/将sec按十进制位从低到高依次提取到buf数组中 buf[0] = sec%10; buf[1] = ...
求一段10分钟的倒计时C程序,应用在51单片机上
include<reg51.h> define uchar unsigned char uchar cnt1;void initial(void){TMOD=0X01;TR0=1;ET0=1;EA=1;TH0=-(50000\/256);TL0=-(50000%256);} void time0(void) interrupt 1 {TH0=-(50000\/256);TL0=-(50000%256);cnt1++;} void count(void){ if(cnt1==20){cnt1=0;se...
高手帮忙51c单片机——想制作倒计时报警器,求个c程序
刚写的程序,可以通过S0(功能键),S1(加键),S2(减键)设定初值,倒数为00-00-00时蜂鸣器响,通过八位LED显示;include<reg52.h> include<intrins.h> define uchar unsigned char define uint unsigned int uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};\/\/八位位选...