单片机课程设计报告

时间:2024.4.21

  

一、引言—本课程设计的目的………..………………..2

二、八路LED跑马灯实验…………….……………….2

2.1设计内容…………………………………………………2

2.2电路图……………………………………………………2

2.3上机程序..…………………………………….………….3

2.4调试结果及结论:……………….……………………….4

三、二位数码管循环显示0099的实验…..………….4

3.1设计内容...……………………………………………….4

3.2电路图...………………………………………………….4

3.3上机程序..…………………………………………..……5

3.4调试结果及结论…………………………………………6

四、单片机演奏音乐实验………………………………6

4.1设计内容..……………………………………….……….6

4.2电路图……………………………………………………6

4.3上机程序…………………………………………………7

4.4调试结果及结论...……………………………………….9

五、心得体会...………………………………………….9

六、参考文献…………..………………………………10

摘要:由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。

关键词:单片机,程序,跑马灯,数码管,测试……

一、引言—本课程设计的目的

以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。

二、八路LED跑马灯实验

2.1设计内容:

八路发光二极管轮流点亮的实验,也就是通常所说的跑马灯实验,首先让我们来完成必须的硬件部分,我们需要焊接上8个发光二极管和8个限流电阻,可以参考下面的原理图和实物图像进行操作,需要注意的是LED是有极性的,引脚长的为正极,引脚短的为负极,负极和电阻一侧连接,如果接错那么相应的那一路可能在实验中不会点亮了。

2.2电路图:

.

2.3上机程序:

org 0000h

ajmp start

org 0030h

start:

mov a,#7fh

clr c

mov r2,#08h

loop: rrc a

mov p0,a

call delay

djnz r2,loop

mov r2,#07h

loop1: rlc a

mov p0,a

call delay

djnz r2,loop1

jmp start

delay:

d1: mov r4,#20

d2: mov r5,#248

djnz r5,$

djnz r4,d2

ret

end

2.4调试结果及结论:

八路发光二极管轮流点亮汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!

三、二位数码管循环显示0099的实验

3.1设计内容:

8段数码管显示.两位数码管显示00--99依次循环(动态扫描方式).p1做LED显示数据输出口.p3.2;p3.3分别控制数码管个位数和十位数显示.用单片机进行数码显示应具有显示器件;应用最广泛的是8段数码管。8段数码管从内部接线上分共阳和共阴两种。在电路设计时应根据情况决定采用共阳或共阴,其基本原则是:若单片机IO口直接驱动数码管个段,最好采用共阳数 码管,因为51单片机IO口输出高电平时输出的电流很小,数码管不会太亮;若数码管是通过驱动芯片与单片机相连的,就要看驱动芯片对数码管极性的要求。

3.2电路图:

3.3上机程序:

a_bit equ 20h

b_bit equ 21h

temp equ 22h

start:

mov temp,#0

ss:acall display

inc temp

mov a,temp

cjne a,#100,next

mov temp,#0

next:ljmp ss

display:

mov a,temp

mov b,#10

div ab

mov b_bit,a

mov a_bit,b

mov dptr,#numtab

mov r0,#4

dpl1:

mov r1,#250

dplop:mov a,a_bit

MOVC A,@A+DPTR

mov p0,a

clr p2.6

ACALL dlms

setb p2.6

mov a,b_bit

MOVC A,@A+DPTR

mov p0,a

clr p2.7

ACALL dlms

setb p2.7

djnz r1,dplop

djnz r0,dpl1

ret

dlms:mov r7,#80

djnz r7,$

ret

numtab:DB 30H,0FCH,0A2H,0A4H,6CH,25H,21H,0BCH,20H,24H

end

3.4调试结果及结论:

8段数码管显示.两位数码管显示00--99依次循环(动态扫描方式)。因为要显示两位不同的数字,所以必须用动态扫描的方法来实现,就是先个位显示1毫秒,再十位显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到两位不同的数字稳定显示。

四、单片机演奏音实验

4.1设计内容:

利用单片机演奏音乐大概是单片机爱好者感兴趣的问题之一。这里我们用网站提供的实验板来做这个实验,并且了解单片机演奏音乐的基本原理,和相关的源程序。我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的高电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调乐曲中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。

此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。

4.2电路图:

4.3上机程序:

ORG 0000H
LJMP START
ORG 000BH
INC 20H ;中断服务,中断计数器加1
MOV TH0,#0D8H
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
RETI
START:
MOV SP,#50H
MOV TH0,#0D8H
MOV TL0,#0EFH
MOV TMOD,#01H
MOV IE,#82H
MUSIC0:
NOP
MOV DPTR,#DAT ;表头地址送DPTR
MOV 20H,#00H ;中断计数器清0
MUSIC1:
NOP
CLR A ;A清零
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5 ;如果是休止符,往下执行
LJMP MUSIC3
MUSIC5:
NOP
MOV R6,A ;R6=18H音符的频率
INC DPTR DPTR加一
MOV A,#0
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A ;R7=30H音符发音的时间
SETB TR0 ;启动计数
MUSIC2:
NOP
CPL P2.5 ;P2.5是音乐输出引脚
MOV A,R6
MOV R3,A ;R3=R6=18H
LCALL DEL
MOV A,R7
CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?
;不等,则继续循环
MOV 20H,#00H ;等于,则取下一代码
INC DPTR
LJMP MUSIC1
MUSIC3:
NOP ;休止100毫秒
CLR TR0
MOV R2,#0DH ;R2=13
MUSIC4:
NOP
MOV R3,#0FFH ;R3=255
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
END0:
NOP
MOV R2,#0FFH ;歌曲结束,延时1秒后继续
MUSIC6:
MOV R3,#00H
LCALL DEL
DJNZ R2,MUSIC6
LJMP MUSIC0
DEL:
NOP
DEL3:
MOV R4,#02H
DEL4:
NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP
DAT:

DB 82H,01H,81H,94H,84H
DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H
DB 82H,01H,81H,0F4H,0D4H
DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H
DB 0C4H,0B4H,04H
DB 82H,01H,81H,94H,84H
DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H
DB 82H,01H,81H,0F4H,0D4H
DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H
DB 0C4H,0B4H,04H
4.4调试结果及结论:

本程序演奏的是“生日快乐”, 网友也可以自行找出一首歌,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。

五、心得体会:

通过本次课程设计我们获益良多。既巩固了单片机的一些相关基本知识,又熟悉了PROTRL的相关操作。对一个整体的电子设计项目,有了一定的认识,初步学会了一定的设计方法,明白了如何用这种方法去实现一个系统的设计。

在电子技术应用领域中,单片机的应用愈来愈多地应用到各行各业。如:工业控制、仪器仪表、电讯技术、办公自动化和计算机外部设备、汽车与节能、商用产品、家用电器等。目前,单片机正朝着大容量片上存储器、多功能i/o接口、宽范围工作电源和低功耗方向发展。要开发单片机的应用,不但要掌握单片机硬件和软件方面的知识,而且还要深入了解各应用系统的专业知识,只有将这两方面的知识融会贯通和有机结合,才能设计出优良的应用系统。一个好的工程设计师不仅要掌握单片机的工作原理,而且还要不断了解各公司最新芯片的结构和应用,在实际应用中找到最好的性能价格比。所以以后还要注意培养接受新知识的自学能力,掌握芯片发展动态。

同时也让我们找到了自己在某些知识上的欠缺,并通过这次机会得到弥补,取得进步!

六、参考文献:

[1]张毅坤,陈善久,裘雪红.  单片微型计算机原理及应用.西安电子科技大学出版社.20##年5月

[2] 华成英,童诗白.        模拟电子技术基础.高等教育出版社,20##年8月

[3] 赵辉,刘印华 .        PROTEL 99电子线路CAD.北京邮电大学出版社.20##年1月


第二篇:单片机课程设计报告最终版


单片机原理及其接口技术

课程设计报告

  设计课题:基于MCS-51单片机的时钟秒表设计

             专业班级:    08自动化              

小组成员:    周剑(08118090              

指导教师:   阮海容               


   基于MCS-51单片机的时钟秒表设计

      设计任务书

      基本设计要求

(1)在ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。
(2)程序的首地址应使目标机可以直接运行,即从0000H开端。在主程序的开端部分必须设置一个合适的栈底。程序放置的地址须持续且靠前,不要在中间留下大批的空间地址,以使目标机可以应用较少的硬件资源。
(3)6位显示器数码管从左到右分辨显示时. 分. 秒(各占用2位),采用24小时标准计时制。开端计时时为000000,到235959后变成000000.
(4)在4*4矩阵键盘上选定3个键分辨作为小时. 分. 秒的调校键。每按一次键,对应的显示值便加1。分. 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不产生转变).
(5)软件设计必须应用8031片内定时器,采用定时中断结构,不得应用软件延时法

     选作项目

1)另设三个键,分别作小时、分、秒的减1调校。

         (2)在以上设计的基础上,修改程序制作一个电子秒表。分、秒各占用                  2位显示,1/10秒、1/100秒各占用1位显示。设定二个键分别作启动/ 停止、清零。

         (3)在做完(2)后,将时钟与秒表合二为一,并且在同时使用时互不影 响。即可在时钟与秒表之间任意切换,而不影响走时、计秒。

    .目录

    第一章 设计阐明
       1.1 设计内容
       1.2 设计请求
       1.3设备及工作环境

   第二章 硬件计划
            2.1 设计思路

2.2 原理电路图

            2.3 硬件工作原理论述

   第三章 软件计划

           3.1 分析论证

           3.2 程序流程图

           3.3程序清单
   第四章 调试过程及成果分析

   第五章设计总结
          参考文献
                       第一章 设计阐明

1.1设计内容
用ZY15MCU12BD型综合单片机实验箱及串口电路设计实现显示时间并能够调校时间的时钟,还能够实现秒表的启动/暂停,复位功能
1.2设计请求
   (1) 在ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。
   (2) 程序的首地址应使目标机可以直接运行,即从0000H开端。在主程序的开端部分必须设置一个合适的栈底。程序放置的地址须持续且靠前,不要在中间留下大批的空间地址,以使目标机可以应用较少的硬件资源。
   (3) 6位显示器数码管从左到右分别显示时. 分. 秒(各占用2位),采用24小时标准计时制。开端计时时为000000,到235959后变成000000.
   (4) 在键盘上选定6个键分别作为小时. 分. 秒的调校键。每按一次键,对应的显示值便加1或减1。分. 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不产生转变)再选一个键用作时钟的复位键.另外选一个键作为秒表的启动/暂停键,再选一个键作为秒表的复位键。
  (5) 软件设计必须应用8031片内定时器,采用定时中断结构,不得应用软件延时法。
  (6) 上机调试程序。
  (7) 写出设计报告。
1.3设备及工作环境
  (1) 硬件:盘算机一台、ZY15MCU12BD型综合单片机实验箱一台、通信电缆一根。
  (2) 软件:Windows操纵系统、Keil C51软件。

                      第二章 硬件计划
2.1 设计思路
   电子时钟程序由显示模块、校时模块和时钟运算模块三大部分组成。其中校时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒算到60时,要自己清零并向分进1;分算到60时,要自己清零并向时进1;时算到24时,要清零。这样,才能循环记时。秒表程序也由显示模块,启动/暂停复位模块和时钟运算模块组成。其中校时模块和时钟模块要对1/100秒,1/10秒,秒,分的数值进行操作并且1/100秒算到10时,要自己清零并向1/10秒进1;1/10秒算到10时,要自己清零并向秒进1;秒时算到60时,要自己清零并向分进1,秒时算到60时,要自己清零。用按键决定是进入时钟程序还是秒表程序。
2.2 原理电路图

2.3 硬件工作原理论述

硬件由8031芯片、74LS373锁存器、8255A串口芯片、74LS240驱动器、显示器数码显示管和4*4键盘组成.由8031片内定时器定时中断,并取一存储单元作为计数器应用,每中断一次,在中断服务程序中使计数器加1、用8031片内定时器T0定时中断服务程序完成秒、分、时的运算即计时功效,T1定时中断服务程序完成1/100秒、1/10秒、秒,分的运算即秒表功效。8255A负责将内存里的时位、分位和秒位数值或1/100秒、1/10秒、秒,分位数值输出到数码管。同时按键01键、02键、03键是分别对时、分、秒的加1校订;05键、06键、07键时分别对时、分、秒的减1校订;00键是清零键。并且开机时时钟时从000000开端计时的,到235959时在回到000000.09键实现秒表的启动/暂停,0A0键实现秒表的复位。
                  第三章软件计划


3.1 分析论证
此时钟秒表的设计与实现,主要采用了6只显示器数码管8031内部二进制16位定时器/计数器,可编程并行I/O接口8255芯片和矩阵键盘等,包含显示模块,运算模块和校时模块三大功效模块。
3.1.1、显示模块:
用8255,数码管的显示功效来设计。显示部分硬件用六只显示器为显示管,这些显示器发光二极管的阳极是互相连接在一起的,所以称为共阳极数码管。通过在这8只发光二极管的阴极加-5 V或0 V的电压使不同的二极管发光,形成不同的数字。该模块重要是将运算模块和校时模块运算出来并存放在内存单元里的十六进制表现的时位、分位和秒位或或1/100秒、1/10秒、秒,分数值转化为十进制,并通过6只数码管显示出来。该模块实现的硬件是实验箱中的显示器单元,采用软件译码,即在程序中设置一个段选码表。CPU直接往显示器输出八段代码,省去了硬件译码器。只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现由左向右使6只显示器依次呈现数字显示。
3.1.2、运算模块:
该模块的重要功效是对时、分、秒或或1/100秒、1/10秒、秒,分的运算,并把运算出的终极成果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可以细分为定时模块和运算模块。定时模块负责供给中断信号,由于CPU运算模块中的指令耗费必定的时间,所以中断信号最好通过硬件来实现。本实验中用8031定时器/计数器,但由于8031供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。中断信号是8031工作方法为方法1,产生一个50ms的脉冲信号。运算模块负责时、分、秒或或1/100秒、1/10秒、秒,分的计算,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1 、秒清零;当分加到60时,时加1、分清零。当时加到24时,直接清零,然后转到调用处。秒表也是如此。
3.1.3、校时模块:
该模块重要功效是修正时、分、秒内存单元的数值。每按一次键,对应的显示值便加1。分、 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不产生转变)。要注意在主程序中对时间进行调校前应封闭中断,以防在调校过程中定时中断服务程序也对时间进行修正而造成混杂。

3.1.4、启动/暂停,复位模块

该模块的功能是实现秒表的启动/暂停,复位。本实验中第一次按下09键进入秒表程序,开始跑时,第二次按下09键暂停秒表,按下0A0键秒表清零并返回到主程序
3.1.5、整体功效:
在6块显示器数码管上能实现数字时钟的时、分、秒显示和秒表,并能对时、分、秒进行加1校订、减1校订和清零。本实验中01键、02键、03键是分别对时、分、秒的加1校订;05键、06键、07键时分别对时、分、秒的减1校订;00键是清零键。并且开机时时钟时从000000开端计时的,到235959时在回到000000.
3.2 程序流程图

 


                    

 


主程序流程图

 

3.3程序清单

        

      ORG 0000H

      LJMP START

      ORG 000BH

      LJMP INTT0

      ORG 001BH

      LJMP INTT1

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 ;;           主 程 序                 ;;

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

START: MOV SP, #60H

       MOV R0, #5

LOOP1: MOV R1, #200

LOOP2: MOV R2, #250

       DJNZ R2, $

       DJNZ R1, LOOP2

       DJNZ R0,LOOP1    ;延时0.5S

       MOV DPTR,#4003H  ;8255初始化

       MOV A, #81H

       MOVX @DPTR, A

       MOV R0, #20H

       MOV R7, #07H

CLEAR: MOV @R0, #00H

       MOV @R1, #00H

       INC R0

       DJNZ R7,CLEAR  ;20H-26H 30H-36H清零

       MOV TMOD,#11H  ;选择方法.

       MOV TH1, #0D8H

       MOV TL1, #0F0H

       MOV TH0, #3CH

       MOV TL0,#0B0H  ;赋初值

LOOP: SETB EA

      SETB ET0

      SETB TR0  ;启动T0计数

      LCALL DISPLAY1   ;调用时钟显示程序

      LCALL KEYSCAN     ;键盘扫描

      CJNE A,#0FFH, CHOOSE ;若有键按下,则CHOOSE

      SJMP CLOCK ;无键按下,则转LOOP

CHOOSE: CJNE A, #09H,CLOCK

       LJMP SECONDS ;若秒表启动键按下,则进入秒表

CLOCK: LCALL DISPLAY1

      LCALL KEYSCAN ;再次扫描键盘

      CJNE A,#0FFH,SET_A;若有键按下则进入调校

      SJMP LOOP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           秒表 程 序              ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SECONDS: MOV 30H, #00H

        MOV 31H, #00H

        MOV 32H, #00H

        MOV 33H, #00H

        MOV 34H, #00H

        MOV 35H, #00H

SETB TR1

LOOP3: SETB ET1

      LCALL DISPLAY2

      LCALL KEYSCAN

      CJNE A,#0FFH,PAUSE;若有键按下,则PAUSE

      SJMP LOOP3

PAUSE:CLR ET1 ;关中断

      CJNE A, #09H, RESET1

      CPL TR1;暂停

      SJMP LOOP3

RESET1: CJNE A, #0AH, LOOP5

       MOV TH1, #0D8H

       MOV TL1, #0F0H

       SETB TR1

       MOV 30, #00H

       MOV 31, #00H

       MOV 32, #00H

       MOV 33, #00H

       MOV 34, #00H

       MOV 35,#00H;清零

       CLR TR1

       LCALL DISPLAY2

       LJMP LOOP

LOOP5: AJMP LOOP3

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           加1子 程 序              ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

SET_A: CLR ET0  ;关中断

         CJNE A,#03H,ADDMM ;按下的键为秒键往下履行

         INC 25H

         MOV A, 25H

         CJNE A, #10, LOOP4

         MOV 25H, #0

         INC 24H      

         MOV A, 24H

         CJNE A, #6, LOOP4

         MOV 24H, #0

         SJMP LOOP

ADDMM: CJNE A,#02H,ADDHH ;按下的键为分键往下履行

       INC 23H

       MOV A, 23H

       CJNE A, #10, LOOP4

       MOV 23H, #0

       INC 22H

       MOV A, 22H

       CJNE A, #6, LOOP4

       MOV 22H, #0

       LJMP LOOP

ADDHH: CJNE A,#01H,REST ;按下的键为小时键往下履行

       INC 21H

       MOV A, 21H

       CJNE A, #10, A_HOUR

       MOV 21H, #0

       INC 20H

REST: CJNE A,#00H,DECSS

       MOV 20H, #00H 

       MOV 21H, #00H

       MOV 22H, #00H

       MOV 23H, #00H

       MOV 24H, #00H

       MOV 25H, #00H

A_HOUR: MOV A, 20H

       SWAP A

       ORL A, 21H

       CJNE A, #24H, LOOP4

       MOV 20H, #0

       MOV 21H, #0

LOOP4: LJMP LOOP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           减1子 程 序              ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

SET_D: LJMP LOOP

DECSS: CJNE A,#07H,DECMM

       MOV A, 25H

       DEC 25H

       CJNE A, #0, SET_D

       MOV 25H, #9

       MOV A, 24H

       DEC 24H

       CJNE A, #0, SET_D

       MOV 24H, #5

       SJMP SET_D

DECMM: CJNE A, #06H, DECHH

       MOV A, 23H

       DEC 23H

       CJNE A, #0H, SET_D

       MOV 23H, #9

       MOV A,

       DEC 22H

       CJNE A, #0, SET_D

       MOV 22H, #5

       SJMP SET_D

DECHH: CJNE A,#05H,SET_D

       MOV A, 21H

       CJNE A, #0, D_HOUR1

       MOV A, 20H

       CJNE A, #0,D_HOUR2

       MOV 21H, #3

       MOV 20H, #2

       SJMP SET_D

D_HOUR1: DEC 21H

       LJMP SET_D

D_HOUR2: DEC 20H

        MOV 21H, #9

       LJMP SET_D

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           时钟显示程序                  ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 显示数据在20H-25H单元内,用六位LED共阳数码管显示,

DISPLAY1: MOV PSW, #08H

     MOV R0, #20H

     MOV R2, #0FEH

LD0: MOV A,@R0

        MOV DPTR, #DTAB

        MOVC A,@A+DPTR  ;查字形代码

        MOV DPTR,#4001H  ;字形代码送B段口

        MOVX @DPTR, A

        MOV A, R2

        MOV DPTR,#4000H  ;字形代码送A位口

        MOVX @DPTR, A 

        MOV R1, #250

        DJNZ R1, $

        MOV A,#0FFH  ;封闭所有的显示位即位口置高电平

        MOVX @DPTR, A

        MOV A, R2

        RL A

        MOV R2, A

        INC R0

        CJNE R0, #26H,LD0

        RET

DTAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H

  DB 92H, 82H, 0F8H, 80H, 90H

  DB 88H, 83H, 0C6H, 0A1H, 86H

DB 8EH, 40H, 79H, 24H, 30H

DB 19H, 12H, 02H, 78H, 00H

DB 80H, 08H, 03H, 46H, 21H

DB 06H, 0EH, 0BFH, 0FFH

    

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           秒表显示程序                  ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 显示数据在30H-35H单元内,用六位LED共阳数码管显示,

DISPLAY2: MOV PSW, #08H

     MOV R0, #30H

     MOV R2, #0FEH

LD1: MOV A,@R0

        MOV DPTR, #DTAB1

        MOVC A,@A+DPTR  ;查字形代码

        MOV DPTR,#4001H  ;字形代码送B段口

        MOVX @DPTR, A

        MOV A, R2

        MOV DPTR,#4000H  ;字形代码送A位口

        MOVX @DPTR, A 

        MOV R1, #250

        DJNZ R1, $

        MOV A,#0FFH  ;封闭所有的显示位即位口置高电平

        MOVX @DPTR, A

        MOV A, R2

        RL A

        MOV R2, A

        INC R0

        CJNE R0, #36H,LD1

        RET

DTAB1: DB 0C0H,  0F9H , 0A4H, 0B0H, 99H

  DB 92H, 82H, 0F8H, 80H, 90H

  DB 88H, 83H, 0C6H, 0A1H, 86H

DB 8EH, 40H, 79H, 24H, 30H

DB 19H, 12H, 02H, 78H, 00H

DB 80H, 08H, 03H, 46H, 21H

DB 06H, 0EH, 0BFH, 0FFH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           键盘扫描程序             ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KEYSCAN: MOV DPTR, #4002H

     MOV A, #0FH

     MOVX @DPTR, A

     MOVX A,@DPTR

     ANL A, #0FH

     CJNE A, #0FH,NEXT

     SJMP DONE

NEXT: MOV R2, #0EFH

KEYSM1: MOV A, R2

       MOV DPTR, #4002H

       MOVX @DPTR, A

       MOVX A,@DPTR

       ANL A, #0FH

       CJNE A, #0FH, NEXT1

KEYSM2: MOV A, R2

       RL A

       MOV R2, A

       JB ACC.0, KEYSM1

DONE: MOV A, #0FFH

       RET

NEXT1: MOV R6, A

       MOV R3, #100

LOOP9: MOV R4, #100

       DJNZ R4, $

       DJNZ R3, LOOP9

       MOVX A,@DPTR

       ANL A, #0FH

       XRL A, R6

       JNZ KEYSM2

LOOP20: MOVX A,@DPTR

       ANL A, #0FH

       CJNE A, #0FH, LOOP20

       MOV A, R6

       ANL A, #0FH

       MOV R6, A

       MOV A, R2

       ANL A, #0F0H

       ORL A, R6

       CALL KEY20

       RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           查键值程序             ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KEY20: PUSH ACC

       MOV R1, #00H

KEY21: JNB ACC.4, KEY22

      RR A

      INC R1

      SJMP KEY21

KEY22: MOV A, R1

      MOV B, #4

      MUL AB

      MOV R1, A

      POP ACC

KEY23: JNB ACC.0,KEY24

       RR A

       INC R1

       SJMP KEY23

KEY24: MOV DPTR, #KEYTAB

      MOV A, R1

      MOVC A,@A+DPTR

      RET

KEYTAB: DB 0FH, 0BH, 07H, 03H

DB 0EH, 0AH, 06H, 02H

DB 0DH, 09H, 05H, 01H

DB 0CH, 08H ,04H, 00H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           T1中断服务程序              ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

INTT1: PUSH ACC

       PUSH PSW

       MOV TH1, #0D8H

       MOV TL1, #0F0H

       INC 35H

       MOV A, 35H

       CJNE A,#10,OUTT1;未到1秒,则转RETURN

       MOV 35H, #00H

       INC 34H  ;到1秒,秒单元的个位加1

       MOV A, 34H

       CJNE A, #10, OUTT1;

       MOV 34H, #00H

       INC 33H

       MOV A, 33H

       CJNE A,#10,OUTT1;未到60秒,则转

       MOV  33H , #00H

       INC 32H ; 分单元个位加1

       MOV A, 32H

       CJNE  A , #06,OUTT1

       MOV 32H, #00H

       INC 31H

       MOV A, 31H

       CJNE A,#10H,CCC ;若未到60分,则转

       MOV A, 30H

       CJNE A, #06H, CCC

       MOV 31H, #00H

       MOV 30H, #00H

CCC: CJNE A, #10, OUTT1

      MOV 31H, #00H

      INC 30H

      MOV A, 30H

OUTT1: POP PSW

       POP ACC

       RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;           T0中断服务程序              ;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;T0中断服务程序

INTT0: PUSH ACC

       PUSH PSW

       MOV TH0, #3CH

       MOV TL0, #0B0H

       INC 26H

       MOV A, 26H

       CJNE A,#20,OUTT0 ;未到1秒,则转RETURN

       MOV 26H, #00H

       INC 25H  ;到1秒,秒单元的个位加1

       MOV A, 25H

       CJNE A, #10, OUTT0;

       MOV 25H, #00H

       INC 24H

       MOV A, 24H

       CJNE A,#6,OUTT0;未到60秒,则转

       MOV 24H, #00H

       INC 23H ; 分单元个位加1

       MOV A, 23H

       CJNE A, #10, OUTT0

       MOV 23H, #00H

       INC 22H

       MOV A, 22H

       CJNE A,#06H,OUTT0 ;若未到60分,则转

       MOV 22H, 00H

       INC 21H

       MOV A, 21H

       CJNE A, #4H, CCCC

       MOV A, 20H

       CJNE A, #2H, CCCC

       MOV 21H, #00H

       MOV 20H, #00H

CCCC: CJNE A, #10, OUTT0

      MOV 21H, #00H

      INC 20H

      MOV A, 20H

OUTT0: POP PSW

       POP ACC

       RETI

       END

更多相关推荐:
《单片机课程设计》报告

机械与车辆学院单片机课程设计报告20xx20xx学年第一学期课程设计题目水塔水位控制系统姓名学号班级指导老师职称时间成绩单片机课程设计考查评分表2目录一课程设计性质和目的4二课程设计的内容及要求41硬件设计42...

单片机课程设计报告

物理与机电学院课程设计报告课程名称:单片机课程设计系部:物理与机电工程学院专业班级:07级电子信息工程(1)班完成时间:20XX年5月24日~28日报告成绩:【摘要】单片机自1976年由Intel公司推出MCS…

51单片机课程设计报告。

成绩单片机原理及应用课程设计课程名ltlt单片机原理及应用gtgt学部专业学号姓名指导教师日期20xx年06月一设计任务与要求1任务制作并调试51单片机学习板2要求1了解并能识别学习板上的各种元器件会读元器件标...

流水灯单片机课程设计报告

井冈山大学机电工程学院单片机课程设计报告课程名称单片机设计题目流水灯姓名覃家应陈东阳专业生物医学工程班级10级医工本一班学号100615062指导教师王佑湖20xx年11月10日目录1引言211设计任务212设...

单片机课程设计报告范例

单片机课程设计示例交通灯控制系统设计一总体设计1设计要求交通灯的任务要求为模拟十字路口的交通灯的亮灭及闪烁基本工作原理根据交通灯的亮灭情况可以分为四种状态利用定时计数器每20秒产生一次中断每产生一次中断后由是否...

51单片机电子时钟课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20xx级电工2班学号20xx401020xx2姓名王贞指导教师邹云峰提交日期20xx...

基于51单片机课程设计报告

课题:基于51单片机的数字温度计设计专业:电气工程及其自动化班级:4学号:***设计日期:20XX/6/3成绩:重庆大学城市科技学院电气学院基于51单片机数字温度计设计报告一、设计目的作用本设计是一款简单实用的…

60秒倒计时器-单片机课程设计报告

倒计时器一设计要求由单片机接收小键盘阵列设定倒计时时间倒计时的范围最大为60分钟由LED显示模块显示剩余时间显示格式为XX分XX秒X精确到01s的整数倍倒计时到由蜂鸣器发出报警绘制系统硬件接线图并进行系统仿真和...

单片机课程设计报告

单片机原理及接口技术课程设计题目简易计算器设计班级电子1547姓名苏丹丹李静齐倩学号05号17号11号指导教师张老师时间20xx年12月西安航空学院电气学院目录一选题的背景和意义111选题的背景112选题的意义...

单片机课程设计报告

程课程名称设计题目学院学生姓名学号专业班级指导教师设计说明书单片机原理及应用电子信息与电气工程学院王宗康20xx020xx004电子信息工程一班年月日课课程设计任务书4位DIP开关控制数码管显示系统设计摘要用A...

单片机原理及应用课程设计报告

《单片机原理及应用》课程设计报告专业:班级:姓名:指导教师:二0##年十二月二十五日单片机原理及应用课程设计任务书一、设计题目:答辩倒计时器二、设计目的1、巩固和加深单片机原理课程知识的理解和运用。2、进一步提…

单片机课程设计报告

单片机课程设计报告步进电机控制设计日期:20##.6.18-6.21目录1、概要2、课程设计目的及要求3、整体系统分析4、硬件系统分析5、软件系统分析6、调试结果7、结论附一:元器件清单附二:源程序1、概要步进…

单片机课程设计报告(45篇)