电子万年历设计

更新时间:2024-03-27 16:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

西安科技大学 电子万年历设计

电子万年历设计

【摘要】

本文通过对一个基于单片机的能实现万年历功能的电子钟的设计,从而达到学习了解单片机的相关指令在各方面的应用。系统主要由8031单片机和8155芯片及显示电路等部分组成,能实现时钟、日历显示功能,能进行时、分、秒的显示。

关键词:单片机 万年历

Abstract: Based on a microcontroller based on the

calendar function toachieve the 10-minute electronic design, study and understanding to achieve the SCM related instructions in all aspects of the application. SCM system is mainly from 8031 and 8155 show circuit chips and components, to achieve clock, calendar display, capable of hours, minutes and seconds of the show.

Key words: SCM calendar

1

西安科技大学 电子万年历设计

目 录

一、 前言 ........................................................................................... 3

二、部件介绍 ................................................................................. 4-11

2.1单片机的性能与结构 ....................................................... 4-5

2.2 8031单片机的引脚功能 ............................................... 6-8 2.3 8155芯片的介绍 ............................................................... 8

2.4 8155引脚及结构 ............................................................ 8-11 三、电路图......................................................................................... 12

四、功能说明及流程图 .................................................................. 13 五 电子万年历制作的程序 ...................................................... 14-43 结 束 语 ............................................................................................ 44 谢 辞 .................................................................................................. 45 文 献 .................................................................................................. 46

2

西安科技大学 电子万年历设计

第一部分 前言

随着现代电子电路的快速发展,以及电子行业对现有电子工程技术的不断需求,特别是对实际操作实践的电子人才的需求越来越多,所以加强学生动手能力﹑重视实践应该是电子发展需求的必然趋向。实践动手能力的培养是一种综合能力,这种能力当然是在一定难度的前提下完成的,通过一定数量的实践才能逐步形成的。因此在培养实践能力的同时,要通过实践来不断的发现问题和解决问题的途径和方法,从而提高实践能力。

近年来,随着单片机档次的不断提高,功能的不断完善,其应用日趋成熟、应用领域日趋扩大,特别是工业测控、尖端武器和日用家电等领域更是因为有了单片机而生辉增色。单片机应用技术已成为一项新的工程应用技术。

本次设计所用到的8031单片机就是其中典型的一种,通过电子万年历的设计,从而达到了学习、设计软硬件的能力。激发了我们的积极性和主动性,培养了我们的创新意识和综合素质。了解电子产品设计与制作的工艺和流程,提高个人基本能力、实验及设计能力和独立工作能力,基本知识更加牢固。

电子设计与制作要求我们有牢固的基础理论知识,这也是将基础理论知识运用到实际中的重要一步。而对于我们所学的电子专业来说,课程设计实习将对以后的工作起到很重要的作用。

本次设计因本人水平有限,难免有失误不当之处,还请各位老师能够指教。

编者语

3

西安科技大学 电子万年历设计

第二部分 部件介绍

2.1 80C51单片机的性能及结构

在一般工业领域,8位通用型单片机,仍然是目前应用最广的单片机。在众多通用8位单片机中,以MCS-51系列产品最大、派生产品较多,成为单片机应用中的主流系列。8031系列单片机是以美国Intel公司的8051、8031为核心。MCS-51系列单片机是一种高性能的8位单片机,它是在MCS-48的基础上推出的第二代单片机,它封装为40个引脚。芯片内部集成有;

8位CPU

128B的数据存储器

64K的片外程序存储器寻址能力 64K的片外数据存储器寻址能力 32根输入/输出线 1个全双工异步串行口 2个16位定时/记数器 5个中断源,2个优先级

8031片内没有程序存储器,当在单片机芯片外扩展EPROM后,就相当于一片8031,此种应用方式灵活方便。

8031单片机内部结构

8031系列单片机的内部结构和8051相同如图1-1所示,现分述各部分的组成。

图1-1 8031芯机结构框图

1.中央处理器(CPU)

这是单片机的核心,它完成运算和控制功能。运算是由算术逻辑单元(ALU)为主的“运算器”完成的。而控制则是由包括时钟振荡器在内的“控制器”完成的,其主要功能是对指令码进行译码,然后在时钟信号的控制下,使单片机的内

4

西安科技大学 电子万年历设计

外电路能够按一定的时序协调有序地工作,执行译码后的指令。

2.内部RAM

8031系列单片机共有256个字节的RAM单元,但只有地址为00~~7FH这128个单元作为片内随机存储器(RAM)使用,而高128个单元的一部分被特殊功能寄存器(SFR)占用。SFR只有18个,共占用21个单元。其余未被占用的107个单元,用户不能够使用。

3.内部ROM

8031单片机内有4KB掩膜ROM,这些只读存储器用于存放程序、原始数据或表格,所以称为程序存储器,8751单片机片内有4KB的EPROM型只读存储器。

4.定时器/计数器

8031系列单片机内部有两个16位的定时/计数器T0、T1,以完成定时和计数的功能。通过编程,T0(或T1)还可以用作13位和8位定时/计数器。

5.并行口

8031单片机内部共有四个输入输出口,一般称为I/O口,即P0、P1、P2、P3

口,每个口都是8位。原则上四个口都可以作为通用的输入输出口,但对初学者来说,一般用8031型单片机,它片内没有ROM,需用P0口作为低8位地址、数据线的分时复用口,即相当于计算机的AD0~AD7线。而P2口作为高8位地址的复用口,即A8~A15地址线。P3口各个管脚又有不同的第二功能,例如,读、写控制信号等。所以,只有P1口可作为通用的I/O口使用。另外,有时还需要在片外扩展I/O口。

6.串行口

8031系列单片机有一个全双工的串行I/O口,以完成单片机和其他计算机或通信设备之间的串行数据通信,单片机使用P3口的RXD和TXD两个管脚进行串行通信。

7.中断系列

8031系列单片机内部有很强的中断功能,以满足控制应用的需要。它共有5个中断源,即外部中断源2个,定时/计数器中断源2个,串行中断源1个。

8.CPU内部总线和外部总线

CPU通过内部的8位总线与各个部件连接,并通过P0口和P2口形成内部16位地址总线连接到内部ROM区。外部三总线则是包括由P0口组成的数据总线(DB)(分时复用);由P0口和P2口组成的16位地址总线(AB)(P0口分时复用);由PSEN、EA、ALE和P3口部分管脚(读信号RD及写信号WR)组成的控制总线(CB)。

5

西安科技大学 电子万年历设计

2.2 8031单片机的引脚及其功能

8031系列单片机大都采用40个引脚的双列直插式(DIP)塑料封装的芯片,其引脚示意及功能分类如图1-2所示。也有采用方型封装的,但为44个引脚,其中4个引脚是不使用的。

各部分引脚定义如下:

1. 电源部分:主电源引脚Vcc和Vss Vcc(40脚): 接+5 V电源正端; Vss(20脚): 接+5 V电源地端。

2. 晶振部分:外接晶体引脚XTAL1和XTAL2

XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。 当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。

XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端;对于CHMOS芯片,该引脚悬空不接。

 (a) 管脚图 (b) 8031 引脚功能分类

图 1-2 MCS-51单片机引脚及总线结构

3. 控制信号:控制信号引脚有RST/VPD、ALE/PROG、PSEN和EA/VPP等4种形式。

(1) RST/VPD(9脚):RST即为RESET,是复位信号,一般外接RC电路和

6

西安科技大学 电子万年历设计

复位按键,每当上电或按动复位键时,利用该引脚外部来的正脉冲使单片机初始化,一般若该引脚保持两个机器周期高电平,就能使单片机复位,实现可靠复位操作。VPD作为备用电源输入端,是该引脚的第二功能。当VCC失电期间,由VPD向片内RAM提供电源,以保护其中内容。所以该引脚为单片机的上电复位或掉电保护端。

(2)ALE/PROG(30脚):第一功能称为“低8位地址锁存输出允许信号”, ALE信号以每机器周期两次的信号输出,用于锁存出现在P0口的低8位地址,即从该引脚输出的由高向低的下降沿,可使从P0口输出的低8位地址锁存到外接地址锁存器中。第二功能用于在EPROM编程时,作为编程脉冲输入端。当固化内部EPROM时,从该管脚输入编程脉冲信号。

(3)EA/VPP(31脚):同样是一个复用引脚,称为“读外部程序存储器允许/EPROM编程电源引脚”。第一功能用于输入从外部程序存储器取指或从内部程序存储器取指的选择信号。当EA接高电平时,将从内ROM开始访问,但地址范围超过内部ROM的最大容量(4K字节)时,将自动转向外ROM取指令;EA接低电平时,将直接从外ROM开始取指,即所有指令均在片外读取。

(4)PSEN(29脚):片外程序存储器读选通(输出允许)信号输出端,用于输出外部程序存储器选通信号。在对外部程序存储器取指操作时,PSEN置有效(低电平),被选中的外部存储单元中的内容将出现在数据总线上,然后被读入CPU中;在执行片内程序存储器取指时,PSEN为无效(高电平)。

4. 并行输入/输出(I/O)口

8051单片机共有4个8位I/O口,称为P0口、 P1口、 P2口及P3口,总 共32个引脚。每个口的引脚为8个。

P0口(39脚~32脚):P0.0~P0.7统称为P0口。

P1口(1脚~8脚):P1.0~P1.7统称为P1口, 可作为准双向I/O接口使用。 P2口(21脚~28脚):P2.0~P2.7统称为P2口, 一般可作为准双向I/O接口。

P3口(10脚~17脚):P3.0~P3.7统称为P3口。 并行I/O口应用要点如下:

(1)P0口是一个三态双向口, 可作为地址/数据分时复用口, 也可作为通用I/O接口。当P0口作为地址/数据分时复用总线时, 可分为两种情况: 一种是从P0口输出地址或数据,另一种是从P0口输入数据。P0口作为通用I/O使用时是一准双向口。P0口每一个引脚可驱动8个TTL门电路。

(2)P1口为准双向口。从功能上来看P1只有一种功能, 即通用I/O接口, 具有输入、输出、端口操作3种工作方式, 每1位口线能独立地用作输入或输出线。

7

西安科技大学 电子万年历设计

P1口每一个引脚可驱动4个TTL门电路。

(3)P2口也是一准双向口, 它具有通用I/O接口或高8位地址总线输出两种功能。作为通用I/O接口,其工作原理与P1相同, 也具有输入、输出、 端口操作三种工作方式, 负载能力也与P1口相同。

(4)P3口除了可作为通用准双向I/O接口外, 每1根线还具有第2功能。当P3口作为通用I/O接口时, 在这种情况下, P3口仍是1个准双向口, 它的工作方式、负载能力均与P1、P2口相同。当P3口作为第2功能时,各引脚功能见表2.1.1所示。

(5)四个口的各个引脚都可作为通用I/O使用,但当某一引脚作为输入使用前,必须先使该引脚置“1”(这是由4个8位并行I/O口的结构所决定的,此种状态下的各口也被称为准双向口)。单片机复位后,四个口的32个引脚均为高电平(已自动置为1),但用户在自己的初始化程序中,应考虑到所使用的引脚是否符合要求。

2.3 8155芯片介绍:

Intel 8155芯片内包含有256个字节RAM,2个8位、1个6位的可编程并行I/O口和1个14位定时器/计数器。8155可直接与MCS-51单片机连接不需要增加任何硬件逻辑。由于8155既有RAM又具有I/O口,因而是MCS-51单片机系统中最常用的外围接口芯片之一

2.4 8155的引脚及内部结构如下图:

图 1-3 8155管角图

8

西安科技大学 电子万年历设计

图1-4 内部结构图

8155共有40个引脚,采用双列直插式封装。各引脚功能如下:

AD7~AD0:地址数据总路线。单片机和8155之间的地址、数据、命令、状态信息都是通过它传送的。

/CE:片先信号线,低电平有效 /RD:存储器读信号线,低电平有效。 /WR:存储器写信号线,低电平有效、

ALE:地址及片选信号锁存线,高电平有效,其后沿将地址及片选信号锁存到器件中。

IO//M:I/O接口与存储器选择依赖线,高电平表示选择I/O接口,低电平选择存储器。

PA7~PA0:A口输入/输出线。 PB7~PB0:B口输入/输出线。

PC5~PC0:C口输入/输出或控制信号线。用作控制信号线时,其功能如下: PC0:A INTR(A口中断信号线)。 PC1:A BF(A口缓冲器满信号线)。

9

西安科技大学 电子万年历设计

PC2:/ASTB(A口选通线)。 PC3:B INTR(B口中断信号线)。 PC4:B BF(B口缓冲器满信号线)。 PC5:/BSTB(B口选通线)。 TIMER IN:定时器/计时器输入端。 /TIMER OUT:定时器/计数器输出端。 RESET:复位信号线。 VCC:+5V电源。 VSS:地。

8155内部结构包括两个8位并行输入/输出端口,一个6位并行输入/输出端口,256个字节的静态随机存取存储器RAM,一个地址锁存器,一个14位的定时器/计数器以及控制逻辑电路,各部件和存储器地址的选择由IO//M信号决定。

当IO//M=0(低电平)时,表示AD7~AD0输入的是存储器地址,寻址范围为00H~FF。

当IO//M=1(高电平)时,表示AD7~AD0输入的是I/O接口地址,其编码如下表所示。其中A7~A3可经译码器进行译码,产生片选信号/CE,内部寄存器和口地址由A2~A0给出。 AD7~AD0 A7 A6 A5 A4 A3 A2 A1 A0 X X X X X 0 0 0 X X X X X 0 0 1 X X X X X 0 1 0 X X X X X 0 1 1 X X X X X 1 0 0 X X X X X 1 0 1 寄存器 命令/状态寄存器(命令状态口) A口 B口 C口 定时器低8位 定时器高6位和2位计数方式位 7 6 5 4 3 2 1 0

PA:0-A口输入 1-A口输出 PB:0-B口输入 1-B口输出 PC2、PC1:

00=ALT1:A口,B口基本输入输出,C口输入 01=ALT2:A口,B口基本输入输出,C口输出 10=ALT3:A口选通输入输出,B口基本输入输出 PC0:AINTR,PC1:ABF,PC2:/ASTB,PC3-PC5输出 11=ALE4:A口,B口选通输入输出

PC0:AINTR,PC1:ABF,PC2:/ASTB,PC3:BINTR,PC4:BBF PC5:/BSTB

10

西安科技大学 电子万年历设计

IEA:1-允许A口中断;0-禁止A口中断 IEB:1-允许B口中断;0-禁止B口中断 TM2、TM1:

00:空操作,不影响计数操作 01:停止定时器计数

10:若定时器正在计数,计数长度减速为0停止计数

11:启动,置方式和长度后立即启动,若正在运行表示 置新的方式和定时器长度,计数结束后,按新的方式和长度计数。

B、工作方式:

在8155的逻辑部件中,设置有一个控制命令寄存器和一个状态标志寄存器。8155的工作方式由CPU写入控制命令寄存器中的控制字来确定。控制命令寄存器只能写入不能读出,8位控制命令寄存器的低4位用来设置A口、B口和C口的工作方式。第4、5位用来确定A口、B口以选通过输入输出方式工作时是否允许中断请求。第6、7位用来设置定时器/计数器的操作。工作方式控制字的格式如上图所示:

8155的A口、B口 可工作于基本I/O方式或选通方式,C口 可作为输入输出口线,也可作为A口、B口 选通方式工作时的状态控制信号线,其工作情况与8255方式0,方式1时大致相同,控制信号的含义也基本一样。

另外,在8155中还设置有一个状态标志寄存器,用来存放A口和B口的状态标志,状态标志寄存器的地址与命令寄存器地址相同,CPU只能读出,不能写入。状态标志寄存器的格式如下图所示,所以CPU可以直接查询。

D7 X D6 TMER D5 INTEB D4 BBF D3 INTRB D2 INTEA D1 ABF D0 INTR INTR:中断请求 INTE:端口中断允许 BF:缓冲器满标志 TIMER:定时中断 C、定时器/计数器

在8155中还设置有一个14位的定时器/计数器,可用来定时或对外部事件计数,CPU可通过程序选择计数长度和计方式。计数长度和计数方式由输入给计数寄存器计数控制字来确定,计数寄存器的格式如下:

TL(04H) D7 D0 T7 T6 T5 T4 T3 T2 T1 T0 TH(05H) D7 D0

M2 M1 T13 T12 T11 T10 T9 T8 11

西安科技大学 电子万年历设计

第三部分电路图

8031与8155连接图:

P0AD0~AD7ALECEIO/MWRRDRESET图1-5

PAPB8031ALEP2.7P2.0WRRD8155PCTINTOUT EARESET 电子万年历电路图

LED1764219105abcdefgdpafegdbcdpLED2764219105abcdefgdpafegdbcdpLED3764219105abcdefgdpafegdbcdpLED4764219105abcdefgdpafegdbcdpLED5764219105abcdefgdpafegdbcdpG13G1G2G1G2G1G1G2G2383833U11918171615141312P1.7P1.6P1.5P1.4P1.3P1.2-P1.1+P1.0P3.7P3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXDX110987632C153.58MHz4JT30PC230pFRSTAT89C2051110uFR010KVCCC0VCCS1S2VT19012BUZ8VCCR210KX288G2 图1-6 万年历电路

12

西安科技大学 电子万年历设计

第四部分 功能说明及调整流程

(1)校时

(2)8路定时时间查询

按下S1键依次显示定时时间。星期位显示:“H”表示打开当前定时输出。“L”表示关闭当前定时输出。此时按S2键可进行“H”/“L”的切换。

(3)显示状态的控制

按K2可进入以下工作状态的循环切换:

12小时/日月交替显示—12小时固定显示—24小时/日月交替显示—24小时固定显示—12小时/日月交替显示。

(4)校时

按下S2键并保持3秒后,进入校时菜单。按下S1键进入校时状态:分、时、天、月、年、微调系数。此时按S2键,完成+1。当显示“D”时,表示要调整微调系数(0—99),其值越小,时钟走的越慢。当使用的6MHZ的晶振偏差越大时,应仔细调整微调系数。当显示“OUT”时,按 S2键就可以退出。退出后,按任意键即可启动时钟。

(5)设置定时时间

按S1键并保持3秒后,进入设置菜单。按下S1键依次进入8路定时调整状态:时、分、此时按S2键,完成+1,按下S2键,即可退出。

图 2-1 万年历调整流程图

13

西安科技大学 电子万年历设计

第五部分 电子万年历制作的程序

FL_250ms BIT 00H FL_500ms BIT FL_250ms+1 Set_Clk_F BIT FL_500ms+1 Set_AL4_F BIT Set_Clk_F+1 AM_F BIT Set_AL4_F+1 FL_3S BIT AM_F+1 AL1_F BIT FL_3S+1 AL2_F BIT FL_3S+2 AL3_F BIT FL_3S+3 AL4_F BIT FL_3S+4

Set_Over BIT AL4_F+1 HA_F BIT Set_Over+1 HA_OVER BIT HA_F+1 FL_MS_F BIT HA_OVER+1 FL_S_F BIT FL_MS_F+1 Key_OVER BIT FL_S_F+1 Key_Data EQU 08H

TimerS EQU Key_Data+1 T_30ms EQU TimerS+1 T_20MS EQU T_30ms+1 T_1S EQU T_20MS+1 K1_Data EQU T_1S+1 K2_Data EQU K1_Data+1 Stat_Work EQU K2_Data+1

Stat_Led EQU Stat_Work+1 T_1ms EQU Stat_Led+1 T_20M EQU T_1ms+1 Beep EQU T_20M AL1 EQU Beep+1 AL2 EQU Beep+2 AL3 EQU Beep+3 AL4 EQU Beep+4 AL5 EQU Beep+5 AL6 EQU Beep+6 AL7 EQU Beep+7 AL8 EQU Beep+8 Ret_Timer EQU AL8+1

; ------------------------------定义计时单元 SEC EQU 23H ;定义秒单元 MIN EQU SEC+1H ;定义分钟单元 Hour EQU MIN+1H ;定义小时单元 Day EQU Hour+1H ;定义日单元

14

西安科技大学 电子万年历设计

Mon EQU Day+1H ;定义月单元 Year EQU Mon+1H ;定义年单元 W_Adj EQU Year+1H ;定义

Week EQU W_Adj+1H ;定义星期单元 ; ------------------------------8路定时单元 AL1_H EQU Week+1H ;1路时单元 AL1_M EQU AL1_H+1H ;1路分单元 AL2_H EQU AL1_M+1H ;2路时单元 AL2_M EQU AL2_H+1H ;2路分单元 AL3_H EQU AL2_M+1H ;3路时单元 AL3_M EQU AL3_H+1H ;3路分单元 AL4_H EQU AL3_M+1H ;4路时单元 AL4_M EQU AL4_H+1H ;4路分单元 AL5_H EQU AL4_M+1H ;5路时单元 AL5_M EQU AL5_H+1H ;5路分单元 AL6_H EQU AL5_M+1H ;6路时单元 AL6_M EQU AL6_H+1H ;6路分单元 AL7_H EQU AL6_M+1H ;7路时单元 AL7_M EQU AL7_H+1H ;7路分单元 AL8_H EQU AL7_M+1H ;8路时单元 AL8_M EQU AL8_H+1H ;8路分单元 Beep_T EQU AL8_M+1

Frist EQU Beep_T+1

; ------------------------------定义显存 Led1 EQU Frist+1 Led2 EQU Led1+1 Led3 EQU Led2+1 Led4 EQU Led3+1 Led5 EQU Led4+1 SP_Data EQU Led5+1

Led_1 BIT P3.5 ;定义数码显示器的位控端口1 Led_2 BIT P3.4 ;定义数码显示器的位控端口2 Led_3 BIT P3.3 ;定义数码显示器的位控端口3 Led_4 BIT P3.2 ;定义数码显示器的位控端口4 Led_5 BIT P3.1 ;定义数码显示器的位控端口5 Beep_F BIT P3.7 Key_F BIT P3.0

T_H_100MS EQU 05DH ;100 ms for 6MHz T_L_100ms EQU 07FH ;C6 for 100ms Timer_NO EQU 8D ;3C90+30D=3CB0H W_Adj_Dat EQU 50D

Key_DA EQU 00000110B Blk_Led EQU 20D DOT_Led EQU 21D

15

西安科技大学 电子万年历设计

F_Led EQU 22D N_Led EQU 23D U_Led EQU 24D T_Led EQU 25D B_Led EQU 26D D_Led EQU 27D

; ------------------------------系统复位程序 ORG 0000H LJMP START

; ------------------------------外中断0入口 ORG 0003H RETI

; ------------------------------T0中断入口 ORG 000BH RETI

; ------------------------------外中断1入口 ORG 0013H RETI

; ------------------------------T1中断入口 ORG 001BH LJMP T1INT

; ------------------------------串行口中断入口 ORG 0023H RETI

; ------------------------------主程序 START: LCALL Clr_Ram ;清内存

MOV SP, #SP_Data ;设置栈区首地址 LCALL INT_T0 LCALL Timer_INT LCALL Timer_20ms STAR_BI:LCALL Clock LCALL Week_Auto LCALL AL_Out LCALL Key_Bord LCALL Key_Del LCALL Set_Clk_AL LCALL Key_Jmp LCALL REBack LCALL Led_Jmp LJMP STAR_BI

; ------------------------------T1中断初始化程序 INT_T0: SETB ET1 ;T1开中断

MOV TMOD, #00010001B ;T1定时方式1 MOV W_Adj, #W_Adj_Dat

16

西安科技大学 电子万年历设计

SETB EA LJMP Adj_W

AL_Led: MOV R0, #AL1_H MOV A, Stat_Work DEC A RL A ADD A, R0 MOV R0, A MOV A, @R0 LCALL BCD_8 MOV Led2, A JNZ AL_1

MOV Led2, #Blk_Led AL_1: MOV A, B ADD A, #10D MOV Led3, A INC R0 MOV A, @R0 LCALL BCD_8 ADD A, #10D MOV Led4, A MOV Led5, B AL_Led_End: RET

Timer_INT: MOV T_1S, #Timer_NO MOV Beep_T, #15D MOV Year, #01D MOV Mon, #011D MOV Day, #06D MOV Hour, #13D MOV MIN, #00D MOV SEC, #00D MOV R7,#16

MOV DPTR, #AL_ASC MOV R0, #AL1_H AL_READ:CLR A MOVC A, @A+DPTR MOV @R0, A INC R0 INC DPTR

DJNZ R7, AL_READ RET

AL_ASC: DB 06D,40D, 06D,50D, 07D,00D, 07D,10D;AM 4_AL DB 07D,15D, 013D,40D, 13D,45D, 14D,15D;PM 4_AL Clock: MOV A, SEC

17

西安科技大学 电子万年历设计

CJNE A, #60D, Clock_End MOV SEC, #00H INC MIN CLR HA_OVER MOV A, MIN

CJNE A, #60D, Clock_End MOV MIN, #00H INC Hour MOV A, Hour

CJNE A, #24D, Clock_End MOV Hour, #00H MOV A, Mon XRL A, #02D JNZ MM_1

MOV DPTR, #Year_D MOV A, Year MOVC A, @A+DPTR LJMP MM_2

MM_1: MOV A, Mon DEC A

MOV DPTR, #MOU_12 MOVC A, @A+DPTR MM_2: MOV B, A INC B INC Day MOV A, Day

CJNE A, B, CLCK_End LJMP CLCK1

CLCK_End :JC Clock_End CLCK1: MOV Day, #01H INC Mon MOV A, Mon

CJNE A, #13D, Clock_End MOV Mon, #01D INC Year MOV A, Year

CJNE A, #100D, Clock_End MOV Year, #00D

Clock_End:LCALL FL_OUT RET

MOU_12: DB 31D, 28D, 31D, 30D, 31D,30D DB 31D, 31D, 30D,31D, 30D,31D

Year_D: DB 29D, 28D, 28D, 28D, 29D, 28D, 28D, 28D, 29D, 28D DB 28D, 28D, 29D, 28D, 28D, 28D, 29D, 28D, 28D, 28D

18

西安科技大学 电子万年历设计

DB 29D, 28D, 28D, 28D, 29D, 28D, 28D, 28D, 29D, 28D DB 28D, 28D, 29D, 28D, 28D, 28D, 29D, 28D, 28D, 28D Week_Auto: MOV A, Year MOV B, #05 MUL AB MOV R4, B MOV R5, A MOV R7, #04 LCALL MUL_2

MOV DPTR, #Mon_Asc MOV A,Mon DEC A

MOVC A, @A+DPTR ADD A, R3

;********************* MOV B, Day ADD A, B

MOV R3, A ;*******JB Mon<=2 ****** MOV A, Mon

CJNE A, #02D, Week_1 LJMP Week_2

Week_1: JC Week_2 Week_3: MOV A, R3 MOV B, #07 DIV AB MOV A, B LJMP Week_4

;*****JB Year=4N ****** Week_2: MOV A, Year MOV B, #04 DIV AB MOV A, B JNZ Week_3 MOV A, R3 DEC A

MOV B, #07 DIV AB MOV A, B

Week_4: MOV Week, A JNZ Week_End MOV Week, #07H Week_End:RET

19

;R3=GS2 西安科技大学 电子万年历设计

Mon_Asc: DB 6D, 2D, 2D, 5D, 0D, 3D, 5D, 1D, 4D, 6D, 2D, 4D AL_Out: JB HA_OVER, AL_Out_End MOV R7, #8D MOV R1, #AL8_M

AL_CH_1:MOV R0, #MIN

MOV R6, #02D ;MIN Hour AL_L: MOV A, @R0 MOV B, @R1

CJNE A, B, AL_CH INC R0 DEC R1

DJNZ R6, AL_L MOV A, R7 DEC A

MOV R0, #AL1 ADD A, R0 MOV R0, A MOV A, @R0 MOV C, ACC.0 CPL C

ANL C, FL_250ms CPL C

MOV Beep_F, C LCALL Beep_OUT AL_CH: CLR C MOV A, R1 SUBB A, R6 MOV R1, A

DJNZ R7, AL_CH_1 AL_Out_End: RET

REBack: MOV A, Stat_Work JZ REBack_End JB AL1_F, KA1 MOV Ret_Timer, SEC SETB AL1_F LJMP REBack_End

KA1: MOV A, Ret_Timer ADD A,#05D MOV B,#60D DIV AB MOV A,SEC

CJNE A, B, REBack_End CLR AL1_F

MOV Stat_Work, #00D

20

西安科技大学 电子万年历设计

REBack_End: RET

Key_Jmp: MOV A, Key_Data JZ Key_Jmp_End MOV Ret_Timer, SEC CJNE A, #01D, KK1 MOV A, Stat_Work

INC A ;K1_Key CJNE A, #9D, KKA1 MOV A, #00D

KKA1: MOV Stat_Work, A LJMP Key_Jmp_End

KK1: MOV A,Stat_Work JNZ KK2

MOV A,Stat_Led INC A

CJNE A, #05D, KKA2 MOV A, #00D

KKA2: MOV Stat_Led, A LJMP Key_Jmp_End KK2: LCALL ALL1 CPL A

MOV @R0, A Key_Jmp_End: RET

ALL1: MOV R0, #AL1 MOV A, Stat_Work DEC A ADD A, R0 MOV R0, A MOV A, @R0 RET

Led_Jmp: MOV A, Stat_Work JNZ Led_AL1 MOV A, Stat_Led LCALL Led_T_D MOV Led1, Week LJMP Led_Jmp_End Led_AL1: LCALL ALL1 MOV Led1, #F_Led JNZ LE_T2

MOV Led1, #N_Led

LE_T2: JB FL_250ms, LE_T4 MOV Led1, #Blk_Led

LE_T4: LCALL AL_Led Led_Jmp_End:

;K2_Key

21

西安科技大学 电子万年历设计

LCALL Led RET

Time_24: MOV A, Hour LCALL BCD_8 MOV Led2, A JNZ TIM4

MOV Led2, #Blk_Led TIM4: MOV Led3, B JB FL_500ms, TIM1 MOV A, B ADD A, #10D MOV Led3, A

TIM1: LCALL Led_Min Time_12_End: RET

Led_Min: MOV A, MIN LCALL BCD_8

JB FL_500ms, TIM2 ADD A, #10D

TIM2: MOV Led4, A MOV Led5, B RET

Date_Led: MOV A, Mon LCALL BCD_8 MOV Led2, A JNZ DA1

MOV Led2, #Blk_Led DA1: MOV A, B ADD A, #10D MOV Led3, A MOV A, Day LCALL BCD_8 MOV Led4, A JNZ DA2

MOV Led4, #Blk_Led DA2: MOV Led5, B Date_Led_End: RET

BCD_8: MOV B, #10D DIV AB RET

Led: MOV P1, #0 MOV DPTR, #Led_Asc

;***************************Led1 MOV A, Led1 MOVC A, @A+DPTR

22

西安科技大学 电子万年历设计

MOV P1, A CLR Led_1 LCALL Timer_1ms LCALL Timer_1ms SETB Led_1

Led_Led2: MOV A, Led2 MOVC A, @A+DPTR MOV P1, A CLR Led_2 LCALL Timer_1ms SETB Led_2

Led_Led3: MOV A, Led3 MOVC A, @A+DPTR MOV P1, A CLR Led_3 LCALL Timer_1ms SETB Led_3

Led_Led4: MOV A, Led4 MOVC A, @A+DPTR MOV P1, A CLR Led_4 LCALL Timer_1ms SETB Led_4

Led_Led5: MOV A, Led5 MOVC A, @A+DPTR MOV P1, A CLR Led_5 LCALL Timer_1ms SETB Led_5

Led_End: MOV P1, #0 RET

;字段顺序:bafhcdeg

Led_Asc: DB 11101110B DB 10001000B ;1 DB 11000111B ;2 DB 11001101B ;3 DB 10101001B ;4 DB 01101101B ;5 DB 01101111B ;6 DB 11001000B ;7 DB 11101111B ;8 DB 11101101B ;9

DB 11111110B ;0. =>10D DB 10011000B ;1.

23

;0 西安科技大学 电子万年历设计

DB 11010111B ;2. DB 11011101B ;3. DB 10111001B ;4. DB 01111101B ;5. DB 01111111B ;6. DB 11011000B ;7. DB 11111111B ;8. DB 11111101B ;9.

DB 00000000B ;BLACK=>20D DB 00010000B ;DOT=>21D DB 00100110B ;L=>22D DB 10101011B ;H=>23D DB 10101110B ;U=>24D DB 00100111B ;T=>25D DB 00101111B ;B=>26D DB 10001111B ;D=>27D Timer_1ms:MOV T_1ms, #030H R2_1: DJNZ T_1ms, R2_1 RET

Timer_20ms:

MOV T_20M, #050D

R2_2: LCALL Clock LCALL Led

DJNZ T_20M, R2_2 LCALL Week_Auto LCALL AL_Out RET

;R4R5/R7=R3 MUL_2:

D457: CLR C MOV A, R4 SUBB A, R7 JC DV50 SETB OV RET

DV50: MOV R6, #8 ;求平均值(R4R5/R7-→R3) DV51: MOV A, R5 RLC A MOV R5, A MOV A, R4 RLC A MOV R4, A MOV F0, C CLR C

24

西安科技大学 电子万年历设计

SUBB A, R7 ANL C, /F0 JC DV52 MOV R4, A DV52: CPL C MOV A, R3 RLC A MOV R3, A DJNZ R6, DV51

MOV A, R4 ;四舍五入 ADD A, #0 ;R4 JC DV53 SUBB A, R7 JC DV54

DV53: INC R3 DV54: CLR OV RET

Clr_Ram: MOV R7, #78H MOV R0, #0BH CLR A

CR: INC R0 MOV @R0, A DJNZ R7, CR RET

Set_Clk_AL:

JNB Set_Clk_F, SEE1 LCALL Set_Clock CLR Set_Clk_F LJMP SEE2

SEE1: JNB Set_AL4_F, SEE2 LCALL Set_AL4 CLR Set_AL4_F SEE2: RET

Led_T_D: MOV DPTR, #Led_Ord_2 MOV B, #02H MUL AB

JMP @A+DPTR

Led_Ord_2:LJMP Led_K0_1 LJMP Led_K1_1 LJMP Led_K2_1 LJMP Led_K3_1 LJMP Led_K4_1

Led_K0_1:LCALL TIME_12 JNB FL_3S, LK_1

25

西安科技大学 电子万年历设计

LCALL Date_Led

LK_1: LJMP Led_Jmp_4_End Led_K1_1:LCALL TIME_12 LJMP Led_Jmp_4_End Led_K2_1:LCALL Time_24 JNB FL_3S, LK_2 LCALL Date_Led

LK_2: LJMP Led_Jmp_4_End Led_K3_1:LCALL Time_24 LJMP Led_Jmp_4_End

Led_K4_1:MOV Led1, #Blk_Led MOV Led2, #Blk_Led MOV Led3, #DOT_Led MOV A, SEC LCALL BCD_8 ADD A, #10D MOV Led4, A MOV Led5, B Led_Jmp_4_End: RET

Set_AL4: MOV K1_Data, #01D MOV K2_Data, #01D CLR Set_Over LCALL Led_AL LCALL Key_Bord LCALL SF_Key

MOV Key_Data, #0 MOV Frist, #0 Set_AL42:LCALL Clock LCALL Week_Auto LCALL Led_AL LCALL Key_Bord LCALL Key_Del LCALL Key_AL

JNB Set_Over, Set_AL42 CLR A

MOV K1_Data, A MOV K2_Data, A MOV Key_Data, A MOV Frist, A RET

Key_AL: MOV A, Key_Data JNZ $+3 RET

26

西安科技大学 电子万年历设计

CJNE A, #01D, K2_AL

INC K1_Data ;(1-9) MOV A, K1_Data

CJNE A, #19D, K2_AL_End MOV K1_Data, #01D LJMP K2_AL_End

K2_AL: MOV A, K1_Data CJNE A, #018D, K2E SETB Set_Over LJMP K2_AL_End

K2E: MOV R0, #AL1_H DEC A ADD A, R0 MOV R0, A INC @R0 LCALL JJ_Bit MOV B, #24D JNZ KE3 MOV B,#60D

KE3: MOV A, @R0 DIV AB MOV A, B MOV @R0, A K2_AL_End:RET

JJ_Bit: MOV A, K1_Data MOV B, #02D DIV AB

MOV A, B ;(A=1,0) RET

Led_Out1:MOV Led2, #00H MOV Led3, #U_Led MOV Led4, #T_Led MOV Led5, #Blk_Led MOV Led1, #Blk_Led RET

Led_AL: MOV A, K1_Data CJNE A, #017D, LO1 LCALL Beep_Timer LJMP Led_AL_End

LO1: CJNE A, #18D, LD1 LCALL Led_Out1 LJMP Led_AL_End LD1: INC A MOV B, #02D

27

西安科技大学 电子万年历设计

DIV AB

MOV Led1, A DEC A RL A

MOV R0, #AL1_H ADD A, R0 MOV R0, A MOV A, @R0 LCALL BCD_8 MOV Led2, A JNZ LD2

MOV Led2, #Blk_Led LD2: MOV A, B ADD A, #10D MOV Led3, A INC R0 MOV A, @R0 LCALL BCD_8 ADD A, #10D MOV Led4, A MOV Led5, B

JB FL_250ms, Led_AL_End LCALL JJ_Bit JNZ Led_AL_E

MOV Led4, #Blk_Led MOV Led5, #Blk_Led LJMP Led_AL_End

Led_AL_E:MOV Led2, #Blk_Led MOV Led3, #Blk_Led Led_AL_End: LCALL Led RET

Set_Clock: MOV K1_Data, #01D MOV K2_Data, #01D CLR Set_Over LCALL Led_CL LCALL Key_Bord LCALL SF_Key

MOV Key_Data, #0 MOV First, #0 Set_AL41:LCALL Clock LCALL Week_Auto LCALL AL_Out LCALL Led_CL

28

西安科技大学 电子万年历设计

LCALL Key_Bord CALL Key_Del LCALL Key_CL

JNB Set_Over, Set_AL41 CLR A

MOV K1_Data,A MOV K2_Data,A MOV Key_Data,A MOV Frist,A RET

Key_CL: MOV A, Key_Data JNZ $+3 RET

CJNE A, #01D, K3_AL

INC K1_Data ;(1-8) MOV A, K1_Data CJNE A, #9D, X MOV K1_Data, #01D LJMP K3_AL_End

K3_AL: MOV A, K1_Data CJNE A, #08D, K3E SETB Set_Over

X: LJMP K3_AL_End K3E: DEC A MOV DPTR, #ASC_H MOVC A, @A+DPTR MOV B, A MOV R0, #SEC MOV A, K1_Data DEC A ADD A, R0 MOV R0, A INC @R0 MOV A, @R0 DIV AB MOV A, B MOV @R0, A K3_AL_End:RET

ASC_H: DB 60D,60D,24D,32D,13D,100D,100D PROC Led_CL

Led_CL: MOV DPTR, #Led_Ord_3 MOV A, K1_Data DEC A

MOV B, #02H

29

西安科技大学 电子万年历设计

MUL AB

JMP @A+DPTR

Led_Ord_3:LJMP Led_K0_2 LJMP Led_K1_2 LJMP Led_K2_2 LJMP Led_K3_2 LJMP Led_K4_2 LJMP Led_K5_2 LJMP Led_K6_2 LJMP Led_K7_2

Led_K0_2:MOV Led2, #Blk_Led MOV Led3, #DOT_Led MOV A, SEC LCALL BCD_8 ADD A, #10D MOV Led4, A MOV Led5, B

JB FL_250ms, LK1 MOV Led4, #Blk_Led MOV Led5, #Blk_Led

LK1: LJMP Led_Jmp_5_End Led_K1_2:LCALL Led_Hour JB FL_250ms, LK2 MOV Led4, #Blk_Led MOV Led5, #Blk_Led

LK2: LJMP Led_Jmp_5_End Led_K2_2:LCALL Led_Hour JB FL_250ms, LK3 MOV Led2, #Blk_Led MOV Led3, #Blk_Led

LK3: LJMP Led_Jmp_5_End Led_K3_2:LCALL Led_Mon JB FL_250ms, LK4 MOV Led4, #Blk_Led MOV Led5, #Blk_Led

LK4: LJMP Led_Jmp_5_End Led_K4_2:LCALL Led_Mon JB FL_250ms, LK5 MOV Led2, #Blk_Led MOV Led3, #Blk_Led

LK5: LJMP Led_Jmp_5_End Led_K5_2:MOV Led2, #2D MOV Led3, #0D MOV A, Year

30

西安科技大学 电子万年历设计

LCALL BCD_8 MOV Led4, A MOV Led5, B

JB FL_250ms, LK6 MOV Led4, #Blk_Led MOV Led5, #Blk_Led

LK6: LJMP Led_Jmp_5_End Led_K6_2:MOV Led2, #D_Led MOV Led3, #Blk_Led MOV A, W_Adj LCALL BCD_8 MOV Led4, A MOV Led5, B

JB FL_250ms, LK7 MOV Led4, #Blk_Led MOV Led5, #Blk_Led

LK7: LJMP Led_Jmp_5_End Led_K7_2:LCALL Led_Out1

Led_Jmp_5_End:MOV Led1, Week LCALL Led RET

Led_Hour:MOV A, Hour LCALL BCD_8 MOV Led2, A JNZ LJ1

MOV Led2, #Blk_Led LJ1: MOV A, B ADD A, #10D MOV Led3, A MOV A, MIN LCALL BCD_8 ADD A, #10D MOV Led4, A MOV Led5, B RET

Led_Mon: MOV A, Mon JNZ LJ5 INC Mon MOV A, Mon

LJ5: LCALL BCD_8 MOV Led2,A JNZ LJ2

MOV Led2, #Blk_Led LJ2: MOV Led3, B

31

西安科技大学 电子万年历设计

MOV A, Day JNZ LJ4 INC Day MOV A, Day

LJ4: LCALL BCD_8 MOV Led4, A JNZ LJ3

MOV Led4, #Blk_Led LJ3: MOV Led5, B RET

Beep_OUT:JB HA_F, BA1 MOV Beep, SEC SETB HA_F

BA1: MOV A, Beep ADD A, Beep_T MOV B, #60D DIV AB MOV A, SEC

CJNE A, B, Beep_OUT_End SETB Beep_F SETB HA_OVER CLR HA_F

Beep_OUT_End: RET

Beep_Timer: MOV Led1, #Blk_Led MOV Led2, #B_Led MOV Led3, #Blk_Led MOV A, Beep_T LCALL BCD_8 MOV Led4, A MOV Led5, B

JB FL_250ms, FT1 MOV Led4, #Blk_Led MOV Led5, #Blk_Led FT1: RET

TIME_12: MOV DPTR, #ASC_12 MOV A, Hour RL A

MOVC A, @A+DPTR MOV Led2, A JNZ IU2

MOV Led2, #Blk_Led IU2: INC DPTR MOV A, Hour RL A

32

西安科技大学 电子万年历设计

MOVC A, @A+DPTR JB FL_500ms, IU1 ADD A, #10D

IU1: MOV Led3, A LCALL Led_Min Time_24_End: RET

ASC_12:DB 11D,2D,21D,1D,21D,2D,21D,3D,21D,4D,21D,5D,21D,6D,21D,7D DB 21D,8D,21D,9D,11D,0D,11D,1D

DB 1D,2D,0D,1D,0D,2D,0D,3D,0D,4D,0D,5D,0D,6D,0D,7D,0D,8D,0D,9D DB 1D,0,1D,1D

T1INT: PUSH ACC PUSH PSW PUSH B

CLR FL_MS_F

DJNZ T_1S, T1_End CLR FL_S_F INC SEC LCALL Adj_W T1_End:POP B POP PSW POP ACC RETI

Adj_W: CLR TR1 MOV A, #T_L_100ms ADD A, W_Adj MOV TL1, A

MOV A, #T_H_100MS ADDC A, #00H MOV TH1, A

MOV T_1S, #Timer_NO SETB TR1 RET

FL_OUT:JB FL_MS_F, FL_OUT_End SETB FL_MS_F MOV A, T_1S MOV B, #02D DIV AB MOV A, B JNZ TO_D1 CPL FL_250ms

TO_D1: MOV A, T_1S MOV B, #04D DIV AB MOV A, B

33

西安科技大学 电子万年历设计

JNZ TO_D2 CPL FL_500ms TO_D2: FL_OUT_End: LCALL SEC_OUT RET

SEC_OUT:JB FL_S_F, SEC_OUT_End SETB FL_S_F MOV A, SEC MOV B, #07D JNB FL_3S, ZA1 MOV B, #02D ZA1: DIV AB MOV A, B

JNZ SEC_OUT_End CPL FL_3S SEC_OUT_End:RET

Key_Del:MOV A, Key_Data JNZ KL_12 MOV A, Frist JNZ KL_13 RET

KL_13: MOV Key_Data,Frist MOV Frist, #0 CLR Key_OVER LJMP SF_Beep

KL_12: JNB Key_OVER, KL11 MOV A, T_30ms ADD A, #03 MOV B, #60D DIV AB MOV A, SEC

CJNE A, B, Key_Del_End CLR Key_OVER LJMP SET_Key

KL11: MOV T_30ms, SEC SETB Key_OVER Key_Del_End: LCALL SF_A

CJNE A, #Key_DA, SFG_12 CLR Key_OVER JMP SF_Beep

SFG_12:MOV Frist, Key_Data MOV Key_Data, #0

34

西安科技大学 电子万年历设计

RET

Key_Bord: LCALL RE_K MOV A, Key_Data JZ Key_Bord1_End

Key_Bord1_End: SETB Key_F RET

SET_Key: MOV A, Key_Data CJNE A, #01H, SET_CC1 SETB Set_AL4_F LJMP SF23

SET_CC1: CJNE A, #02H, SF23 SETB Set_Clk_F SF23: RET

SF_Key: LCALL Clock LCALL Week_Auto LCALL AL_Out SETB Key_F LCALL Led LCALL SF_A

CJNE A, #Key_DA, SF_Key LCALL SF_Beep RET

SF_Beep: CLR Beep_F LCALL Timer_20ms SETB Beep_F RET

RE_K: MOV Key_Data, #00H MOV P1, #00H MOV A, P3

ORL A, #01111111B MOV P3, A CLR Key_F MOV A, P3 SETB Key_F MOV P1, #0FFH ANL A, #00000110B

CJNE A, #00000110B,You_Key RE_K_End:RET

You_Key: LCALL Timer_20ms MOV P1, #00H MOV A, P3

ORL A, #01111111B MOV P3, A CLR Key_F

35

西安科技大学 电子万年历设计

MOV A, P3 SETB Key_F MOV P1, #0FFH ANL A, #Key_DA

CJNE A, #Key_DA, You_Key1 RET

You_Key1:JB ACC.1, Key_KB MOV Key_Data, #02H

Key_KB: JB ACC.2, SF_Key0 MOV Key_Data, #01H SF_Key0: RET

SF_A: MOV P1, #00H MOV A, P3

ORL A, #01111111B MOV P3, A CLR Key_F MOV A, P3 SETB Key_F ANL A, #Key_DA RET END

36

西安科技大学 电子万年历设计

第六部分 结 束 语

电子万年历是现实生活中和工作中最常见的一种电子装置,通过本次设计让我知道了以前所不知道的万年历的制作,加了解了课本外的单片机知识,对8051和8155这两个芯片有了更加深刻的了解,知道了LED显示数码管以及电路芯片、三极管、按键等的连接等好多知识。还有就是明白了12小时和24小时之间的转换以及日、月、年的显示问题。

这个使我在学习完成单片机以及相关课程的基础上,更加进一步加深和巩固了所学的知识。通过硬件设计和软件设计,使我掌握了单片机的组成和应用系统。

37

西安科技大学 电子万年历设计

第七部分 谢 辞

非常感谢我的指导老师——刘婷婷老师对我的论文耐心、认真地指导,她严谨、认真的治学态度,精益求精的工作作风,深深地感染和激励着我,这将会是我今后学习、工作的榜样。从课题的选择到论文的最终完成,刘老师都始终给予我细心的指导和不懈的支持。在此谨向刘老师致以诚挚的谢意和崇高的敬意。

我还要感谢我的同学们,他们对我的论文提出了宝贵的意见,我的论文的完成和他们的意见是分不开的,五年的同窗友情,我将铭刻在心。同时,我还要感谢王春艳老师在我写论文的初期阶段对我论文的建议和指导,是他让我开阔了思路,产生了灵感。

最后,我要感谢我的家人对我的学业一贯的支持和鼓励,感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。

38

西安科技大学 电子万年历设计

文 献

【1】单片机原理以及应用技术——————————————————李全利 【2】单片机原理以及接口技术实践教程——————————————胡 健 【3】单片机基础————————————————————————李光弟 【4】单片机原理及应用—————————————————————蔡振江 【5】单片机应用教程————————————————————张洪润 易涛

39

本文来源:https://www.bwwdw.com/article/5azr.html

Top