|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2013-6-28 23:51:16
来自手机
|
显示全部楼层
大家看看这个程序哪里有问题?
按设置键无效
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint b;
uchar c,e;
char h,m;
uchar gewei,shiwei,baiwei,qianwei;//a为模式标
志,
//mswc为模式选择完成标
志,gewei,shiwei,baiwei,qianwei
//为个位寄存器,十位寄存器,百位寄存器,
千位寄存器
sbit qian =P3^7;
sbit bai =P3^5;
sbit shi =P3^4;
sbit ge =P3^1;
sbit out =P3^3;
sbit set =P3^2;//设置键
sbit up =P3^0;//加
sbit md =P1^7;//秒点
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delay(uchar z);
void display();
void delay(uchar z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=74;y>0;y--);
}
void main()//定时模式
{
out=0;
EA=1;
EX0=1;//开set键中断
ET0=1;//开定时器0做计时基准
TMOD=0x02;
TH0=(256-240);
TL0=(256-240);
b=0;
c=0;
e=1;//在定时模式中第一次按SET键
时个位闪烁
m=0;
h=0;
h=qianwei*10+baiwei;
m=shiwei*10+gewei;
TR0=0;
while(1)
{
if(up==1)//按下SET键时的
显示程序根据按下的次序显示
{
switch(e)
{
case 0://
定时进行中的显示
display();
break;
case 1://
个位闪烁
02/06/2011 14:22:14 PAGE 2
P1=table[gewei];
ge=1;
shi=0;
bai=0;
qian=0;
delay(250);
ge=0;
shi=0;
bai=0;
qian=0;
delay(250);
break;
case 2://
十位闪烁
P1=table[shiwei];
ge=0;
shi=1;
bai=0;
qian=0;
delay(250);
ge=0;
shi=00;
bai=0;
qian=0;
delay(250);
break;
case 3:
P1=table[baiwei];
ge=0;
shi=0;
bai=1;
qian=0;
delay(250);
ge=0;
shi=0;
bai=0;
qian=0;
delay(250);
break;
case 4:
P1=table[qianwei];
ge=0;
shi=0;
bai=0;
qian=1;
delay(250);
ge=0;
shi=0;
bai=0;
qian=0;
delay(250);
break;
}
}
if(up==0)//当UP键按下时
{
delay(10);
if (up==0)
while(!up);
switch(e)
{
case 1:
gewei++;
if
(gewei>9)
gewei=1;
break;
case 2:
shiwei++;
if
(shiwei>5)
shiwei=1;
break;
case 3:
baiwei++;
if
(baiwei>9)
baiwei=1;
break;
case 4:
qianwei++;
if
(qianwei>9)
qianwei=1;
break;
}
h=
(qianwei*10+baiwei);
m=
(shiwei*10+gewei);
}
}
}
void EX0_set()interrupt 0//set键
{
EX0=0;
delay(10);
if(set==0)
{
while(!set);
TR0=0;
e=e++;
if(e>4)
{
e=0;
TR0=1;//第五
次按SET键则开始定时
out=1;
}
}
EX0=1;
}
void t0_time() interrupt 1
{
b=b++;
if(b>=1250)
{
b=0;
c=c++;
}
if(c>=120)
{
c=0;
m=m--;
}
if(m==0)
if(h==0)
{ //当定
时时间到后关闭定时器1,显示00:00不闪烁
ET0=0;
TR0=0;
P1=table
[0];
md=0;
while(1)
{
out=0;
ge=1;
shi=1;
bai=1;
qian=1;//全亮,继电器动作,整个程序将停
在这里。
}
}
if(m<0)
{
m=59;
h=h--;
}
}
void display()
{
P1=0xff;//消隐
ge=1;
shi=0;
bai=0;
qian=0;
P1=table[m%10];//gewei
delay(2);
P1=0xff;
ge=0;
shi=1;
bai=0;
qian=0;
P1=table[m/10];//shiwei
delay(2);
P1=0xff;
ge=0;
shi=0;
bai=1;
qian=0;
P1=table[h%10];//baiwei
delay(2);
P1=0xff;
ge=0;
shi=0;
bai=0;
qian=1;
P1=table[h/10];//qianwei
delay(2);
md=c%2;
delay(2);
} |
|