按下按鍵,數碼管加1,用中斷的方法
C語言源程序:
#include<reg52.h> //52單片機頭文件包含
#define uint unsigned int //定義宏uint 為 unsigned int
#define uchar unsigned char //定義宏unchar為unsigned char
sbit wei1=P2^0;//數碼管第一位
sbit key1=P3^2;//中斷端口
uchar code table[]={0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E};//共陽數碼管碼表
uchar num;//定義無符號字符變量 num
void delay(uint z);//延時函數聲明
void led_show(uchar tem);//顯示函數聲明
void main() //主函數
{
num=0;//給num賦值為0
IT0=0;//中斷以低電頻方式觸發
EX0=1;//打開外部中斷0
EA=1;//總中斷斷開
wei1=0;//允許數碼管第一位顯示
while(1) //主循環開始
{
led_show(num);//不斷顯示num的值
}
}
void EX0_Int() interrupt 0 //中斷函數 interrupt代表中斷入口為0號中斷
{
EX0=0; //關閉中斷0
num=(num+1)%16;//循環將num的值加1(0-15之間變化)
while(!key1);//按鍵是否松開
delay(5);//延時5ms
while(!key1);//再次確認按鍵是否松開
EX0=1;//再次打開中斷 接受輸入
}
void delay(uint z) //延時函數
{
uint x,y;//定義無符號整型變量x,y
for(x=z;x>0;x--)//主循環循環z次
for(y=110;y>0;y--);//子循環循環110次
}
void led_show(uchar temp)//數碼管顯示函數
{
P0=table[temp]; //將碼表值送給P0 顯示數字
delay(5); //延時5ms
}
//實驗結果 按下P3^2對應的按鍵 num的值加1 數碼管的值更新顯示加1
|