ORG 0000H
LJMP MAIN
ORG 0003H ;外部中断0的入口地址
LJMP L3
ORG 000BH
LJMP SHI
ORG 0013H ;外部中断1的入口地址
LJMP FEN
ORG 001BH
LJMP L1 ;先把堆栈设为5FH开始
MAIN: MOV SP,#5FH ;用定时器0的方式2来记数,定时器1的方式1来定时
MOV TMOD,#16H ;把T0的高八位和低八位分别都赋值为255
MOV TH0,#255
MOV TL0,#255 ;把T1的高八位赋值为3CH
MOV TH1,#3CH ;把低八位赋值为B0H
MOV TL1,#0B0H
MOV R4,#00H
MOV R5,#00H
MOV R6,#00H
SETB EA ;把中断允许总开关打开
CLR EX0 ;禁止外部中断0中断
CLR EX1 ;禁止外部中断1中断
SETB IT0 ;设外部中断0的触发方式为边沿触发方式
SETB IT1 ;设外部中断1的触发方式为边沿触发方式
CLR ET0 ;禁止T1中断
SETB TR0 ;启动定时计数器0工作
SETB TR1 ;启动定时计数器1工作
SETB ET1
MOV R7,#20
LOOP:
MOV A,R4
MOV B,#10
DIV AB
MOV DPTR,#0300H
MOVC A,@A+DPTR ; 查表指令
MOV P0,A
MOV P1,#01H
LCALL DELAY ;调用延时子程序
MOV P0,#0FFH
MOV A,B
MOVC A,@A+DPTR
MOV P1,#02H
MOV P0,A
LCALL DELAY
MOV P0,#0FFH
MOV P2,#0FFH
JNB P20,INN0
MOV P1,#04H
MOV P0,#0F6H
LCALL DELAY
MOV P0,#0FFH
MOV A,R5
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,#08H
MOV P0,A
MOV P1,#08H
LCALL DELAY
MOV P0,#0FFH
MOV P2,#0FFH
JNB P20,INN0
MOV A,B
MOVC A,@A+DPTR
MOV P1,#10H
MOV P0,A
LCALL DELAY
MOV P0,#0FFH
MOV P1,#20H
MOV P0,#0F6H
LCALL DELAY
MOV P0,#0FFH
MOV P2,#0FFH
JNB P20,INN0
MOV A,R6
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,#40H
MOV P0,A
LCALL DELAY
MOV P0,#0FFH
MOV A,B
MOVC A,@A+DPTR
MOV P1,#80H
MOV P0,A
LCALL DELAY
MOV P0,#0FFH
MOV P2,#0FFH
JNB P20,INN0
LJMP LOOP
INN0: CPL ET0
CPL ET1
CPL EX0
CPL EX1
LJMP LOOP
ORG 0100H
L1: PUSH A
MOV TH1,#3CH
MOV TL1,#0B0H
DJNZ R7,LP
MOV R7,#20
INC R4
MOV A,R4
CJNE A,#60,LP
MOV R4,#00H
INC R5
MOV A,R5
CJNE A,#60,LP
MOV R5,#00H
INC R6
MOV A,R6
CJNE A,#12,LP
MOV R6,#00H
LP: POP A
RETI ;中断返回
DELAY: MOV R3,#10
L2: MOV R2,#100
DJNZ R2,$
DJNZ R3,L2 ;延时子程序返回
RET
ORG 0200H
L3: CLR EA
INC R4
MOV A,R4
CJNE A,#60,MIA
MOV R4,#00H
MIA: SETB EA
RETI
FEN: CLR EA
INC R5
MOV A,R5
CJNE A,#60,FE
MOV R5,#00H
FE: SETB EA
RETI
SHI: CLR EA
INC R6
MOV A,R6
CJNE A,#24,SH
MOV R6,#00H
SH: SETB EA
RETI
ORG 0300H
TAB: DB 0C0H,0F9H,0A4H, 0B0H,99H,92H,82H,0F8H,80H,90H ;共阳的
END
#include<reg51h>
#include<intrinsh>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,dat,time;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
void t1isr() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time++;
if(time%2)P1=_crol_(P1,1);
if(time%4)dat++;
dat%=100;
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time=0;
dat=0;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
P1=0xfe;
while(1);
}
道闸遥控器的重新匹配步骤:
步骤一、 拷贝前先清零 *** 作:同时按住道闸遥控器上面的两个按键,直到道闸遥控器上的LED灯闪烁然后熄灭,这时候才可以松开双手,否则我们的清码工作是无效的。
步骤二、 测试空码:同样的同时按下道闸遥控器2个按键,如果道闸遥控器上面的LED灯亮一下后熄灭,表示空码,然后我们就可以按任意键进行下一步 *** 作了。
步骤三、 正确放置:将拷贝与被拷贝的道闸遥控器并排放置在桌面,越近越好,最好不要头对头,以免影响道闸遥控器的性能!
步骤四、 拷贝:用右手按下道闸遥控器上的关锁键不松手,见到LED灯点亮下后熄灭,示意已进入拷贝状态,用左手快速按下被拷贝道闸遥控器的关锁按键,见LED灯快闪则拷贝成功,多个按键拷贝方法相同。
步骤五、 恢复:同时按下道闸遥控器上的两个键,见LED灯点亮下再熄灭,不松手直到LED灯闪烁为止。恢复只是要清零后 *** 作才有效。
以上就是关于数字钟的单片机课程设计 内核AT80C51,能显示 时 分 秒,用led数码管显示,自动清零,具有校验功能。急!全部的内容,包括:数字钟的单片机课程设计 内核AT80C51,能显示 时 分 秒,用led数码管显示,自动清零,具有校验功能。急!、51单片机 利用定时器1控制LED灯每隔100ms亮一个,并且数码管上的数每隔200ms加1,加到100后清零、道闸门摇控清零怎么开等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)