|
问题是这样的。
我希望用P3.2和P3.3引脚控制两个弹性按键,实现秒表功能如下:
1.当P3.2引脚变为低电平(即有键按下),暂停计数;再次按下时,继续计数;
2.在任何时候P3.3引脚变为低电平,则从0开始计数。
我写了外部中断0和外部中断1的函数,但是我不知道这两个函数为什么不起作用,想问问大家是这个程序出问题了吗?
还是说我还需要在主程序中加上if(P3^2==0)……if(P3^3==0)?但我记得中断函数不需要引用即可生效的。
还望大佬指点迷津!
单片机源程序如下:- #include<reg51.h>
- //00~60秒的简易秒表设计,两个静态数码管,定时器采用查询方式
- #include<intrins.h>
- unsigned char count=0;
- unsigned char miao=56; //秒计数器
- bit b=0; //暂停/继续标志位,b=0暂停,b=1继续
- void int_0() interrupt 0 //外部中断0的中断函数,中断类型号为0
- {
- if(b==0)
- {
- TR1=0;
- b=1; //暂停计数
- }
- else
- {
- b=0;
- TR1=1; //继续计数
- }
- }
- void int_1() interrupt 2 //外部中断1的中断函数,中断类型号为2
- {
- miao=0;
- count=0; //清零并开始计数
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- TR1=1;
- }
- void delay1s()
- {
- unsigned char i;
- for(i=0;i<20;i++)
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- TR1=1;
- while(!TF1);
- TF1=0;
- }
- }
- void disp(unsigned char i)
- {
- unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //定义0~9显示码,共阳极数码管
- P1=led[i/10]; //显示i高位
- P2=led[i%10]; //显示i低位
- }
-
- void main() //主函数
- {
- TMOD=0x10;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ET1=1;
- EX0=1;
- IT0=1;
- EX1=1;
- IT1=1;
- EA=1;
- TR1=1;
- while(1)
- {
- disp(miao);
- delay1s();
- miao++;
- if(miao==60)
- {
- miao=0;
- }
- }
- }
复制代码 |
|