?? 按鍵設(shè)置數(shù)碼管.c
字號(hào):
//=======================================================================================
// 工程名稱: 按鍵設(shè)置數(shù)碼管
// 功能描述: 通過(guò)按鍵設(shè)置數(shù)碼顯示的值
// 涉及的庫(kù): reg51.h
// 硬件連接:見(jiàn)電路圖
// 維護(hù)記錄: 2008-12-14 v1.0
//========================================================================================
//====================================================================================
// 文件名: main.c
// 功能描述: 通過(guò)按鍵設(shè)置數(shù)碼顯示的值
// 維護(hù)記錄: 2008-12-14 v1.0
//====================================================================================
#include "reg51.h"
#define SEG_NUM P2 //段碼接口
#define KEY_IO P0 //4*4矩陣鍵盤的接口
sbit SEL_GE =P1^0; //個(gè)位數(shù)碼管位選
sbit SEL_SHI=P1^2; //十位數(shù)碼管位選
sbit SEL_BAI=P1^4; //百位數(shù)碼管位選
unsigned int N; //片選數(shù)碼管的位數(shù)個(gè)位為0,百位為2
unsigned int REG_NUM[3]; //顯示緩存:存3個(gè)數(shù)碼管對(duì)應(yīng)段碼,依次為個(gè)十百位
unsigned int CODE_NUM[10] = {
0xbb, /*0*/
0x88, /*1*/
0xd3, /*2*/
0xda, /*3*/
0xe8, /*4*/
0x7a, /*5*/
0x7b, /*6*/
0x98, /*7*/
0xfb, /*8*/
0xfa /*9*/
};
void delay(int i); //延時(shí)
int MatrixKey() ; //按鍵掃描
void Scan_disp(void); //顯示掃描函數(shù)
void Convert(unsigned int NUM_SHOW); //緩存區(qū)處理函數(shù)
int num=0;
unsigned char pf;
//=============================================================
// 語(yǔ)法格式: int main();
// 實(shí)現(xiàn)功能: 主函數(shù)
// 參數(shù): 無(wú)
// 返回值: 無(wú)
//=============================================================
int main(void)
{
unsigned char key=0;
TMOD=0x20;
TH1=0xe6;
TL1=0xe6;
PCON=0x00;
TR1=1;
SCON=0x50;
Convert(key);
while(1)
{
key=MatrixKey();
if(key!=0)
{
SBUF=key;
while(TI==0)
{
Convert(key);
Scan_disp();
delay(6);
}
TI=0;
}
Scan_disp();
delay(6);
}
}
void delay(int i)
{
int j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
//=============================================================
// 語(yǔ)法格式: void Scan_disp(void);
// 實(shí)現(xiàn)功能: 掃描顯示器件
// 參數(shù): 無(wú)
// 返回值: 無(wú)
//=============================================================
void Scan_disp(void)
{
SEG_NUM = 0x0000; //清段碼輸出
SEL_GE = 0;
SEL_SHI = 0;
SEL_BAI = 0;
switch(N)
{
case 0: SEL_GE = 1;SEG_NUM = REG_NUM[0]; break; //片選個(gè)位數(shù)碼管并輸出對(duì)應(yīng)緩存
case 1: SEL_SHI = 1;SEG_NUM = REG_NUM[1]; break; //片選十位數(shù)碼管并輸出對(duì)應(yīng)緩存
case 2: SEL_BAI = 1;;SEG_NUM = REG_NUM[2]; break; //片選百位數(shù)碼管并輸出對(duì)應(yīng)緩存
default:break;
}
N++;
if(N >= 3) N = 0; //使始終在0~4循環(huán)
}
//=============================================================
// 語(yǔ)法格式: void Convert(unsigned int);
// 實(shí)現(xiàn)功能: 更新顯示緩存,提取整數(shù)的個(gè)、十、百位并轉(zhuǎn)換為數(shù)碼管段碼,更新到緩存REG_NUM[]
// 參數(shù): NUM_SHOW:需要提取并轉(zhuǎn)換的整數(shù)
// 返回值: 無(wú)
//=============================================================
void Convert(unsigned int NUM_SHOW)
{
REG_NUM[0] = CODE_NUM[NUM_SHOW%10]; //提取個(gè)位
REG_NUM[1] = CODE_NUM[NUM_SHOW/10%10]; //提取十位
REG_NUM[2] = CODE_NUM[NUM_SHOW/100%10]; //提取百位
}
int MatrixKey()
{
unsigned int data_A=0,data_B=0,KEY_NUM;
unsigned char data_key=0;
KEY_IO=0x0f;
KEY_NUM= KEY_IO;
if(KEY_NUM!=0x0f) //檢查行是否有按鍵按下
{
delay(2); //////////
if(KEY_NUM!=0x0f)
{
data_A=KEY_NUM;
KEY_IO=0xf0;
KEY_NUM= KEY_IO;
data_B=KEY_NUM;
if(data_A==0x0e&&data_B==0xe0){data_key= 1;}
else if(data_A==0x0e&&data_B==0xd0){data_key= 2;}
else if(data_A==0x0e&&data_B==0xb0){data_key= 3;}
else if(data_A==0x0e&&data_B==0x70){data_key= 4;}
else if(data_A==0x0d&&data_B==0xe0){data_key= 5;}
else if(data_A==0x0d&&data_B==0xd0){data_key= 6;}
else if(data_A==0x0d&&data_B==0xb0){data_key= 7;}
else if(data_A==0x0d&&data_B==0x70){data_key= 8;}
else if(data_A==0x0b&&data_B==0xe0){data_key= 9;}
else if(data_A==0x0b&&data_B==0xd0){data_key= 10;}
else if(data_A==0x0b&&data_B==0xb0){data_key= 11;}
else if(data_A==0x0b&&data_B==0x70){data_key= 12;}
else if(data_A==0x07&&data_B==0xe0){data_key= 13;}
else if(data_A==0x07&&data_B==0xd0){data_key= 14;}
else if(data_A==0x07&&data_B==0xb0){data_key= 15;}
else if(data_A==0x07&&data_B==0x70){data_key= 16;}
while(KEY_IO!=0xf0)
{
Scan_disp();
delay(6);
}
}
}
return data_key;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -