新人求助,关于一个数字时钟
#include <reg51.h>
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
uchar i=0,j=0,k=0, s=0,f=0,m=0,lbbz=0,a[7]; //定义变量
sbit tz=P3^0; //位定义
sbit sz1=P3^1; //位定义
sbit fz1 =P3^2; //位定义
sbit mz1 =P3^3; //位定义
sbit ss =P3^4; //位定义
sbit lb =P3^5; //位定义
sbit dula=P1^6;
sbit wela=P1^7;
uchar code sz[]={0x3f,0x06,0xdb,0x4f, //数字编码表
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71} ;
uchar code xw[]={ 0xff,0xfe,0xfd,0xfb,0xf7, //选位编码表
0xef,0xdf,0xbf,0x7f
};
void pf() //区分出个位和十位
{
a[1]=s/10;
a[2]=s%10;
a[3]=f/10;
a[4]=f%10;
a[5]=m/10;
a[6]=m%10;
}
void ys ( int d ) //延时函数
{
int b ,c ;
for (b = d;b>0;b--)
for (c=110;c>0;c--) ;
}
void xs() //显视函数
{
pf() ;
for (k=1;k<=6;k++)
{
P0=sz[a[k]];
dula=1;
dula=0;
P2=xw[k];
wela=1;
wela=0;
ys(3);
} 基于C语言的51单片机可调数字钟的设计
}
void dczd() interrupt 1 //定时中断
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
i++;
if (i==4)
{
ss=1;
if (lbbz==1)
{
lbbz=0;
lb=0;
}
}
if (i==20)
{
i=0;
ss=0;
m++;
if (m==60)
{
m=0;
f++;
if (f==60)
{
f=0;
s++;
lbbz=1;
if (s==24)
s=0;
}
}
}
}
void cs() //初始函数
{
TMOD=0x01; //设置为定时工作方式
TH0=(65535-50000)/256; //定时器装初值
TL0=(65535-50000)%256; //定时器装初值
EA=1; //打开总中断
ET0=1; //打开定时中断
TR0=1; //起用定时器
P3=0X0f; 基于C语言的51单片机可调数字钟的设计
}
void main ()
{
cs();
lb=0;
while (1)
{
xs();
if (lbbz==1)
lb=~lb;
if( tz==0)
{
j++;
while (!tz) ;
TR0=0;
while (j>0)
{
xs();
if( tz==0)
{
ys(5);
if( tz==0)
j=0;
while (!tz);
}
if( sz1==0)
{
ys(5);
if( sz1==0)
{
while (!sz1);
s++;
if (s==24)
s=0;
}
}
if( fz1==0)
{
ys(5);
if( fz1==0)
{
while (!fz1);
f++;
if (f==60) 基于C语言的51单片机可调数字钟的设计
f=0;
}
}
if( mz1==0)
{
ys(5);
if( mz1==0)
{
while (!mz1);
m++;
if (m==60)
m=0;
}
}
}
if (j==0)
TR0=1;
}
}
}
这个程序本是没有用锁存器的,完全可以正常工作,但是当我加上那点锁存器的程序就不行了,
file:///C:/Users/Administrator/Desktop/QQ截图20150424225851.png
没图,具体目的没说清,程序是根据硬件写的,硬件不一样,程序很可能就不一样
怎么发图啊,我不会啊
这个就是用了锁存器的图

数字时钟是用数码管?锁存74hc573?

没有对的。
简单时钟,第一个按键选择调整时间,第二三四个就是调整时分秒的
没错,是这样的
没错,是这样的
程序看的很纠结。能不能再仔细注释下,看的醉了。仿真的话确实有时候不正常,以实物为准
算了,我干脆就用三极管驱动得了
仿真里面出的问题是秒的个位变,十位也跟着变,但是都不是正确的码,类推,秒的十位变分的个位就变,但是当我把按键一直按下,显示就正常了,但是不是延时的问题
for (k=1;k<=6;k++)
{
P0=sz[a[k]];
dula=1;
dula=0;
P2=xw[k];
wela=1;
wela=0;
ys(3);
}
for (k=1;k<=6;k++)
{
P0 = 0xFF;
P0=sz[a[k]];
dula=1;
dula=0;
P2=xw[k];
wela=1;
wela=0;
ys(3);
}
试试!
这个方法还是不行啊,我之前已经做好用NPN驱动的了,打算焊这个麻烦一点的电路了
这个方法还是不行啊,我之前已经做好用NPN驱动的了,打算焊这个麻烦一点的电路了
