?? 123.c
字號:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
void delay(uchar k);//延時
void add (uchar da);
uchar scan_key(void);//鍵盤掃描
//uchar get_key(uchar temp);//取按鍵值
uchar SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//共陽
uchar scan_led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //片選 高平亮
uchar led[8]={16,16,16,16,16,16,16,16}; //每位led要顯示的數
uchar code temp_key[16]={0x11,0x12,0x14,0x18, 0x21,0x22,0x24,0x28, 0x41,0x42,0x44,0x48, 0x81,0x82,0x84,0x88};
uchar x,y;///行和列的掃描的值
bit flag;//按下鍵盤的標志位
uchar temp,key;
void main(void)
{ uchar i;
P1=0x0f;//按鍵的初值
while(1){
if(flag==0)key=scan_key();
if(flag==1&&P1==0xf0)add(key);
P0=0xff;
P2=scan_led[i]; //片選掃瞄
P0=SEG7[led[i]]; //共陽段顯
i++;
if(i>=8)i=0;
delay(1);
}
}
////////////////////////////////////////////
void delay(uchar k)//延時
{uchar i,j;
for(i=0; i<k ;i++)
for(j=0;j<125;j++);
}
////////////////////////////////////////////
uchar scan_key(void)//鍵盤掃描///線反轉法
{uchar i;
uchar x,y,z;
P1=0x0f; //先對P3置數 行掃描
if(P1!=0x0f) //判斷是否有鍵按下
{delay(10); //延時,軟件去干擾
if(P1!=0x0f) //確認按鍵按下X = P3;
{x=P1; //保存行掃描時有鍵按下時狀態
P1=0xf0; //列掃描
y=P1; //保存列掃描時有鍵按下時狀態
z=~(x|y); //取出鍵值
flag=1;
for(i=0;i<16;i++)
if(temp_key[i]==z)return i;//判斷是哪個按鍵并返回值
}
}
return 16;//否則返回無效值16
}
/////////////////////////////////////////////////////////
void add(uchar da)//按了一個值后就往左移去顯示
{uchar i;
flag=0; //鍵盤的標志位賦0
if(da!=16){for(i=7;i>0;--i)
led[i]=led[i-1];
led[0]=da;
}
}
//////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -