共阳极数码时钟c语言程序,51单片机_DS1302时钟芯片_共阴数码管_时钟实例【中为电子科技工作室】_51单片机ds1302数码管时钟...

该文档包括原理图、源代码,系统的介绍了51单片机和DS1302的应用,显示方式为4位共阴时钟数码管,具有调时功能,原理图和源代码都已验证是可用的。

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

sbit ntds p3 3

sbit ntoe= p3 5

sbit ntst p3 6

sbit ntsh= p3 7

74C595功能引做定义

uchar code ckntSegDot[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/段砖,共例,带DP

uchar code ckntSeg]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/段码,共阴,19

uchar code ckntDig[]=Oxf7, Oxfb, Oxfd, Oxfe, Oxff)

位妈,共阴

uchar second, minute, hour, week, day, month, year

char secondL, second. minute, minute. hour, hour

uint blinkMin, blinkhour

bit isset, issetMin, issethour

==延的函数

void Delay (uint ent)

while(cnt--)

=S1302写字节数==

void Ds1302WriteByte(uchar abc

uchar

recce 1

rtccK =0

nop (

for(i=0;i<8;i++)

Page: 2

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

rtio= abc oxol

/按位与,取最低位

nop

rtcCK I

)

nop (

rtcCK= 0

abc>>=1;

谁备传输次高位

DS1302读字节函数

uchar Ds1302ReadByte o

uchar i read dat

recce= 1

for(i=0;i<8;i+)

rcad dat >>=1

if(rtiO==1

rcad dat=0x80

rtcCK 1

(

nop (

rtcCK =0

nop

)

return read dat

Page: 3

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

===DS1302读数据数

uchar Ds1302Read (uchar read addr)

uchar read dat

rtcc =0

rtcCK =0:

Ds1302WriteByte(read addr)

read dat= Dsl302ReadByteo

rtccK= 1

recce= 0

return read dat

=DS1302写的数===

void Ds1302Writc(uchar write addr, uchar write dat

rtcc= o

rtcCK =0

Ds1302WritcBytc(write addr)

先写地址

Ds1302WriteByte(write dat)

再写数据

rtccK =0

recce =0

=数据转化的数==

void DataTrans o

数据转化,提取BCD码

Page: 41

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

/便于在数码管显示

secondl second oof

second >>=4

second= second oof

minute minute oof

minute >>=4

minute minute oof

hour hour OoF

hour >>=4

hour hour oof

共阴数码管显小函数

void CkntDisplay(uchar segTmp, uchar digTmp)

uchar i, tmp =0x80

for(i=0;i<8;i++)

位码,实际用了4位

ntsh =o

ntds =(digtmp tmp)? 1: 0

提取高位数据

ntsH= l

上开沿有效

di gmp =1

位码数据右移1位,将次高位变为最高位

for(i=0;i<8;i+)

段码,高位在成

Page: 5

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

ntsH =o

ntDs=(segTmp tmp )? 1: 0

/提取高位数据

ntsh=l

上开沿有效

segtmp =1

段妈数据右移1位,将次高位变为最高位

ntsT =0

nop o)

ntst =1

将移位奇存器数据存入存信寄存器中

nop (

上开沿有效

ntSH=0

ntst=0

调餐74bc595的序,以待后用

ntoe =0

使能746c595输出

是示方式数

void Display o

if (isSet == 1)

调整时间时的显示方式

if(is SetMin== 1)

/调整分钟

blinkIng+

调整时间时,次定了分钟的闪烁频率

if(blinkMin <250

/在调整的时间模式下,分的显示

Page: 6

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

CkntDisplay(ckntSeg [minuteL], ckntDig[o])

CkntDisplay(ckntSeg lminutehl, ckntDig[l])

else if((blinkMin >=250)&&(blinkMin< 500))

在调整时间模式下,分钟不显示

CkntDisplay(ckntSeg [minuteL], ckntDig [4])

CkntDisplay(ckntSeg [minute], ckntDig[4])

e⊥se

blinkMin=0

CkntDisplay(ckntSeg lhourl, ckntDig[2])

CkntDisplay(ckntSeg hour], ckntDig[3])

if(isSetHour ==1)

调整小的

blinkHour++

调整的间的,决定了小的的闪烁级率

if(blinkHour 250)

在调整的间模式下,小时显示

CkntDisplay(ckntScg lhourl], ckntDig[2])

CkntDisplay(ckntSeg lhourHl, ckntDigl3)

else if((b1 inhour>=250)&&( blinkhour<500)在调整的问模式下,小的不显示

CkntDisplay(ckntSeg [hourL], ckntDig[4])

CkntDisplay(ckntSeg thourH], ckntDig[4l)

e⊥se

Page: 7

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

blinkhour =0

CkntDisplay(ckntSeg [minute], ckntDig[o)

CkntDisplay (ckntSeg [], ckntDig[l])

else

正常是示模式

/CkntDisplay(ckntSegisecondL ckntDiglo)

//CkntDisplay(ckntseglsecondH/, ckntDigl1/)

CkntDisplay(ckntSeg [minuteL], ckntDig[o])

Delay(100)

延时是调整数码管的显示亮度

CkntDisplay(ckntSeglminuteHl, ckntDigli])

Delay (10o

if((secondL %2)== 0)

判断是否显示欢点

CkntDisplay(cknt Scglot [hour], ckntDig[2])

else

CkntDisplay(cknt Scg hour], ckntDig[2])

Delay (100)

CkntDisplay(ckntscgthourH], ckntDig[3])

盘扫数==

void KeyScan o

Page: 8

E:\Demo\Keil3\IS EB51M V100 DEMO\ 12Hf i\ds1302.c

间加键

if ((upKey== 0)&&(isSet== 1)

Delay(200)

/去抖

if (upkey ==0

if (isSetMin ==1

minute++

if(minute = 10)

minute =0

minutest

if(minute== 10)&&(minute =5))

minute=o

minute =0

else if(isSctHour==1

hourly+

if((hour( 2)&&(hour == 10))

hour =0

h

our++

if((hour ==2)&&(hourL ==5))

Page: 9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值