📄 shumaguanxianshi.txt
字号:
/*数码管键盘显示
通过日期2006-3-28
说明:
p0口为数码管的字形第四位为数码管控制端
键盘控制 p1低四位 控制 高四位扫描
*/
#include<reg51.h>
sfr p1=0x90;
sfr p0=0x80;
sbit p10=p1^0;//第4位显示
sbit p11=p1^1;
sbit p12=p1^2;
sbit p13=p1^3;//第一位显示
sbit p14=p1^4;//第4位显示
sbit p15=p1^5;
sbit p16=p1^6;
sbit p17=p1^7;
unsigned char code date[]={0xC0,0xF9,0xA4,0xB0,0x99, //0~4
0x92,0x82,0xF8,0x80,0x90, //5~9
0x88,0x83,0xA7,0xA1,0x86,0x8E,0xff}; //A~F
int dat1[4]={16,16,16,16};
void KeyScan(void);
void del1(unsigned char n);
void Dispaly(void);
unsigned char key,flag;
void main() //主程序
{ while(1) KeyScan();}
void KeyScan(void) //扫描子程序
{
p10=0;
if (!p14){flag=1; key=7;del1(3000);Dispaly();}
if (!p15){flag=1; key=4; del1(3000);Dispaly();}
if (!p16){flag=1; key=1;del1(3000);Dispaly();}
if (!p17){flag=1; key=0;del1(3000);Dispaly();}
p10=1;
p11=0;
if (!p14){flag=1; key=8;del1(3000);Dispaly();}
if (!p15){flag=1; key=5;del1(3000);Dispaly();}
if (!p16){flag=1; key=2;del1(3000);Dispaly();}
if (!p17){flag=1; key=10;del1(3000);Dispaly();}
p11=1;
p12=0;
if (!p14){flag=1; key=9;del1(3000);Dispaly();}
if (!p15){flag=1; key=6;del1(3000);Dispaly();}
if (!p16){flag=1; key=3;del1(3000);Dispaly();}
if (!p17){flag=1; key=11;del1(3000);Dispaly();}
p12=1;
p13=0;
if (!p14){flag=1; key=15;del1(3000);Dispaly();}
if (!p15){flag=1; key=14;del1(3000);Dispaly();}
if (!p16){flag=1; key=13; del1(3000);Dispaly();}
if (!p17){flag=1; key=12;del1(3000);Dispaly();}
p13=1;
p10=0;
if (!p14){flag=1; key=7;del1(3000);Dispaly();}
if (!p15){flag=1; key=4;del1(3000);Dispaly();}
if (!p16){flag=1; key=1;del1(3000);Dispaly();}
if (!p17){flag=1; key=0;del1(3000);Dispaly();}
p10=1;
Dispaly();
}
void del1(unsigned char n){unsigned char i;for(i=0;i<n;i++);}
//显示程序
void Dispaly(void)
{int i;
if(flag){
for(i=3;i>0;i--)dat1[i]=dat1[i-1];
dat1[0]=key;}
flag=0;
p13=0; //第一位
p0=0xff;
p0=date[dat1[0]];
del1(70);
p13=1;
p12=0; //第2位
p0=0xff;
p0=date[dat1[1]];
del1(70);
p12=1;
p11=0;//第3位
p0=0xff;
p0=date[dat1[2]];
del1(70);
p11=1;
p10=0;//第4位
p0=0xff;
p0=date[dat1[3]];
del1(70);
p10=1;
}
/*数码管动态显示
p0口是字形控制
p1.0~3控制 低电平有效
效果:动态显示累加效果
*/
#include <reg51.h>
sfr p1=0x90;
sfr p0=0x80;
sbit p10=p1^0;//第4位显示
sbit p11=p1^1;
sbit p12=p1^2;
sbit p13=p1^3;//第一位显示
unsigned char code date[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//0~16,及不显示
int dat2[]={0,0,0,0};
void del1(void);
void disp(void);
main()
{
int i;
long k;
while(1)
{
for(i=0;i<10;i++)
{
dat2[3]=i;
for (k=0;k<30;k++)disp();//延时显示
}
dat2[2]+=1;
if(dat2[2]>9)
{dat2[1]+=1;dat2[2]=0;}
if(dat2[1]>9)
{dat2[0]+=1;dat2[1]=0;}
if(dat2[0]>9)dat2[0]=0;
}
}
void disp(void)
{
p13=0; //第一位像当于个位
p0=date[dat2[3]]&0x7f;
del1();
p0=0xff;
p13=1;
p12=0; //第2位
p0=date[dat2[2]];
if((!dat2[0])&&(!dat2[1])&&(!dat2[2]))p0=0xff;
del1();
p0=0xff;
p12=1;
p11=0;//第3位
p0=date[dat2[1]];
if((!dat2[0])&&(!dat2[1]))p0=0xff;
del1();
p0=0xff;
p11=1;
p10=0;//第4位
p0=date[dat2[0]];
if(!dat2[0])p0=0xff;
del1();
p0=0xff;
p10=1;
}
void del1(void)//显示消震
{
int j;
for (j=0;j<90;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -