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