這是我今天做的單片機實驗,附件里面包含INT0及INT1中斷計數(shù)源代碼,proteus仿真工程文件
說明:每次按下第1個計數(shù)鍵時,第1組計數(shù)值累加并顯示在右邊3只數(shù)碼管上, 每次按下第2個計數(shù)鍵時,第2組計數(shù)值累加并顯示在左邊3只數(shù)碼管上,后兩個按鍵分別清零。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
3.jpg (90.35 KB, 下載次數(shù): 76)
下載附件
2017-12-5 09:49 上傳
單片機源代碼:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit K3=P3^4; //2個清零鍵
- sbit K4=P3^5;
- //數(shù)碼管段碼與位碼
- uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
- uchar code DSY_Scan_Bits[]={0x20,0x10,0x08,0x04,0x02,0x01};
- //2組計數(shù)的顯示緩沖,前3位一組,后3位一組
- uchar data Buffer_Counts[]={0,0,0,0,0,0};
- uint Count_A,Count_B=0;
- //延時
- void DelayMS(uint x)
- {
- uchar t;
- while(x--) for(t=0;t<120;t++);
- }
- //數(shù)據(jù)顯示
- void Show_Counts()
- {
- uchar i;
- Buffer_Counts[2]=Count_A/100;
- Buffer_Counts[1]=Count_A%100/10;
- Buffer_Counts[0]=Count_A%10;
- if( Buffer_Counts[2]==0)
- {
- Buffer_Counts[2]=0x0a;
- if( Buffer_Counts[1]==0)
- Buffer_Counts[1]=0x0a;
- }
- Buffer_Counts[5]=Count_B/100;
- Buffer_Counts[4]=Count_B%100/10;
- Buffer_Counts[3]=Count_B%10;
- if( Buffer_Counts[5]==0)
- {
- Buffer_Counts[5]=0x0a;
- if( Buffer_Counts[4]==0)
- Buffer_Counts[4]=0x0a;
- }
- for(i=0;i<6;i++)
- {
- P2=DSY_Scan_Bits[i];
- P1=DSY_CODE[Buffer_Counts[i]];
- DelayMS(1);
- }
- }
- //主程序
- void main()
- {
- IE=0x85;
- PX0=1; //中斷優(yōu)先
- IT0=1;
- IT1=1;
- while(1)
- {
- if(K3==0) Count_A=0;
- if(K4==0) Count_B=0;
- Show_Counts();
- }
- }
- //INT0中斷函數(shù)
- void EX_INT0() interrupt 0
- {
- Count_A++;
- }
- //INT1中斷函數(shù)
- void EX_INT1() interrupt 2
- {
- Count_B++;
- }
復制代碼
全部資料51hei下載地址:
INT0及INT1中斷計數(shù).rar
(37.94 KB, 下載次數(shù): 29)
2017-12-5 09:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|