| 
高级会员 主题
回帖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;
 
 
 }
 }
 
   | 
 |