[讨论] 利用单片机控制显示时钟状态

rain   2006-7-12 18:12 楼主
这个程序也是我们在做的时候感觉比较有意思的一个程序
其实比较的基础
就是一个类似电子种的程序清单

  msec equ 30h         /* 设置程序段起始地址*/

sec equ 31h

min equ 32h

hour equ 33h

org 0000h

ajmp main

org 000bh

ajmp ctc

org 0030h

main:

mov sp,#60h        /*置地址指针*/

mov hour,#00h

mov min,#00h

mov sec,#00h

mov msec,#00h

mov tmod,#01h

mov th0,#3ch

mov tl0,#0b0h

setb ea       /*ea1*/

setb et0       /* et01*/

setb tr0      /* tr01*/

sjmp $       /*程序踏步*/

ctc:

mov th0,#3ch    /*t0赋初值*/

mov tl0,#0b0h

inc msec        /* 指向加数msec下一个字节*/

mov a,msec      /* 将累加器送入寄存器a*/

cjne a,#10,exit     /* 前数和后数比较*/

mov msec,#00h    /*置地址指针*/

inc sec           /* 指向加数sec下一个字节*/

mov a,sec        /* 将累加器送入寄存器a*/

cjne a,#60,exit    /* 前数和后数比较*/

mov sec,#00h      /*置地址指针*/

inc min          /* 指向加数min下一个字节*/

mov a,min       /* 将累加器送入寄存器a*/

cjne a,#60,exit      /* 前数和后数比较*/

mov min,#00h      /*置地址指针*/

inc hour          /* 指向加数hour下一个字节*/

mov a,hour       /* 将累加器送入寄存器a*/

cjne a,#24,exit     /* 前数和后数比较*/

mov hour,#00h      /*置地址指针*/

exit:

mov scon,#00h      /*置地址指针*/

mov r0,#31h

mov r1,#03h

loop:

mov a,@r0      /*内部r0送入累加器a */

mov b,#10       /*立即数送入b */

div ab           /*累加器a除以寄存器b*/

mov r2,a         /*a送入寄存器r2 */

mov a,b          /*b送入a*/

mov dptr,#tab      /*tab送入数据指针*/

movc a,@a+dptr    /* 查表数据送入寄存器a*/

mov sbuf,a         /* a送入sbuf*/

jnb ti,$           /*直接寻址位0转移*/

clr ti             /*ti清零*/

mov a,r2          * r2送入寄存器a*/

movc a,@a+dptr     /* 查表数据送入寄存器a*/

mov sbuf,a          /* a送入sbuf*/

jnb ti,$            /*直接寻址位0转移*/

clr ti

inc r0          /* 指向加数r0下一个字节*/

djnz r1,loop        /* 计数器减一不为零,则执行从loop开始的循环程序*/

reti              /*ti清零*/

tab:                                        /* 定义存储区*/                         

db 3fh,06h,5bh,4fh,66h

db 6dh,7dh,07h,7fh,6fh

end                      /*程序结束*/

试验步骤:

1.  在单片机上把线接好;

2.  把程序输入计算机;

3.  接通单片机电源显示C_

4.  运行程序;

5.  观察时钟走的情况;

6.  改变初始时间继续观察;

7.  关闭电源把实验器件放回原位。

运行结果:机箱上显示时钟状态(普通电子表)

流程图:

 


开始

 

设置堆栈指针初值

设置时钟初始时间

(毫秒)﹢1

=60

 

Y

(毫秒)清0

(秒)﹢1

 

小时=24

 

Y

(秒)清0

 

(分)﹢1

N

毫秒=10

 

Y

(分)清0

(小时)﹢1

N

 

Y

(小时)清0

 

用软件SCON为清0

建立数据指针

显示当前数据

R1­-1=0

返回

 

=60

N

N

=60


 

 有兴趣的朋友可以来做做.

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复