黄金会员
主题
回帖0
积分7991
阅读权限40
注册时间2012-3-20
最后登录1970-1-1
在线时间 小时
|
本帖最后由 静夜思月晖 于 2013-1-24 23:13 编辑
问题是你的那个对于键盘的判断是一次性的,或者说是单次执行的,必须用while语句才能达到条件满足一直执行的目的,还需要用标志位,给你一个我自己写的程序#include<reg52.h>
#define uchar unsigned char
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit set=P3^2;
sbit add=P3^3;
sbit dec=P3^4;
int shi,fen,miao;
void xianshi(int weizhi,int shuzhi);
void xianshi1(int c);
void delay(x);
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code weizhi[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
void delay(x)
{
int i;
while(x--)
for(i=0;i<110;i++);
}
main()
{ int i,flag=0;
EA=0;
ET0=0;
TMOD=0X02;
TH0=0X38;
TL0=0X38;
TR0=1;
while(1)
{
if(TF0==1)
{
i++;
TF0=0;
if(i==108)
{
i=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
}
}
if(set==0)
{
delay(10);
if(set==0)
{
TR0=0;
flag=1;
while(~set);
}
}
while(flag==1)
{
xianshi(7,miao);
xianshi(4,fen);
xianshi(1,shi);
xianshi1(2);
xianshi1(5);
if(set==0)
{
delay(10);
if(set==0)
{
flag=2;
//TR0=1;
}
while(~set);
}
if(add==0)
{
delay(10);
if(add==0)
{
shi++;
if(shi==24)
{
shi=0;
}
while(~add);
}
}
if(dec==0)
{
delay(10);
if(dec==0)
{
fen++;
if(fen==60)
{
fen=0;
}
}
while(~dec);
}
}
if(flag==2)
{
flag=0;
TR0=1;
}
//TR0=1;
xianshi(7,miao);
xianshi(4,fen);
xianshi(1,shi);
xianshi1(2);
xianshi1(5);
}
}
void xianshi(int c,int shuzhi)
{
int a,b;
a=shuzhi/10;
b=shuzhi%10;
P2=weizhi[c];
c--;
P0=table;
delay(1);
P0=0xff;
P2=weizhi[c];
P0=table[a];
delay(1);
}
void xianshi1(int c)
{
P2=weizhi[c];
P0=0x40;
}
void dingshi() interrupt 1
{
//TH0=0X38;
//TL0=0X38;
} |
|