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