单片机数字时钟汇编程序设计分析

单片机数字时钟汇编程序设计分析,第1张

时钟设计基本上就是通过电子 定时器定时 到1s给一个中断 让单片机去执行中断 跳转至相应的数码管位 然后修改当前显示值 再设置到10进位加一 之后就出来数字时钟的效果 弄懂定时器 一切就顺下来了

这是一个C得时钟程序 你看明白思想 就好说汇编的语句了

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

sbit dula=P3^7

sbit L1=P2^0

sbit L2=P2^1

sbit L3=P2^2

sbit key1=P3^0

sbit key2=P3^1

sbit key3=P3^2

sbit key4=P3^3

uchar aa

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71

}

uchar nummiao,numfen,numshi,t0

void delayms(uchar xms)

{

uchar i,j

for(i=xmsi>0i--)

for(j=110j>0j--)

}

void init()

{

TMOD=0x11

TH0=(65536-50000)%256

TL0=(65536-50000)/256

EA=1

ET0=1

}

void display(uchar nummiao,numfen,numshi)

{

uchar shishi,geshi,shifen,gefen,shimiao,gemiao

shimiao=nummiao/10

gemiao=nummiao%10

shifen=numfen/10

gefen=numfen%10

shishi=numshi/10

geshi=numshi%10

dula=1

P0=table[shimiao]

dula=0

L1=0

L2=1

L3=1

delayms(5)

dula=1

P0=table[gemiao]

dula=0

L1=1

L2=1

L3=1

delayms(5)

dula=1

P0=0x40

dula=0

L1=1

L2=0

L3=1

delayms(5)

dula=1

P0=table[gefen]

dula=0

L1=0

L2=0

L3=1

delayms(5)

dula=1

P0=table[shifen]

dula=0

L1=1

L2=1

L3=0

delayms(5)

dula=1

P0=0x40

dula=0

L1=0

L2=1

L3=0

delayms(5)

dula=1

P0=table[geshi]

dula=0

L1=1

L2=0

L3=0

delayms(5)

dula=1

P0=table[shishi]

dula=0

L1=0

L2=0

L3=0

delayms(5)

}

void keyscan()

{

if(key1==0)

{

delayms(10)

if(key1==0)

{

numshi++

if(numshi==24)

numshi=0

while(!key1)

}

}

if(key2==0)

{

delayms(10)

if(key2==0)

{

if(numfen==60)

numfen=0

numfen++

while(!key2)

}

}

if(key3==0)

{

delayms(10)

if(key3==0)

{

nummiao=0

while(!key3)

}

}

if(key4==0)

{

delayms(10)

if(key4==0)

{

while(!key4)

TR0=~TR0

}

}

}

void main()

{

init()

aa=0xfe

while(1)

{

P1=aa

if(nummiao==60)

{

numfen++

nummiao=0}

if(numfen==60)

{numshi++

numfen=0}

if(numshi==24)

numshi=0

keyscan()

display(nummiao,numfen,numshi)

}

}

void t0time()interrupt 1

{

TH0=(65535-50000)/256

TL0=(65535-50000)%256

t0++

if(t0==20)

{

t0=0

nummiao++}

aa=_crol_(aa,1)

}

数字时钟的工作原理是

【1】数字时钟,就是以数字显示取代模拟表盘的钟表,在显示上它用数字反应此时的时间,它还能同时显示时,分,秒,且能够对时,分,秒准确进行校时。

【2】数字钟从原理上讲是一种典型的数字电路,一般是由振荡器、分频器、计数器、显示器等几部分组成。其中包括了组合逻辑电路和时序电路。数字钟的设计方法有许多种。

例如:可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟等等。

面向对象思想写成:

下面是一个显示器类

public class Display {

private int value//现在的值

private int limit//上限值

Display( int limit) {

this.limit = limit

}

public void increase() {

value++

if(value == limit) {

value = 0

}

}

public int getValue() {

return value

}

public static void main(String[] args) {

Display d = new Display(24)

for() {

d.increase()

System.out.println(d.getValue())

}

}

}

下面创建一个时钟对象:

public class Clock {

private Display h = new Display(24)

private Display min = new Display(60)

private Display s = new Display(60)

public void start () {

for() {

s.increase()

if(s.getValue() == 0){//如果分重置,小时+1

min.increase()

if(min.getValue() == 0){//如果分重置,小时+1

h.increase()

}

}

System.out.printf("%02d:%02d:%02d\n",h.getValue(), min.getValue(),s.getValue())//格式输出

}

}

public static void main(String[] args) {

Clock clock = new Clock()

clock.start()

}


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

原文地址: http://outofmemory.cn/yw/11963677.html

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

发表评论

登录后才能评论

评论列表(0条)

保存