|
問題是這樣的。
我希望用P3.2和P3.3引腳控制兩個彈性按鍵,實現(xiàn)秒表功能如下:
1.當P3.2引腳變?yōu)榈碗娖剑从墟I按下),暫停計數(shù);再次按下時,繼續(xù)計數(shù);
2.在任何時候P3.3引腳變?yōu)榈碗娖,則從0開始計數(shù)。
我寫了外部中斷0和外部中斷1的函數(shù),但是我不知道這兩個函數(shù)為什么不起作用,想問問大家是這個程序出問題了嗎?
還是說我還需要在主程序中加上if(P3^2==0)……if(P3^3==0)?但我記得中斷函數(shù)不需要引用即可生效的。
還望大佬指點迷津!
單片機源程序如下:- #include<reg51.h>
- //00~60秒的簡易秒表設計,兩個靜態(tài)數(shù)碼管,定時器采用查詢方式
- #include<intrins.h>
- unsigned char count=0;
- unsigned char miao=56; //秒計數(shù)器
- bit b=0; //暫停/繼續(xù)標志位,b=0暫停,b=1繼續(xù)
- void int_0() interrupt 0 //外部中斷0的中斷函數(shù),中斷類型號為0
- {
- if(b==0)
- {
- TR1=0;
- b=1; //暫停計數(shù)
- }
- else
- {
- b=0;
- TR1=1; //繼續(xù)計數(shù)
- }
- }
- void int_1() interrupt 2 //外部中斷1的中斷函數(shù),中斷類型號為2
- {
- miao=0;
- count=0; //清零并開始計數(shù)
- 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顯示碼,共陽極數(shù)碼管
- P1=led[i/10]; //顯示i高位
- P2=led[i%10]; //顯示i低位
- }
-
- void main() //主函數(shù)
- {
- 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;
- }
- }
- }
復制代碼 |
-
-
簡易秒表.zip
2023-1-29 15:00 上傳
點擊文件名下載附件
104.99 KB, 下載次數(shù): 4
|