汇编电子钟的设计

发布者:HeavenlyWonder最新更新时间:2012-09-15 来源: 51hei关键字:汇编电子钟  外部中断  wave6000 手机看文章 扫描二维码
随时随地手机看文章

写在前面: ­

前天晚上断网之后闲来无事忽然心血来潮想起和谁说过以我现在的水平做个时钟没有什么问题,就准备将它实现了。借用老师的学习板子,一直搞到凌晨2点做出了一个24小时的计数器显示,因为没有学过按键的使用方法,昨天实验课下课后问了老师,她给出了查询方式。昨晚搞了下,可以置数,但是不能实现0~60范围加,只能0~99加。今天上午在老师的指导下,终于可以了,总算没有食言啊。呵呵,下面贴出程序了。

先来个效果图:
点击浏览下一页

        mini_second     equ     30h      ;设置0.05秒、秒、分、时的地址 ­

        second  equ     31h ­

        minute  equ     32h ­

        clock   equ     33h ­

        k1      equ     p3.2             ;设置按键地址,为外部中断口int0和int1 ­

        k2      equ     p3.3 ­

­

        org     0000h ­

        ljmp    start ­

        org     000bh ­

        ljmp    t0_x                      ;使用中断计时 ­

        org     0050h ­

start:  mov     mini_second,#00h          ;清零 ­

        mov     second,#00h ­

        mov     minute,#00h ­

        mov     clock,#00h ­

        mov     tmod,#01h                 ;置工作方式1,开定时器 ­

        mov     th0,#3ch ­

        mov     tl0,#0b0h ­

        setb    ea ­

        setb    et0 ­

        setb    tr0 ­

start1: lcall   show_led                 ;主程序跳转程序显示 ­

        lcall   key_d                    ;置数程序 ­

        ljmp    start1                   ;一直循环显示 ­

t0_x: ­

        push    acc                      ;保护现场 ­

        push    psw ­

        mov     th0,#3ch                 ;置初值,这个不是很准确, ­

        mov     tl0,#0b4h                ;估计一分钟慢个2~3秒 ­

        inc     mini_second ­

        mov     a,mini_second ­

        cjne    a,#20,ret0                ;20次为1秒,没有20次均跳出中断重新跳 ­

        mov     mini_second, #00h         ­

        mov     a,second ­

        add     a,#01h ­

        da      a ­

        mov     second,a ­

        cjne    a,#60h,ret0               ;1秒后出循环,每秒后秒清零,跳到分计时加1 ­

        mov     second,#00h ­

        mov     a,minute ­

        add     a,#01h                    ;分同秒 ­

        da      a ­

        mov     minute,a ­

        cjne    a,#60h,ret0 ­

        mov     minute,#00h ­

        mov     a,clock ­

        add     a,#01h ­

        da      a ­

        mov     clock,a ­

        cjne    a,#24h,ret0 ­

        mov     clock,#00h ­

ret0:   pop     psw                       ;结束保护,跳出 ­

        pop     acc ­

        reti ­

        nop ­

        nop ­

        nop ­

;======================================显示子程序 ­

show_led: ­

           mov        a,second             ;个位秒显示 ­

           anl        a,#0fh ­

           mov        40h,a ­

           clr        p1.5                 ;片选数码管 ­

           clr        p1.6 ­

           setb       p1.7 ­

           mov        a,40h ­

           lcall      led_x ­

           lcall      delay ­

           mov        a,second          ;十位秒显示 ­

           anl        a,#0f0h ­

           swap       a ­

           mov        41h,a ­

           setb       p1.5 ­

           clr        p1.6 ­

           setb       p1.7 ­

           mov        a,41h ­

           lcall      led_x ­

           lcall      delay ­

­

           mov        a,minute            ;个位分显示 ­

           anl        a,#0fh ­

           mov        42h,a ­

           setb       p1.5 ­

           setb       p1.6 ­

           setb       p1.7 ­

           mov        a,42h ­

           lcall      led_x ­

           lcall      delay ­

           mov        a,minute             ;十位分显示 ­

           anl        a,#0f0h ­

           swap       a ­

           mov        43h,a ­

           clr        p1.5 ­

           clr        p1.6 ­

           clr        p1.7 ­

           mov        a,43h ­

           lcall      led_x           ­

           lcall      delay ­

­

           mov        a,clock                  ;个位时显示 ­

           anl        a,#0fh ­

           mov        44h,a ­

           clr        p1.5 ­

           setb       p1.6 ­

           clr        p1.7 ­

           mov        a,44h ­

           lcall      led_x ­

           lcall      delay ­

           mov        a,clock                  ;十位时显示 ­

           anl        a,#0f0h ­

           swap       a ­

           mov        45h,a ­

           setb       p1.5 ­

           setb       p1.6 ­

           clr        p1.7 ­

           mov        a,45h ­

           lcall      led_x ­

           lcall      delay ­

           ret ­

­

led_x:     mov        dptr,#led_data           ­

           movc        a,@a+dptr ­

           mov         p0,a ­

           ret ­

;====================================延迟子程序 ­

delay:     mov        r7,#10 ­

de1:       mov        r6,#100             ;延时1ms多一点,因为晶振为11.0592MHZ ­

           djnz       r6,$ ­

           djnz       r7,de1 ­

           ret ­

;===================================数码管的段选码 ­

led_data:       db      0c0h,0f9h,0a4h,0b0h,099h,92h,82h,0f8h,80h,90h ­

;=====================================置数子程序 ­

key_d:  jnb     k1,key1 ­

        jnb     k2,key2 ­

        ret ­

key1:   mov     a,minute                ;查询方式 ————>          分位置数 ­

        clr     c                       ;清零进位,防止干扰da和cjne指令的操作 ­

        inc     a                       ;累加器自加一  ,此为加法置数 ­

        da      a                       ;十进制处理 ­

        cjne    a, #60h, k_01           ;判断是否为60,为60清零,跳出     ­

        mov     a,#00h ­

k_01:   mov     minute,a ­

        jnb     k1,$ ­

        ret ­

­

key2:  mov     a,clock                  ;时位 置数同上 ­

       clr     c ­

       inc     a ­

       da      a ­

       cjne    a, #24h,k_11 ­

       mov     a,#00h ­

k_11:  mov     clock,a ­

       jnb     k2,$ ­

       ret ­

本程序如有雷同,纯属不可能 ­
完整版的程序请从这里下载:http://www.51hei.com/ziliao/file/dzzd.rar 

我的不够成熟或称之为幼稚的汇编编程,郑文老师的独特学习板子(显示数码管是p0口,片选竟然是用p1口3个I/O口接138,——!这个独特焊接方式让我程序写得这么长),郑子含老师对我置数程序的修改,才出来的程序,虽然不是什么成功,至少是一个开始,我会继续疯下去的。这个时钟的弊端挺多的,比如置数的时候,会有闪屏现象,程序我会再改进的。 ­

后记:对于院系电子设计竞赛我的失败我得向我的组员道歉,虽然我知道那些所谓成功的几组也比我们好不到哪里去(看过答辩了),但是我会继续我们的课题,加油吧 ­

编译工具:wave6000 ­

烧制工具:stc-isp(话说国产的stc公司要统一全球51市场,呵呵) ­、RS232串口

请大家多多指教,谢谢^ ^­

关键字:汇编电子钟  外部中断  wave6000 引用地址:汇编电子钟的设计

上一篇:基于51单片机的数字钟
下一篇:基于AT89S51的垃圾称重计费控制系统

推荐阅读最新更新时间:2024-03-16 13:08

2440外部中断实验遇到问题与总结
外部中断实验遇到问题: 1、程序下载到内存(SDROM)中不可运行,下载到nand flash中就可以。 其他程序下载到内存中可以直接运行,不会出现上面问题。 2、外部中断 Eint8_23(共用一个中断向量表),程序中同时设置好几个中断,每个中断服务函数执行不同内容,但是每个外部中断的相应却只有一个。 void __irq Eint8_Isr(void) { Led1_On();//Delay_Ms(1000);Led1_Off(); rSRCPND |= (1 5); //先清除rSRCPND rINTPND |= (1 5); //清除EINT8_23中断标志位 rEINTPEND |= (
[单片机]
STM32自学笔记EXTI(外部中断)寄存器
外部中断通用I/O映像 中断处理函数分配 EXTI寄存器一览 以下图片全部摘自STM32中文参考手册 中断屏蔽寄存器(EXTI_IMR) 往对应的位写1就是开启中断,写0就是关闭中断 例如开放来自线0上的中断请求 EXTI- IMR|=1 0;//开放来自线0上的中断请求 事件屏蔽寄存器(EXTI_EMR) 参考**中断屏蔽寄存器(EXTI_IMR)**的操作 上升沿触发选择寄存器(EXTI_RTSR) 设置对应的外部中断触发事件为上升沿 上升沿就是电平从0到1 例如允许输入线0上的上升沿触发 EXTI- RTSR|=1 0;//允许输入线0上的上升沿触发 下降沿触发选择寄存器(
[单片机]
STM32自学笔记<font color='red'>EXTI</font>(<font color='red'>外部中断</font>)寄存器
STM32库函数EXTI_GetFlagStatus和EXTI_GetITStatus的区别
在使用 STM32 的外部中断功能时,我们经常需要确认是否真的产生了外部中断,查看库函数,我们发现了这两个函数:EXTI_GetFlagStatus 和 EXTI_GetITStatus 。原型如下: FlagStatus EXTI_GetFlagStatus ( uint32_t EXTI_Line ); ITStatus EXTI_GetITStatus ( uint32_t EXTI_Line ); 可以看出,这两个函数是十分相似的,EXTI_GetFlagStatus 的作用是 Checks whether the specified EXTI line flag is set or not. 即检查指定的外部
[单片机]
【stm32f103】stm32 外部中断(寄存器版)
中断分类 STM32的EXTI控制器支持19 个外部中断/ 事件请求。每个中断设有状态位,每个中断/ 事件都有独立的触发和屏蔽设置。 STM32的19个外部中断对应着19路中断线,分别是EXTI_Line0-EXTI_Line18: 线0~15:对应外部 IO口的输入中断。 线16:连接到 PVD 输出。 线17:连接到 RTC 闹钟事件。 线18:连接到 USB 唤醒事件。 触发方式:STM32 的外部中断是通过边沿来触发的,不支持电平触发。 外部中断分组:STM32 的每一个GP
[单片机]
【stm32f103】stm32 <font color='red'>外部中断</font>(寄存器版)
蓝桥杯STC15单片机复习——外部中断
前言 终于到外部中断了,其实从往届赛题来看,外部中断的使用比较少(也可能是我太菜了),不过咱得秉着宁错勿漏的精神来复习才行。 如上图所示,STC15的单片机的外部中断分别位于P32、P33(EX0、EX1),其中,外部中断0的中断号为0,外部中断1的中断号为2. 1、通过外部中断0控制LED亮灭 /* 彭某的蓝桥杯复习——外部中断 1、外部中断按键控制LED亮灭 */ #include STC15F2K60S2.h #define uint unsigned int #define uchar unsigned char void ALL_Init(); void EX0_Init(); void
[单片机]
蓝桥杯STC15单片机复习——<font color='red'>外部中断</font>
stm32红外遥控的外部中断实现
花了整整两天时间终于算是基本把红外解码搞明白了,其实并不是很难,用了两天时间,说来惭愧啊,原因就是细节上的问题,不过最终总算找出问题来了。使用外部中断来解码,就先对外部中断进行配置吧 void exti_init() { RCC- APB2ENR|=1 0;//使用外部中断要开AFIO复用时钟,因为要用到用到它的寄存器来选择出发IO口 AFIO- EXTICR |=1 4;//将出发外部中断的IO配置为PB.9 EXTI- IMR|=1 9;//中断线9的中断打开 EXTI- EMR|=1 9;//时间也打开 EXTI- RTSR|=1 9;//上升沿出发中断 } 开始,弄了还几次程
[单片机]
采用STCl2C2052的无电源电子锁系统方案设计
O 引言 目前,市场上有多种基于IC卡设计的电子锁,广泛应用于宾馆、公寓、仓库、学校等场所。这些场合能够提供很好的直流或交流电源,电子锁的控制部分可以长时间方便地获取稳定的电源。但是,在野外环境中往往不能为控制部分方便地提供电源,需要手持部分为控制部分提供电源,执行开锁和闭锁操作,因此传统由控制部分提供电源的电子锁不能满足野外环境的需要,例如采油井、注水站、电信通讯井等,在这些地方,尤其是偏远的地方,往往对安全性要求较高,提供电源又较为困难。 本文介绍了一种电子锁,电子锁系统分为控制和手持两部分。手持部分的电源采用锂电池,控制部分的工作电源由手持部分提供,数据线和电源线共用一根线,有效解决了上述问题,使用方便。 1 硬件系统设计
[单片机]
采用STCl2C2052的无电源电子锁系统方案设计
STM32外部中断执行过程
一、MCU中断程序执行过程 以MCU裸机程序框架为例,MCU 的主函数是个死循环: 主函数: main(void) { While(1) { //主程序 } } 如果没有中断或异常产生会一直在while(1)里执行主程序代码。当中断产生后,当前执行的任务会被打断,程序跳转到中断处理函数执行,执行完会返回之前的主程序断点处继续执行。 中断处理函数: void IRQ_handler(void) { //中断处理程序 //清除中断标志,否则会不停的进入中断处理程序。 } 在中断处理函数中不要做复杂费时的事情,中断内做的事情尽可能少。 二、中断使用实例 STM32的IO都可以配置成外部中断,但不是同时都可以配成外部中断。需要遵循如下
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved