這是我今天做的單片機實驗,附件里面包含INT0中斷計數源代碼,proteus仿真工程文件
說明:每次按下計數鍵時觸發INT0中斷,中斷程序累加計數, 計數值顯示在3只數碼管上,按下清零鍵時數碼管清零
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20171205094109.jpg (99.02 KB, 下載次數: 101)
下載附件
2017-12-5 09:41 上傳
單片機源程序:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- //0~9的段碼
- uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
- //計數值分解后各個待顯示的數位
- uchar DSY_Buffer[]={0,0,0};
- uchar Count=0;
- sbit Clear_Key=P3^6;
- void Show_Count_ON_DSY()
- {
- DSY_Buffer[2]=Count/100; //獲取3個數
- DSY_Buffer[1]=Count%100/10;
- DSY_Buffer[0]=Count%10;
- if(DSY_Buffer[2]==0) //高位為0時不顯示
- {
- DSY_Buffer[2]=0x0a;
- if(DSY_Buffer[1]==0) //高位為0,若第二位為0同樣不顯示
- DSY_Buffer[1]=0x0a;
- }
- P0=DSY_CODE[DSY_Buffer[0]];
- P1=DSY_CODE[DSY_Buffer[1]];
- P2=DSY_CODE[DSY_Buffer[2]];
- }
- //主程序
- void main()
- {
- P0=0x00;
- P1=0x00;
- P2=0x00;
- IE=0x81; //允許INT0中斷
- IT0=1; //下降沿觸發
- while(1)
- {
- if(Clear_Key==0) Count=0; //清0
- Show_Count_ON_DSY();
- }
- }
- //INT0中斷函數
- void EX_INT0() interrupt 0
- {
- Count++; //計數值遞增
- }
復制代碼
全部資料51hei下載地址:
INT0中斷計數.rar
(33.78 KB, 下載次數: 47)
2017-12-5 09:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|