设计一个由51单片机控制的0到五秒的程序延时程序!再加个数码管显示延时的秒数。可以循环的。
开始按下时,显示零秒,p1.0一直输出高。再按一下。显示1,.p1.0灯亮一秒,灭一秒循环,再按一下,p1.0灯亮两秒,灭两秒循环。。。。再按一下,p1.0灯亮五秒,灭五...
开始按下时,显示零秒,p1.0一直输出高。再按一下。显示1,.p1.0灯亮一秒,灭一秒循环,再按一下,p1.0灯亮两秒,灭两秒循环。。。。再按一下,p1.0灯亮五秒,灭五秒循环!要求共阳的。共阳的比较亮。谢谢了
展开
2个回答
展开全部
开始按下时,显示零秒,p1.0一直输出高。再按一下。显示1,.p1.0灯亮一秒,
----
应该从没有按,就开始显示零秒。
;使用 11.0592MHz,程序如下。
LED BIT P1.0
KEY BIT P1.7
ORG 0000H
SJMP START
ORG 000BH
MOV TH0, #4CH
SETB F0
RETI
;--------------------------------------
START:
MOV TMOD, #01H
MOV TH0, #4CH
MOV TL0, #00H ;50ms@11.0592MHz
SETB TR0
MOV IE, #82H
;--------------------------------------
M_LOOP:
MOV R2, #0
LP0:MOV A, R2
ADD A, #(TAB - $ - 3)
MOVC A, @A + PC
MOV P2, A
MOV P0, A
MOV A, R2
MOV B, #20
MUL AB
LP1:MOV R3, A
LP2:CJNE R2, #0, LP3
SETB LED ;LED 在P1.0
JZ K_I
LP3:JNB F0, K_I
CLR F0
DJNZ R3, LP2
CPL LED ;LED 在P1.0
SJMP LP1
K_I:JB KEY, LP2 ;按键在P1.7
MOV R6, #10
DJNZ R7, $
DJNZ R6, $ - 2
JB KEY, LP2
JNB KEY, $
INC R2
CJNE R2, #6, LP0
SJMP M_LOOP
;--------------------------------------
TAB:
;共阳段码
DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H
DB 080H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH
END
----
应该从没有按,就开始显示零秒。
;使用 11.0592MHz,程序如下。
LED BIT P1.0
KEY BIT P1.7
ORG 0000H
SJMP START
ORG 000BH
MOV TH0, #4CH
SETB F0
RETI
;--------------------------------------
START:
MOV TMOD, #01H
MOV TH0, #4CH
MOV TL0, #00H ;50ms@11.0592MHz
SETB TR0
MOV IE, #82H
;--------------------------------------
M_LOOP:
MOV R2, #0
LP0:MOV A, R2
ADD A, #(TAB - $ - 3)
MOVC A, @A + PC
MOV P2, A
MOV P0, A
MOV A, R2
MOV B, #20
MUL AB
LP1:MOV R3, A
LP2:CJNE R2, #0, LP3
SETB LED ;LED 在P1.0
JZ K_I
LP3:JNB F0, K_I
CLR F0
DJNZ R3, LP2
CPL LED ;LED 在P1.0
SJMP LP1
K_I:JB KEY, LP2 ;按键在P1.7
MOV R6, #10
DJNZ R7, $
DJNZ R6, $ - 2
JB KEY, LP2
JNB KEY, $
INC R2
CJNE R2, #6, LP0
SJMP M_LOOP
;--------------------------------------
TAB:
;共阳段码
DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H
DB 080H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH
END
更多追问追答
追问
能加你扣号吗?想和你交个朋友?怎么p0口还有共阴的输出
追答
没有共阴的输出。
P0、P2,都可以接共阳的数码管。
P0 的驱动能力强一些,会更亮一些。
51 单片机的程序,无论汇编或 C,都应该用 Keil 软件来编译。
楼主怎么了,竟然用上了 VC++ 6.0 ?
展开全部
#include <reg52.h>
#define uchar unsigned char
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
sbit s1=P1^7;
sbit led=P1^0;
uchar m=0;
uchar model=0;
uchar sec=0;
uchar t=0;
void main()
{
TMOD=0x01;
TH0=(65536-50000)%256;
TL0=(65536-50000)/256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(s1==0)
{
while(s1==0);
m++;
switch(m)
{
case 1:{model=1;sec=0;}break;
case 2:{model=2;sec=0;}break;
case 3:{model=3;sec=0;}break;
case 4:{model=4;sec=0;}break;
case 5:{model=5;sec=0;}break;
case 6:{model=0;m=0;}break;
}
}
if(model==0)
{led=1;P2=table[0];}
if(model==1)
{
if(sec%2==0)
{led=0;P2=table[0];}
if(sec%2!=0)
{led=1;P2=table[1];}
}
if(model==2)
{
if(sec<2)
{led=0;P2=table[sec];}
if(sec>=2)
{led=1;P2=table[sec];}
if(sec==4)
{sec=0;}
}
if(model==3)
{
if(sec<3)
{led=0;P2=table[sec];}
if(sec>=3)
{led=1;P2=table[sec];}
if(sec==6)
{sec=0;}
}
if(model==4)
{
if(sec<4)
{led=0;P2=table[sec];}
if(sec>=4)
{led=1;P2=table[sec];}
if(sec==8)
{sec=0;}
}
if(model==5)
{
if(sec<5)
{led=0;P2=table[sec];}
if(sec>=5)
{led=1;P2=table[sec];}
if(sec==10)
{sec=0;}
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)%256;
TL0=(65536-50000)/256;
t++;
if(t==20)
{t=0;sec++;}
}
#define uchar unsigned char
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
sbit s1=P1^7;
sbit led=P1^0;
uchar m=0;
uchar model=0;
uchar sec=0;
uchar t=0;
void main()
{
TMOD=0x01;
TH0=(65536-50000)%256;
TL0=(65536-50000)/256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(s1==0)
{
while(s1==0);
m++;
switch(m)
{
case 1:{model=1;sec=0;}break;
case 2:{model=2;sec=0;}break;
case 3:{model=3;sec=0;}break;
case 4:{model=4;sec=0;}break;
case 5:{model=5;sec=0;}break;
case 6:{model=0;m=0;}break;
}
}
if(model==0)
{led=1;P2=table[0];}
if(model==1)
{
if(sec%2==0)
{led=0;P2=table[0];}
if(sec%2!=0)
{led=1;P2=table[1];}
}
if(model==2)
{
if(sec<2)
{led=0;P2=table[sec];}
if(sec>=2)
{led=1;P2=table[sec];}
if(sec==4)
{sec=0;}
}
if(model==3)
{
if(sec<3)
{led=0;P2=table[sec];}
if(sec>=3)
{led=1;P2=table[sec];}
if(sec==6)
{sec=0;}
}
if(model==4)
{
if(sec<4)
{led=0;P2=table[sec];}
if(sec>=4)
{led=1;P2=table[sec];}
if(sec==8)
{sec=0;}
}
if(model==5)
{
if(sec<5)
{led=0;P2=table[sec];}
if(sec>=5)
{led=1;P2=table[sec];}
if(sec==10)
{sec=0;}
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)%256;
TL0=(65536-50000)/256;
t++;
if(t==20)
{t=0;sec++;}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询