一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2169|回复: 1
收起左侧

[其他综合] 发个去年刚学单片机时写的时钟程序

[复制链接]
发表于 2011-3-9 15:44 | 显示全部楼层 |阅读模式
学了快一年了,还是迷迷忽忽。汇编的,没啥实用价值,希望能给初学汇编的有点参考作用。P0口的0,1,2,3接CD4543的A,B,C,D。4,5,6,7是位选端
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;改用秒闪灯指示菜单状态。每1秒亮暗一次为走时状态,
;;;常亮为时间调整状态,常暗为闹铃时间设定状态
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org   0000h
ajmp  0030h
org   0003h
inc r2
cjne r2,#3,w00
mov r2,#00h
w00: reti
org   000bh
ajmp  dszd
org   0013h
cpl   nlbz
reti
sc    equ  08h     ;秒数据地址
mc    equ  09h     ;分显示缓存
hc    equ  0ah     ;时显示缓存
nhc   equ  0bh     ;闹钟设置缓存
nmc   equ  0ch
LED1  bit  p0.7  ;LED段位定义
led2  bit  p0.6
led3  bit  p0.5
led4  bit  p0.4
nbb   bit  p2.0  ;蜂鸣器接口
leds  bit  p3.7
nlbz  bit  p3.0 ;闹钟开启/取消指示
keyz  bit  p3.2  ;主菜单按钮
keyn  bit  p3.3  ;闹钟开启/取消选择按钮
keym  bit  p3.4  ;分加按钮
keyh  bit  p3.5  ;时加按钮
org   0030h
;;;;;;;;;;;;;;;
   ;初始化;
;;;;;;;;;;;;;;;
reset:mov r2,#00h
      mov p2,#0ffh
      mov sp,#30h
      mov dptr,#tab
      mov sc,#00h
      mov mc,#00h
      mov hc,#12
      mov nmc,#00h
      mov nhc,#6
      mov tmod,#01h
      mov ie,#87h
      mov th0,#3ch
      mov tl0,#0b0h
      mov tcon,#15h
;;;;;;;;;;;;;;;
   ;主程序;
;;;;;;;;;;;;;;;
MAIN:
      cjne r2,#00h,m1
      acall  xs
      ajmp main
m1:   cjne r2,#01h,m2
      acall sjsz
      ajmp main
m2:   cjne r2,#02h,main
      acall nzsz
      ajmp main
;;;;;;;;;;;;;;;;
;走时显示子程序;
;;;;;;;;;;;;;;;;
xs:   mov a,hc
      mov b,#10
      div ab
      cjne a,#0,xs1  ;如果时是个位数,消无效零
      mov a,#0ah     ;字表的第十位存放使4543输出BLANK的码,如0BH等
xs1:  movc a,@a+dptr ;查到十位的码时4543输出BLANK,无效零不显示
      orl a,#80h     ;与10000000或,即LED1开显示
      mov p0,a
      acall ys2ms
      mov a,b
      movc a,@a+dptr
      orl a,#40h
      mov p0,a
      acall ys2ms
      mov a,mc
      mov b,#10
      div ab
      movc a,@a+dptr
      orl a,#20h
      mov p0,a
      acall ys2ms
      mov a,b
      movc a,@a+dptr
      orl a,#10h
      mov p0,a
      acall ys2ms
      ret
;;;;;;;;;;;;;;;;;;;;
;;;闹钟显示子程序;;;
;;;;;;;;;;;;;;;;;;;;
nxs: mov a,nhc
     mov b,#10
     div ab
     cjne a,#0,nxs1  ;如果时是个位数,消无效零
     mov a,#0ah
nxs1:movc a,@a+dptr
     orl a,#80h
     mov p0,a
     acall ys2ms
     mov a,b
     movc a,@a+dptr
     orl a,#40h
     mov p0,a
     acall ys2ms
     mov a,nmc
     mov b,#10
     div ab
     movc a,@a+dptr
     orl a,#20h
     mov p0,a
     acall ys2ms
     mov a,b
     movc a,@a+dptr
     orl a,#10h
     mov p0,a
     acall  ys2ms
     ret
;;;;;;;;;;;;;;;;;;;;
;;;时间设置子程序;;;
;;;;;;;;;;;;;;;;;;;;
sjsz:
      acall xs
      jb keyh,l2
l1:   acall xs
      jnb keyh,l1
      inc hc
      mov a,hc
      cjne a,#25,l2
      mov hc,#01h
l2:   jb keym,l4
l3:   acall xs
      jnb keym,l3
      inc mc
      mov a,mc
      cjne a,#60,l4
      mov mc,#00h
l4:   ret
;;;;;;;;;;;;;;;;;;;;
;;;闹钟设置子程序;;;
;;;;;;;;;;;;;;;;;;;;
nzsz:acall nxs
     jb keyh,n2
n1:  acall nxs
     jnb keyh,n1
     inc nhc
     mov a,nhc
     cjne a,#25,n2
     mov nhc,#01h
n2:  jb keym,n4
n3:  acall nxs
     jnb keym,n3
     inc nmc
     mov a,nmc
     cjne a,#60,n4
     mov nmc,#00h
n4:ret
;;;;;;;;;;;;;;;;;;;;;
;;;;2MS延时子程序;;;;
;;;;;;;;;;;;;;;;;;;;;
ys2ms:mov r3,#100
ys1:  mov r4,#10
      djnz r4,$
      djnz r3,ys1
      ret
;;;;;;;;;;;;;;;;;;;;;
;;;;;;定时中断0;;;;;;
;;;;;;;;;;;;;;;;;;;;
dszd:push acc
     jb nlbz,ds1
     mov a,nmc
     cjne a,mc,ds1
     mov a,nhc
     cjne a,hc,ds1
     clr nbb
ds1: inc r5
     cjne r5,#10,ds0
     mov r5,#00h
     inc r6
     cjne r2,#00h,d1
     cpl leds
     ajmp  d3
d1:  cjne r2,#1,d2
     clr leds
     ajmp d3
d2:  setb leds
d3:  cjne r6,#2,ds0
     mov r6,#00h
     inc sc
     mov a,sc
     cjne a,#60,ds0
     mov sc,#00h
     inc mc
     setb nbb
     mov a,mc
     cjne a,#60,ds0
     mov mc,#00h
     inc hc
     mov a,hc
     cjne a,#25,ds0
     mov hc ,#01h
ds0: mov th0,#3ch
     mov tl0,#0b0h
     pop acc
     reti
;;;;;;;;;;;;;;;;;;;;
;;;;显示数据表;;;;;;
;;;;;;;;;;;;;;;;;;;;
tab: db  00h, 01h, 02h, 03h, 04h, 05h
     db   06h, 07h, 08h, 09h, 0bh
     end
     
     
     
      
      

发表于 2011-3-9 20:19 | 显示全部楼层
这个挺好,学习学习。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-19 05:16 , Processed in 0.049362 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表