用at89c51实现下面功能:

要求p0口和p2口接数码管,单片机运行过程中,p2口的28引脚输出维持10s的0电平,10s过后,再维持3s的1电平,3s之后再维持0电平不变。数码管上从大到小显示时间的... 要求p0口和p2口接数码管,单片机运行过程中,p2口的28引脚输出维持10s的0电平,10s过后,再维持3s的1电平,3s之后再维持0电平不变。数码管上从大到小显示时间的变化,在p3口17引脚接开关k1,实现清零功能。
本人正在写毕业论文,要用到这个程序,时间有些紧,希望高手帮忙编写一下。在线等啊!编号之后定有重赏。另外,希望大家用c语言编写啊
展开
 我来答
ghost4063
2012-04-02 · TA获得超过6531个赞
知道大有可为答主
回答量:2940
采纳率:75%
帮助的人:3007万
展开全部
#include<reg51.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define DISPLAYPortH P2 //定义数据端口
#define DISPLAYPortL P0 //定义数据端口

sbit OutPutPin = P2^7;
sbit KeyPin = P3^7;

// 显示段码值01234567
unsigned char code ShuZhi[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //对应bit位为0则点亮,最高bit对应小数点

unsigned char pinstatus;
unsigned char timecount1,timecount2;
unsigned char temp;

void Display(unsigned char port,unsigned char num); //函数声明

/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{

timecount1 = 0;
timecount2 = 0;

TMOD = 1;
TH0 = 0x3C;
TL0 = 0xB0;
ET0 = 1;
EA = 1;
TR0 = 1;

OutPutPin = 0;
pinstatus = 0;

while(1);

}

void Display(unsigned char port,unsigned char num)
{
unsigned char numcode;
numcode = ShuZhi[num];
if(port ==0)
{
if(pinstatus)
{
numcode|=0x80;
}
else
{
numcode&=0x7f;
}
DISPLAYPortH = numcode;
}
else
{
DISPLAYPortL = numcode;
}
return;
}

void T0INTERRUPT(void) interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
timecount1++;
if(KeyPin== 0)
{
timecount1 = 0;
timecount2 = 0;
OutPutPin = 0;
pinstatus = 0;
}
if(timecount1>=20)
{
timecount1=0;
timecount2++;
}
switch(timecount2)
{
case 10:
OutPutPin = 1;
pinstatus = 1;
break;
case 13:
OutPutPin = 0;
pinstatus = 0;
timecount2 = 0;
default:break;
}
if(timecount1 == 0)
{
if(timecount2<10)
{
temp = 10-timecount2;
Display(0,temp/10);
temp = 10-timecount2;
Display(1,temp%10);
}
if((timecount2>=10)&&(timecount2<13))
{
Display(0,0);
Display(1,13-timecount2);
}
}
}
更多追问追答
追问
我用你的程序试了下,但数码管不亮,估计是p2口不能两用吧,我现在想把接在p2口28引脚上接线接在p1口8引脚上,可以把你的程序改动一下吗?
追答
sbit OutPutPin	= P1^7;
其实不改也可以啊,两用很正常啊
做而论道
高能答主

2012-04-02 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.2万
采纳率:86%
帮助的人:8811万
展开全部
p2口接数码管,...,p2口的28引脚输出维持10s的0电平
------------
P2口,还是两用的呀?
不能换一个接口吗?
追问
用p1口8引脚可以吗?
追答
可以。

P1,接8个LED,输出10s的0电平、10s过后,再维持3s的1电平,3s之后再维持0电平不变。

P0、P2口接数码管,分别显示十位、个位,从大到小显示时间的变化。

P3.7接开关,实现清零功能。

可否?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萍水e相逢
2012-04-02 · TA获得超过3万个赞
知道大有可为答主
回答量:5.9万
采纳率:46%
帮助的人:1.7亿
展开全部
赞 1 楼!

建议 去 我的领地 5d6d 的 proteus 论坛看看

那里有很多 单片机仿真实例,包括仿真图 和 源码
搜 5d6d 和 proteus 2个关键词
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2012-04-02 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38398
国家科技进步奖

向TA提问 私信TA
展开全部
LED1 EQU P0
LED2 EQU P2
OUTP BIT P2.7

COUNT EQU 30H
CNT0 EQU 31H
CNT EQU 32H
DISL EQU 33H
DISH EQU 34H

TEND BIT 00H ;计时到标志
SBIT BIT 01H ;1S到标志
ORG 0000H

SJMP STA
ORG 000BH
LJMP TIM0
ORG 0050H
STA:
MOV SP,#6FH
MOV TMOD,#01H
MOV TH0,#3CH ;50ms
MOV TL0,#0B0H
SETB ET0
CLR TEND
MOV DISL,#0
MOV DISH,#0
MOV COUNT,#0
MOV CNT,#200 ;10S
CLR OUTP
CLR SBIT
SETB EA
SETB TR0
LOOP1:
JBC,SBIT,STA00
JNB TEND,LOOP1
CLR TEND
SJMP STA01
STA00:
LCALL DISPLAY
SJMP LOOP1
STA01:
MOV CNT,#60 ;3S
CLR OUTP
SETB OUTP
LOOP2:
JNB TEND,LOOP2
CPL OUTP
CLR TEND
SJMP LOOP2
;
TIM0:
PUSH ACC
PUSH PSW
INC COUNT
INC TCNT0
MOV A,CNT0
CJNE A,CNT,TIM01
SETB TEND
MOV CTN0,#0
TIM01:
MOV B,#20
DIV AB
MOV A,B
JNZ TIM0E
SETB SBIT
TIM01E:
POP PSW
POP ACC
RETI
DISPLAY:
MOV A,COUNT
MOV B,#10
DIV AB
MOV DISH,A
MOV DISL,B
MOV DPTR,#LEDTAB
MOV A,DISL
MOVC A,@A+DPTR
MOV P0,A
MOV A,DISH
MOVC A,@A+DPTR
ANL A,#7FH
MOV B,A
MOV A,P2
ORL A,B
MOV P2.A
RET

LEDTAB:
DB 0C0H ;"0" 00H
DB 0F9H ;"1" 01H
DB 0A4H ;"2" 02H
DB 0B0H ;"3" 03H
DB 99H ;"4" 04H
DB 92H ;"5" 05H
DB 82H ;"6" 06H
DB 0F8H ;"7" 07H
DB 80H ;"8" 08H
DB 90H ;"9" 09H
;
END
追问
我在qwe软件中运行有错误啊,兄弟能帮改一下吗?
追答
LED1	EQU P0
LED2 EQU P2
OUTP BIT P2.7
KEY BIT P3.7

COUNT EQU 30H
CNT0 EQU 31H
CNT EQU 32H
DISL EQU 33H
DISH EQU 34H

TEND BIT 00H ;计时到标志
S1BIT BIT 01H ;1S到标志

ORG 0000H

SJMP STA
ORG 000BH
LJMP TIM0
ORG 0050H
STA:
MOV SP,#6FH
MOV TMOD,#01H
MOV TH0,#3CH ;50ms
MOV TL0,#0B0H
SETB ET0
CLR TEND
MOV DISL,#0
MOV DISH,#0
MOV COUNT,#0
MOV CNT,#200 ;10S
CLR OUTP
CLR S1BIT
SETB EA
SETB TR0
LOOP1:
JBC S1BIT,STA00
JNB TEND,LOOP1
CLR TEND
SJMP STA01
STA00:
LCALL DISPLAY
SJMP LOOP1
STA01:
MOV CNT,#60 ;3S
CLR OUTP
SETB OUTP
LOOP2:
LCALL DISPLAY
JB KEY,STA02
MOV COUNT,#0
STA02:
JNB TEND,LOOP2
CPL OUTP
CLR TEND
SJMP LOOP2
;
TIM0:
PUSH ACC
PUSH PSW
INC COUNT
INC CNT0
MOV A,CNT0
CJNE A,CNT,TIM01
SETB TEND
MOV CNT0,#0
TIM01:
MOV B,#20
DIV AB
MOV A,B
JNZ TIM0E
SETB S1BIT
TIM0E:
POP PSW
POP ACC
RETI
DISPLAY:
MOV A,COUNT
MOV B,#10
DIV AB
MOV DISH,A
MOV DISL,B
MOV DPTR,#LEDTAB
MOV A,DISL
MOVC A,@A+DPTR
MOV P0,A
MOV A,DISH
MOVC A,@A+DPTR
ANL A,#7FH
MOV B,A
MOV A,P2
ORL A,B
MOV P2,A
RET

LEDTAB:
DB 0C0H ;"0" 00H
DB 0F9H ;"1" 01H
DB 0A4H ;"2" 02H
DB 0B0H ;"3" 03H
DB 99H ;"4" 04H
DB 92H ;"5" 05H
DB 82H ;"6" 06H
DB 0F8H ;"7" 07H
DB 80H ;"8" 08H
DB 90H ;"9" 09H
;
END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式