专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

用74LS164驱动数码管

作者:佚名   来源:本站原创   点击数:  更新时间:2011年01月28日   【字体:

3、实训进度安排

(1)第一天上午:布置任务、分组、确定题目。

(2)第一天下午和晚上:查找资料确定方案,画出系统组成框图、硬件电路图、软件流程图。

(3)第二天上午:同步进行元件购买和软件设计

(4)第二天下午和晚上:同步进行软件设计与电路焊接

(5)第三天上午:同步进行软件设计与电路焊接

(6)第三天下午和晚上:同步进行软件仿真调试和电路调试

(7)第四天上午:软硬件联调

(8)第四天下午和晚上:软硬件联调,撰写实训报告(每组一份)

(9)第五天上午和下午:产品测试与答辩

 

通过本次课程设计的实践,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。也进一步掌握简单单片机应用系统的设计、制作、调试的方法。同时还提高自身的动手实践能力和科学的思维能力。

同时值得一提的是,在此设计过程中,就对时分之间的点闪烁体现是用查表输出形式实现的,由于本系统设计是采用74LS164驱动数码管,只有一个数据信号输入口,所以不能对数码管进行“位”控,只能对数码管的整体显示进行控制。所以每秒内至少需两次数据输出并显示,第一次输出显示的数的小数点都不亮,第二次输出显示的数(数的值不变)中第三个数码管的数的小数点亮,两者交替输出显示,即可实现点时分之间的点闪烁。在具体实现过程中是用查表方式实现,即在第二次输出显示时,把R3的值加10,既R3查表所得的值是TAB表格中第二排数值(参看程序清单),而第二排数值所对应显示的数都是小数点亮的,在此次输出显示完成后,再把R3减10,返回原来的值并继续进行计时。另外在设计按钮时,一开始遇到的难题是:按一下按钮,时或分所加的数值并不为1,加的数为不确定值,最后经过研究,使设计程序在查询P1.2,P1.3端口时,若检测到高电平时需延迟20ms左右后,再进行二次检测,以消除按钮的抖动干扰,使之按一下能正确调节时分进行加1调整(参看程序清单)。最后值得总结的是,在程序设计过程中还存在很多细节上的问题,如因为没有对进位标志位CY清零,在其他程序都正确的情况下却始终调不出正确满意的结果,最后费了很多时间精力去查找寻错,才得以解决,这使我认识到在程序设计过程中,平时必须加强对一些细小环节的重视,这样才能在真正程序设计时能做到正确快速的调试成功。总的说来,这次课程设计收益匪浅,通过认真思考、查找资料,以及和同学、老师的探讨,解决了很多问题,同时也增长了很多在课堂上学不到的知识。

 

;中断向量程序段

org    0000h

    ajmp   start  

    org   000bh    ;定时器T0中断向量地址

    ajmp  dingshi   

    org   001bh    ;定时器T0中断向量地址

    ajmp  ds

;*********************************************

;初始化程序段

   org  0030h   

start:  mov   sp,#30h   

   mov    tmod,#11h     ;定时器设置

   mov    th0,#3ch      ;定时1秒

   mov    tl0,#0b0h

   mov    iE,#8ah       ;打开定时中断

   mov    p1,#00h

   setb   tr0

;*********************************************

;主程序段

main:   mov    p1,#00h

   mov    a,p1

   jb     acc.3,proc3    ;查询P1.3端口电压

   jb     acc.2,proc2    ;查询P1.2端口电压

   ajmp   main

;*********************************************

;二次检测P1.3,P1.2端口电平

proc3:  acall  delay0         ;延时20ms 

   mov    p1,#00h

   mov    a,p1

   jb     acc.3,jiafen

   ret

proc2:  acall  delay0         ;延时20ms

   mov    p1,#00h

   mov    a,p1

   jb     acc.2,jiashi

   ret

;*********************************************

;调节分子程序

jiafen: clr    p1.3

   mov    ie,#00h

   clr    tr0

   inc     r1

   cjne    r1,#0ah,xianshi0    ;十进位

   mov     r1,#00h

   inc     r2

   cjne    r2,#06h,xianshi0    ;六进位

   mov     r2,#00h

xianshi0:acall   show

   mov     ie,#8ah      ;打开TO,T1中断

        setb    tr0          ;使T0开始计时

   ret

;*********************************************

; 调节时子程序

jiashi: clr     p1.2

   mov    ie,#00h

   clr    tr0

   cjne    r4,#02h,sjw   ;判断R4是否为2

;*******

;二十四清零

inc     r3            

   cjne    r3,#04h,xianshi1 ;四进位

   mov     r3,#00h

   inc     r4

   cjne    r4,#03h,xianshi1 ;三进位

   mov     r4,#00h

   ajmp    xianshi1

;********

sjw:    inc     r3             

        cjne    r3,#0ah,xianshi1   ; 十进位

   mov     r3,#00h

   inc     r4

   cjne    r4,#03h,xianshi1   ;三进位

   mov     r4,#00h

xianshi1:acall  show

   mov     ie,#8ah     ;打开TO,T1中断

        setb    tr0         ;使T0开始计时

   ret

;*********************************************

;TO产生中断计时子程序

dingshi:mov    th1,#0ffh    ;T1赋初值(可任意值)

   mov    tl1,#0feh

        mov     th0,#3ch    ;T0赋初值(定时0.1s)

   mov     tl0,#0b0h 

   inc     r6

   cjne    r6,#0ah,dings0    ; 十进位

   mov     r6,#00h

   setb    et1

   setb    tr1

   inc     r5

   cjne    r5,#3ch,dings4    ; 60进位

   mov     r5,#00h

   inc     r1

   cjne    r1,#0ah,dings4    ; 十进位

   mov     r1,#00h

   inc     r2

   cjne    r2,#06h,dings4    ; 六进位

   mov     r2,#00h

   cjne    r4,#02h,sjw       ;判断R4是否为2

;*******

;二十四清零

inc     r3                

   cjne    r3,#04h,dings4    ; 四进位

   mov     r3,#00h

   inc     r4

   cjne    r4,#03h,dings4    ; 三进位

mov     r4,#00h

   ajmp    dings4

;*******

sjw:    inc     r3

   cjne    r3,#0ah,dings4     ; 十进位

   mov     r3,#00h

   inc     r4

   cjne    r4,#03h,dings4     ; 三进位

   mov     r4,#00h

dings4: acall   show

dings0: reti 

;*********************************************

;T1中断子程序

ds:     clr  tr1

   acall delay               ;延时约0.5s

;*******

;R3加10

 mov  a,#0ah               

   add  a,r3

   mov  r3,a

   acall  show

;*******

; R3减10

   mov  a,r3

   clr c            ;特别注意在减法操作时应清除CY标志位

   subb a,#0ah

   clr  c

   mov  r3,a

   reti

;*********************************************

;显示子程序

show:   mov   dptr,#Tab

   mov   70h,#04h    ; 显示的位数

   mov   r0,#01h     ;先输出R0值

led:    mov   71h,#08h

   mov   a,@r0

   movc  a,@a+dptr

   setb  p1.1        ;P1.1  时钟信号 

tart:   rlc   a

   nop

   mov   p1.0,c      ;P1.0  数据信号

   nop

   clr   p1.1

   nop

   setb  p1.1

   djnz  71h,tart

   inc   r0         ;进行加1,分别输出R2,R3,R4的值

   djnz  70h,led

   ret 

;*********************************************

;延时约20ms子程序

delay0:  mov 75h,#4eh

loop01:  mov 76h,#0ffh

loop02:  nop

    djnz 76h,loop02

    djnz 75h,loop01

    ret

;*********************************************

;延时约0.5S子程序

delay:  mov 74h,#03h

loop0:  mov 73h,#0ffh

loop1:  mov 72h,#0ffh

loop2:  nop

   djnz 72h,loop2

   djnz 73h,loop1

   djna 74h,loop0

   ret

;*********************************************

; 本表为显示数据表

Tab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh 

;“0,1,2,3,4,5,6,7,8,9”

db 0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,87h,0ffh,0efh 

;带有小数点显示的“0,1,2,3,4,5,6,7,8,9” 

;*********************************************

         end   

关闭窗口

相关文章