
修改程序是可以的,在显示第四个数码的时候,换一套段码即可腔带。
其实,这个电子钟的滑宴第三位数码,是故意装反的,按伍让芦照显示第三位的方法,显示第四位即可。
看别人的程序,就太困难了,你自己攻关一下,会有很大的收获。
巧了,国亲无聊做了一个玩玩,给你看看把,其实电子钟挺简单的,下面是程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ch=P3^2
sbit key=P3^5
sbit key1=P3^4
uchar t0,numn,numy,numr,nums,numf,numm,sw,w,q,b,s,g,sw1,w1,q1,b1,s1,g1,rq,temp,x
uint u
void 森伍init()
void display(uchar,uchar,uchar,uchar,uchar,uchar)
void delay(uint z)
{
uint x,y
for(x=zx>0x--)
for(y=70y>0y--)
}
void main()
{
init()
while(1)
{
if(rq==1)
{
if(rq==1)
display(sw,w,q,b,s,g)
}
else if(rq==2)
{
if(rq==2)
display(sw1,w1,q1,b1,s1,g1)
}
else if(rq==3)
{
if(rq==3)
display(w,w,w,w,w,w)
}
else 早册if(rq==4)
{
uchar i
temp=0x01
for(i=0i<8i++)
{
P1=~temp
delay(100)
temp<<=1
}
temp=0x80
for(i=0i<8i++)
{
P1=~temp
delay(100)
temp>>=1
}
temp=0x01
for(i=0i<8i++)
{
P1=temp
delay(100)
temp<<=1
}
temp=0x7F
for(i=0i<8i++)
{
P1=temp
delay(100)
temp>>=1
}
}
else
rq=1
}
}
void 陆春宏init()
{
rq=1
x=1
nums=22
numf=0
numm=0
numn=9
numy=10
numr=15
TMOD=0x11
TH0=(65536-50000)/256
TL0=(65536-50000)%256
IT0=1
IT0=2
EA=1
EX0=1
EX1=1
ET0=1
TR0=1
ET1=1//IE=0x82 //CPU开中断,CT0开中断
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
t0++
if(key==0)
{
delay(50)
if(key==0)
{
x++
while(key==0)
}
}
if(x==2&rq==1)
{
//P0=0xf3
if(key1==0)
{
numf++
while(key1==0)
}
}
else if(x==3&rq==1)
{
// P0=0xfc
if(key1==0)
{
nums++
while(key1==0)
}
}
else if(x==2&rq==2)
{
// P0=0xcf
if(key1==0)
{
numr++
while(key1==0)
}
}
else if(x==3&rq==2)
{
// P0=0xf3
if(key1==0)
{
numy++
while(key1==0)
}
}
else if(x==4&rq==2)
{
// P0=0xfc
if(key1==0)
{
numn++
while(key1==0)
}
}
else
{
x=1
}
if(t0==20)
{
t0=0
numm++
}
if(numm==60)
{
numm=0
numf++
}
if(numf==60)
{
for(u=500u>0u--)
{
bell=0
delay(1)
bell=1
delay(1)
}
numf=0
nums++
}
if(nums==24)
{
nums=0
numr++
}
if(numr==30)
{
numr=0
numy++
}
if(numy==12)
{
numy=0
numn++
}
if(numn==100)
{
numn=0
}
g=numm%10
s=numm/10
b=numf%10
q=numf/10
w=nums%10
sw=nums/10
g1=numr%10
s1=numr/10
b1=numy%10
q1=numy/10
w1=numn%10
sw1=numn/10
}
void exert0() interrupt 0
{
delay(50)
rq++
while(ch==0)
}
void t0int() interrupt 3
{
TR1=0
bell=!bell
TH1=timer0h
TL1=timer0l
TR1=1
}
void exert1() interrupt 2
{
rq=100
}
void display(uchar sw,uchar w,uchar q,uchar b,uchar s,uchar g)
{
P2=tabdu[sw]
P0=tabwe[0]
delay(5)
P0=0xff
P2=tabdu[w]
P0=tabwe[1]
delay(5)
P0=0xff
P2=tabdu[q]
P0=tabwe[2]
delay(5)
P0=0xff
P2=tabdu[b]
P0=tabwe[3]
delay(5)
P0=0xff
P2=tabdu[s]
P0=tabwe[4]
delay(5)
P0=0xff
P2=tabdu[g]
P0=tabwe[5]
delay(5)
P0=0xff
}
下面这个是电路图,图我没有画啊,不过我用仿真去做,应该跟电路图差不多了,你可以参考下,可以实现流水灯,闹铃,日期,时间,等功能,上面给你的是按照你的要求,另外我懒得改了所以多了个功能就是可以看日期,你看上面的程序,第一个按钮ch,按一下查看日期,再按一下查看温度(被删了,随机现在是随机显示一个数字),再按一下是流水灯,再按一下又回到时间,另外两个键key/key1;按key是选择锁定分还是时,如果你当前显示的是日期的话就是顺序锁定日,月,年,按key1调整,图上显示的是22点00分09秒,就这样了
设计方案的话..........呵呵,AT89S52+6个数码管+11.0592晶振+2个30P电容+3个按钮+1个10UF电容如图连接,你自己去写方案把,分数给那么少,就只帮你那么多了
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)