这个是单片机新颖60秒LED旋转电子钟的程序,如果第四个数码管装反了,程序该怎么改进,急求急求

这个是单片机新颖60秒LED旋转电子钟的程序,如果第四个数码管装反了,程序该怎么改进,急求急求,第1张

数码管装反了,显示的段,就会错乱。

修改程序是可以的,在显示第四个数码的时候,换一套段码即可腔带。

其实,这个电子钟的滑宴第三位数码,是故意装反的,按伍让芦照显示第三位的方法,显示第四位即可。

看别人的程序,就太困难了,你自己攻关一下,会有很大的收获。

巧了,国亲无聊做了一个玩玩,给你看看把,其实电子钟挺简单的,下面是程序:

#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电容如图连接,你自己去写方案把,分数给那么少,就只帮你那么多了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12491074.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存