#include <reg51.h>
/********定義按鍵引腳********/
sbit key_One = P2^3;
sbit key_Two = P2^2;
sbit key_Three = P2^1;
sbit key_Four = P2^0;
unsigned char code num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9數字的8421編碼
unsigned char code wei[] = {0x7f,0xbf,0xdf,0xef}; //數碼管位選編碼
char number = 0; //要顯示的數字
unsigned char key_Buff; //按鍵鍵值緩沖值
/********函數聲明********/
void delay(int z);
void display(int x);
char key_Scan();
void main()
{
while(1)
{
key_Buff = key_Scan(); //將按鍵值存入緩沖區
switch(key_Buff) //判斷緩沖區的值
{
case 0: break;
case 1: number++; //按鍵1按下,number自加一并將按鍵
if(number >= 255)
number = 255; //number值大于255不再自加
key_Buff = 0; //按鍵值緩沖區清零,防止下次按鍵未按下還再次進入
break;
case 2: number--;
if(number <= 0)
number = 0;
key_Buff = 0;
break;
case 3: break;
case 4: break;
}
display(number); //數碼管顯示
}
}
/***************************************/
/**函數名: delay(z)
/**函數功能: 粗略延時
/**輸入參數: z表示要延時的毫秒數
/**示例: delay(300) //粗略延時300毫秒
/***************************************/
void delay(int z)
{
int x,y;
for(x=z; x>0; x--)
for(y=110; y>0; y--);
}
/***************************************/
/**函數名: display()
/**函數功能: 數碼管顯示函數
/**輸入參數: x:要顯示的數
/**示例: display(1234); //顯示1234
/***************************************/
void display(int x)
{
unsigned char ge, shi, bai, qian;
/*************************/
/**提取x的個十百千位
/**‘/’為取模運算
/**‘%’為求余運算
/*************************/
qian = x/1000 %10;
bai = x/100 %10;
shi = x/10 %10;
ge = x/1 %10;
P0 = ~num[qian]; //顯示千位
P2 = wei[0]; //第0個數碼管顯示
delay(2); //延時2毫秒
P0 = ~num[bai]; //顯示百位
P2 = wei[1];
delay(2);
P0 = ~num[shi]; //顯示十位
P2 = wei[2];
delay(2);
P0 = ~num[ge]; //顯示個位
P2 = wei[3];
delay(2);
P0 = 0xff; //數碼管消隱
}
/***************************************/
/**函數名: key_Scan()
/**函數功能: 按鍵掃描函數
/**輸入參數: 無
/**返回參數: 按鍵的鍵值
/**示例: key_Buff = key_Scan();
/***************************************/
char key_Scan()
{
char key_Value = 0; //按鍵鍵值,用于返回鍵值使用
P2 = 0x0f; //將按鍵引腳電平拉高
if(key_One == 0) //檢測按鍵1是否被按下
{
delay(10); //延時消抖
while(key_One == 0) //按鍵1確定被按下
{
key_Value = 1; //按鍵鍵值置1
display(number); //調用顯示函數,防止按鍵一直被按下時數碼管不顯示
}
}
if(key_Two == 0) //按鍵2的檢測
{
delay(10);
while(key_Two == 0)
{
key_Value = 2;
display(number);
}
}
if(key_Three == 0)
{
delay(10);
while(key_Three == 0)
{
key_Value = 3;
display(number);
}
}
if(key_Four == 0)
{
delay(10);
while(key_Four == 0)
{
key_Value = 4;
display(number);
}
}
return key_Value; //返回鍵值
}
|