单片机设计(流水灯、矩阵键盘、数码管倒计时)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机结业作业

1.电路图

2.程序:

#include

sbit P1_6=P1^6;

sbit P1_7=P1^7;

unsigned char code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char clock[2]={59,59}; //60秒倒计时缓冲数组

unsigned char *dis_p;

unsigned char keytest(); //键盘检测函数

unsigned char search(); //查键值函数

void display(unsigned char *p); //显示函数

void main()

{

unsigned char i,a,c;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

dis_p=clock;

while(1)

{

P0=0x80;

c=P0;

for(i=0;i<8;i++)

{

c>>=1;

P0=c;

a=keytest();

if(a==0x0f) display(dis_p);

else

{

display(dis_p);

a=keytest();

if(a!=0x0f)

{

P3=0x00;

a=search();

switch(a)

{

case 0x00:P2=0x3f;break;

case 0x01:P2=0x06;break;

case 0x02:P2=0x5b;break;

case 0x03:P2=0x4f;break;

case 0x04:P2=0x66;break;

case 0x05:P2=0x6d;break;

case 0x06:P2=0x7d;break;

case 0x07:P2=0x07;break;

case 0x08:P2=0x7f;break;

case 0x09:P2=0x6f;break;

case 0x0a:P2=0x77;break;

case 0x0b:P2=0x7c;break;

case 0x0c:P2=0x39;break;

case 0x0d:P2=0x5e;break;

case 0x0e:P2=0x79;break;

case 0x0f:P2=0x71;break;

default:break;

}

while((a=keytest())!=0x0f);

}

}

}

}

}

//**********************************主函数完void display(unsigned char *p)

{

unsigned char buffer[]={0,0,0,0};

unsigned char k,i,j,m,temp;

buffer[0]=p[0]%10;

buffer[1]=p[0]/10;

buffer[2]=p[1]%10;

buffer[3]=p[1]/10;

for(k=0;k<3;k++)

{

temp=0x10;

for(i=0;i<4;i++)

{

P3=~temp;

j=buffer[i];

P2=led[j];

temp<<=1;

for(m=0;m<200;m++);

}

}

}

//*******************************显示函数完unsigned char keytest()

{

unsigned char c;

P1=0x0f;

c=P1;

c=c&0x0f;

return(c);

}

//*******************键盘检测函数完unsigned char search()

{

unsigned char a,b,c,d,e;

c=0xfe;

a=0;

while(1)

{

P1=c;

d=P1;

d=d&0xf0;

if(d==0x70){b=0;break;}

else if(d==0xb0){b=1;break;}

else if(d==0xd0){b=2;break;}

else if(d==0xe0){b=3;break;}

a++;

c<<=1;

}

e=a*4+b;

return(e);

}

//*****************查键值函数完

void daojishi() interrupt 1

{

unsigned char a;

EA=0;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

a++;

if(a==20)

{

a=0;

if(clock[0]==0)

{clock[0]=59;clock[1]=59;}

else{

clock[0]--;

clock[1]--;

}

}

EA=1;

}

相关文档
最新文档