#include
#define uchar unsigned char
#define uint unsigned int
uchar Bits=0,Ten=0,Hundred=0,Thousand=0;
uchar code ledshow[16]={ 0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
0x77,/*A*/
0x7C,/*b*/
0x39,/*C*/
0x5E,/*d*/
0x79,/*E*/
0x71,/*F*/} ; //共阴数码管代码
uchar code jz_code[17]={0xff,
0xee,0xed,0xeb,0xe7,
0xde,0xdd,0xdb,0xd7,
0xbe,0xbd,0xbb,0xb7,
0x7e,0x7d,0x7b,0x77}; //键盘代码
void delay(unsigned char a) //延时
{
unsigned char i;
while(a--)
for(i=100;i>0;i--);
}
uchar kbscan(void) //键盘扫描
{
unsigned char hang,lie,key;
P1=0xf0;
delay(5);
lie=P1;
P1=0x0f;
delay(5);
hang=P1;
for(key=16;key>0;key--)
{
if(jz_code[key]==(hang|lie)) break;
}
return (key);
}
void data_l(void) //左移
{
uchar i;
static keytemp=0;
i= kbscan();
if(i!=0)
{
if(!(keytemp==i))
{
keytemp=i;
Thousand=Hundred; //千位
Hundred=Ten;//百位
Ten=Bits; //十位
Bits=i-1; //个位
}
}
else keytemp=0;
}
void display(void)//数码管显示,调试方法:数码管间隔跳动函数中 delay(5);四个,调小
{
data_l();
P0=ledshow[Thousand];
P2_0=0;
delay(5);
P2_0=1;
P0=ledshow[Hundred];
P2_1=0;
delay(5);
P2_1=1;
P0=ledshow[Ten];
P2_2=0;
delay(5);
P2_2=1;
P0=ledshow[Bits];
P2_3=0;
delay(5);
P2_3=1;
}
void main(void)
{
P2=0xff;
while(1)
{
display();
}
}
写过这种程序。 用百度 网页,搜索:
做而论道 按键控制移位显示
百度一下,即可找到。