单片机设计(流水灯、矩阵键盘、数码管倒计时)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}