谁能告诉我51单片机简单的led数码管时钟程序 24小时制的(c语言版的)

谁能告诉我51单片机简单的led数码管时钟程序 24小时制的(c语言版的),第1张

#include "reg52.h"

#define uint unsigned int

#define uchar unsigned char

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}

uchar shi,fen,miao

uchar time

void delay(uint x)

{

uint y

for(x>0x--)

{

for(y=0y<124y++)

}

}

void display(uchar shi,uchar fen,uchar miao)

{

P2=0 //位码

P0=(tab[shi/10]) //段码

delay(2)

P2=1

P0=(tab[shi%10])

delay(2)

P2=2 //位码

P0=0x40 //段码

delay(2)

P2=3 //位码

P0=(tab[fen/10]) //段码

delay(2)

P2=4

P0=(tab[fen%10])

delay(2)

P2=5 //位码

P0=0x40 //段码

delay(2)

P2=6 //位码

P0=(tab[miao/10]) //段码

delay(2)

P2=7

P0=(tab[miao%10])

delay(2)

}

void main()

{

TMOD=0x01

TH0=(65536-50000)/256

TL0=(65536-50000)%256

EA=1

ET0=1

TR0=1

while(1)

{

if(time==20)

{

time=0

miao++

if(miao==60)

{

miao=0

fen++

if(fen==60)

{

fen=0

shi++

if(shi==24)

shi=0

}

}

}

display(shi,fen,miao)

}

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

time++

}

/*还有什么不明白继续追加*/

程序就不写了,因为每个人有每个人的写作风格,我给你的程序,你不一定能理解我的思路,拿一个现成的程序让你看,那最终不是你自己的,所以要让自己弄懂,就给你一个思路,你就把程序做出来,那才是自己的东西,这里就给你一个思路

把0……9的数码显示代码存在ROM里,用tab:db……(字型码)来存,做一段1秒的定时程序,在程序的初始化时要做几个计数器,分别对时分秒计数,先从秒开始,设初始值为10,然后是“分”60个,最后一个是“时”也是60,开中断,启动1秒定时器,一秒到了以后,把1的字型码发送到串行口,然后秒计数器减1,在启动1秒定时,到了后,把2字型码发送出去……直到减为0,个位进1,将秒的“十”位字型码发送到出去,分计数器从60开始减计数,这里要注意,定时器不能停,要一直的循环执行1秒定时,采用中断方式,分进位后,再对时计数器减计数,就象这样,不停的减计数,直至溢出后将相应的代码发送出去,基本思路就是这样,关键的就是几个计数器的控制,要主要完成了一个周期后,要重新赋值


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

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

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存