高级会员
主题
回帖0
积分344
阅读权限30
注册时间2011-1-16
最后登录1970-1-1
在线时间 小时
|
本帖最后由 摇滚铁心 于 2011-1-22 11:52 编辑
开机时用INT0/INT1中断做定时/计时模式选择,按INT0进入计时模式,并开始计时,再按则暂停,然后再按又继续。如果按INT1则进入定时模式,开始设置时间,个位闪烁,(再按则十位闪,再按则百位闪。。。),设置好后按INT0开始定时倒数。
定时过程中,按INT0则暂停,然后再按又继续。按INT1可以重新设置时间,个位闪烁,(再按则十位闪,再按则百位闪。。。设置好后按INT0开始新的定时。
问题是:开机时用中断来选择定时子函数还是计时子函数,进入定时子函数/计时子函数后又用相同的中断来做另外的功能,这改怎么做啊?
我写了一点就不知道怎么写了,
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,i,j;//a为模式选择标志
sbit qian =P3^7;
sbit bai =P3^5;
sbit shi =P3^4;
sbit ge =P3^0;
sbit st =P3^2;//开始/停止键
sbit set =P3^3;//设置键
sbit up =P3^0;//加
sbit md =P1^7;//秒点
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void delay(uint);
void main()
{
while (1)
{
EA=1;
EX1=1;
EX0=1;
while(1)
{
P1=table[0];//显示00:00
md=0;//显示秒点
qian=0;
bai=0;
shi=0;
ge=0;
delay(500);
qian=1;
bai=1;
shi=1;
ge=1;
delay(500);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=74;y>0;y--);
}
void EX0_()interrupt 0//计时模式
{
a=1;
}
void EX1_()interrupt 2//定时模式
{
a=2;
}
void t0.5//0.5s
{
while(1)
{
EA=1;
EX1=1;//保留开始/停止键中断
EX1=0;//关set键中断
ET0=1;//开定时器0做计时基准
TMOD=0x02;
TH0=240;
TL0=240;
}
}
|
|