一、實驗目的
1.掌握外部中斷技術的基本使用方法
2.掌握中斷處理程序的編寫方法
二、實驗內容
使用五個數碼管從”00000”開始進行加法計數值到”60000”后重新計數。按動K2鍵時計數暫停,再按繼續計數,每次按鍵操作都需要配上按鍵同步音,即蜂鳴器短暫發聲。
三.實驗步驟
1.新建工程->新建*.c文件->將文件添加到該工程;
注意:Output時要在Create Hex file項打勾。*.hex文件是用于燒錄到板子上的。若不操作這一步,會在編譯時不會自動創建*.hex文件。
2、設置一個中斷函數,用于控制按鈕,在中斷函數中;當flag為1時,cnt自加1;當flag為0時 cnt不變;flag的變化是由按鍵k2控制(本次設計)即講k2連接口與P3.2引腳連接;
3、蜂鳴器:在中斷函數中設置蜂鳴器。
三、實驗代碼
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define OUT P1
uint cnt;
bit flag;
sbit LS138A=P2^7;
sbit LS138B=P2^6;
sbit LS138C=P2^5;
sbit BEEP=P3^5;
unsigned int k;
unsigned char code dispTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
//chose position
void selectPosition(char i)
{
switch(i)
{
case 0: LS138A=0;LS138B=0;LS138C=0;break;
case 1: LS138A=1;LS138B=0;LS138C=0;break;
case 2: LS138A=0;LS138B=1;LS138C=0;break;
case 3: LS138A=1;LS138B=1;LS138C=0;break;
case 4: LS138A=0;LS138B=0;LS138C=1;break;
case 5: LS138A=1;LS138B=0;LS138C=1;break;
case 6: LS138A=0;LS138B=1;LS138C=1;break;
case 7: LS138A=1;LS138B=1;LS138C=1;
}
}
/*************************/
void init(void)
{
flag = 0;
EA=1;
EX0=1;
IT0=1;
}
/************************/
void delay(uint k)
{
uint data i,j;
for(i=0;i<k;i++)
{
for(j=0;j<20;j++)
{
;
}
}
}
/********************/
void main(void)
{
uchar i;
init();
while(1)
{
if(flag)cnt++;
if(cnt>60000)cnt=0;
for(i=0;i<100;i++)
{
selectPosition(3);
OUT=dispTab[cnt/10000];
delay(10);
selectPosition(4);
OUT=dispTab[cnt%10000/1000];
delay(10);
selectPosition(5);
OUT=dispTab[cnt%1000/100];
delay(10);
selectPosition(6);
OUT=dispTab[(cnt%100)/10];
delay(10);
selectPosition(7);
OUT=dispTab[cnt%10];
delay(10);
}
}
}
/************/
void extem_int0(void)interrupt 0 using 0
{
flag=!flag;
for(k=0;k<25;k++)
{
BEEP=1;
delay(10);
BEEP=0;
delay(10);
}
}
四.實驗結果
開始時,數碼管顯示00000;當按下K1鍵時,數碼管數字開始變化;當再次按鍵時,變化暫停。一旦按鍵,就會蜂鳴一聲;再按一次,數碼管數字繼續變化。
完整的Word格式文檔51黑下載地址:
計數器.docx
(19.79 KB, 下載次數: 12)
2019-6-5 10:30 上傳
點擊文件名下載附件
簡易計數器 下載積分: 黑幣 -5
|