急求用单片机 AT89C52 74LS164驱动的四位一体共阴数码管从0000~9999循环循环累加显示的程序
2个回答
展开全部
怎么就非要74S164的呢,我没小时间给你写,这里我发一个用74H573的时钟程序给你参考,
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa,h,hh,hl,m,mh,ml,s,sh,sl,ah,am,as,
ahh,ahl,amh,aml,ash,asl,a,b,c;
sbit dula=P2^6;
sbit wela=P2^7;
sbit dian=P0^7;
sbit fm=P2^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit d1=P1^0;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl);//显示函数
void delay(uint z) ;//延时函数
void init() ;//初始化话函数
void chan();//调时函数
uchar alarm(uchar ah,uchar am);//调闹铃函数
uchar trans(uchar h,uchar m,uchar s);//显示转换函数
void time(); //时间函数
void main()
{
init(); //初始化
while(1)
{
alarm(); //调闹钟
chan(); //调时
time(); //时间
if(ah==h&&am==m)
{
if(s%2==0)
fm=0;
else
fm=1;
}
if(!(ah==h&&am==m))
fm=1;
}
}
uchar trans(uchar h,uchar m,uchar s)//时间转换
{
//a=h;
//b=m;
//c=s;
hh=h/10;
hl=h%10;
mh=m/10;
ml=m%10;
sh=s/10;
sl=s%10;
return (hh,hl,mh,ml,sh,sl) ;
}
void time()//时间函数
{
if(aa==20)
{
aa=0;
s++;
//fm=1;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
trans(h,m,s);
display(hh,hl,mh,ml,sh,sl);
//return (h,m,s);
}
void chan() //调时行数
{
if(key1==0)
{
h++;
delay(200);
if(h==24)
h=0;
}
if(key2==0)
{
m++;
delay(200);
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
uchar alarm(uchar h,uchar m)//调闹钟函数
{
loop:if(key3==0)
{
while(1)
{
if(key1==0)
{
ah++;
delay(200);
if(ah==24)
ah=0;
}
if(key2==0)
{
am++;
delay(200);
if(m==60)
{
am=0;
ah++;
if(ah==24)
ah=0;
}
}
trans(ah,am,as);
display(hh,hl,mh,ml,sh,sl);
if(key4==0)
goto loop;
}
}
return (ah,am);
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl)//显示函数
{
dula=1;
P0=table[hh];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[hl];
dian=1;
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(1);
dula=1;
P0=table[mh];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[ml];
dian=1;
dula=0;
P0=0xff;
wela=1;
P0=0x77;
wela=0;
delay(1);
dula=1;
P0=table[sh];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[sl];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void init() //初始化函数
{
wela=0;
dula=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa,h,hh,hl,m,mh,ml,s,sh,sl,ah,am,as,
ahh,ahl,amh,aml,ash,asl,a,b,c;
sbit dula=P2^6;
sbit wela=P2^7;
sbit dian=P0^7;
sbit fm=P2^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit d1=P1^0;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl);//显示函数
void delay(uint z) ;//延时函数
void init() ;//初始化话函数
void chan();//调时函数
uchar alarm(uchar ah,uchar am);//调闹铃函数
uchar trans(uchar h,uchar m,uchar s);//显示转换函数
void time(); //时间函数
void main()
{
init(); //初始化
while(1)
{
alarm(); //调闹钟
chan(); //调时
time(); //时间
if(ah==h&&am==m)
{
if(s%2==0)
fm=0;
else
fm=1;
}
if(!(ah==h&&am==m))
fm=1;
}
}
uchar trans(uchar h,uchar m,uchar s)//时间转换
{
//a=h;
//b=m;
//c=s;
hh=h/10;
hl=h%10;
mh=m/10;
ml=m%10;
sh=s/10;
sl=s%10;
return (hh,hl,mh,ml,sh,sl) ;
}
void time()//时间函数
{
if(aa==20)
{
aa=0;
s++;
//fm=1;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
trans(h,m,s);
display(hh,hl,mh,ml,sh,sl);
//return (h,m,s);
}
void chan() //调时行数
{
if(key1==0)
{
h++;
delay(200);
if(h==24)
h=0;
}
if(key2==0)
{
m++;
delay(200);
if(m==60)
{
m=0;
h++;
if(h==24)
h=0;
}
}
}
uchar alarm(uchar h,uchar m)//调闹钟函数
{
loop:if(key3==0)
{
while(1)
{
if(key1==0)
{
ah++;
delay(200);
if(ah==24)
ah=0;
}
if(key2==0)
{
am++;
delay(200);
if(m==60)
{
am=0;
ah++;
if(ah==24)
ah=0;
}
}
trans(ah,am,as);
display(hh,hl,mh,ml,sh,sl);
if(key4==0)
goto loop;
}
}
return (ah,am);
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl)//显示函数
{
dula=1;
P0=table[hh];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[hl];
dian=1;
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(1);
dula=1;
P0=table[mh];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[ml];
dian=1;
dula=0;
P0=0xff;
wela=1;
P0=0x77;
wela=0;
delay(1);
dula=1;
P0=table[sh];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table[sl];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
}
void init() //初始化函数
{
wela=0;
dula=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
追问
非常谢谢你 我做的是74ls164的
东莞市友贸实业有限公司_
2023-11-22 广告
2023-11-22 广告
第五代双倍数据速率DDR5双列直插式内存模块是一种高速、高性能的内存模块,适用于需要高带宽和低延迟的应用场景。与前几代内存模块相比,DDR5双列直插式内存模块具有更高的数据传输速率和更低的功耗,同时提供了更大的内存容量和更高的可靠性。在数据...
点击进入详情页
本回答由东莞市友贸实业有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询