?? 數碼管動態顯示.c
字號:
//數碼管的動態顯示 16個鍵對應0-F,INTO為退位建
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit ser=P1^5;
sbit srclk=P1^7;
sbit rclk=P1^4;
sbit delete=P3^2;
sbit beep=P3^4;
uint i,duanum=0,weinum=0,j,t;
uchar duantable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00},
shuru[]={16,16,16,16,16,16,16,16,16},k,h,
weitable[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=35;b>0;b--);
}
void display()
{
uint q;
if(duanum==8)
duanum=0;
if(weinum==8)
weinum=0;
h=weitable[weinum];
for(q=0;q<8;q++)
{
srclk=0;
h=h<<1;
ser=CY;
srclk=1;
}
t=shuru[duanum];
h=duantable[t];
for(q=0;q<8;q++)
{
srclk=0;
h=h<<1;
ser=CY;
srclk=1;
}
rclk=0;
rclk=1;
duanum++;
weinum++;
}
void main()
{
i=0;
while(1)
{
if(i==9)
{
i=0;
for(j=0;j<8;j++)
{
shuru[j]=16;
}
}
while(delete==0)
{
display();
beep=0;
delay(50);
beep=1;
display();
if(i>0)
{
i--;
shuru[i]=16;
}
while(delete==0)
display();
}
P0=0x7f;
k=P0&0x7f;
display();
while(k!=0x7f)
{
beep=0;
delay(50);
beep=1;
display();
switch(k)
{
case 0x77:
shuru[i++]=15;
break;
case 0x7b:
shuru[i++]=14;
break;
case 0x7d:
shuru[i++]=13;
break;
case 0x7e:
shuru[i++]=12;
break;
}
P0=0x7f;
while(P0!=0x7f)
display();
break;
}
P0=0xbf;
k=P0&0xbf;
display();
while(k!=0xbf)
{
beep=0;
delay(50);
beep=1;
display();
switch(k)
{
case 0xb7:
shuru[i++]=11;
break;
case 0xbb:
shuru[i++]=10;
break;
case 0xbd:
shuru[i++]=9;
break;
case 0xbe:
shuru[i++]=8;
break;
}
P0=0xbf;
while(P0!=0xbf)
display();
break;
}
P0=0xdf;
k=P0&0xdf;
display();
while(k!=0xdf)
{
beep=0;
delay(50);
beep=1;
display();
switch(k)
{
case 0xd7:
shuru[i++]=7;
break;
case 0xdb:
shuru[i++]=6;
break;
case 0xdd:
shuru[i++]=5;
break;
case 0xde:
shuru[i++]=4;
break;
}
P0=0xdf;
while(P0!=0xdf)
display();
break;
}
P0=0xef;
k=P0&0xef;
display();
while(k!=0xef)
{
beep=0;
delay(50);
beep=1;
display();
switch(k)
{
case 0xe7:
shuru[i++]=3;
break;
case 0xeb:
shuru[i++]=2;
break;
case 0xed:
shuru[i++]=1;
break;
case 0xee:
shuru[i++]=0;
break;
}
P0=0xef;
while(P0!=0xef)
display();
break;
}
if(i==9)
{
i=0;
for(j=0;j<8;j++)
{
shuru[j]=16;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -