单片机
- 格式:doc
- 大小:159.00 KB
- 文档页数:20
第1章 单片机概述1.1 单片机的概念1.1.1 单片机的定义单片机的全称是单片微型计算机(Single Chip Microcomputer,SCM),也称为微控制器(Micro-Controller Unit,MCU),它是将中央处理单元(Central Processing Unit,CPU)、数据存储器RAM(Random Access Memory,随机读写存储器)、程序存储器ROM(Read Only Memory,只读存储器)以及I/O(Input/Output,输入/输出)接口集成在一块芯片上,构成的一个计算机系统,其组成框图如图1.1所示。
单片机可用下面的“表达式”来表示:单片机 = MPU+ROM+RAM+I/O+功能部件图1.1 单片机的组成框图1.1.2 单片机的诞生单片机诞生于20世纪70年代末,具有代表性的事件是1976年Intel公司推出了MCS-48单片机系列的第一款产品:8048。
这款单片机在一个芯片内集成了超过17000个晶体管,包含一个CPU,1KB的EPROM(Erasable Programmable Read Only Memory,可擦可编程只读存储器),64字节的RAM,27个I/O端口和一个8位的定时器。
8048很快就成为了控制领域的工业标准,它们起初被广泛用来替代诸如洗衣机或交通灯等产品中的控制部分。
1980年,Intel公司在MCS-48的基础上推出了MCS-51系列的第一款单片机8051,这款单片机的功耗、大小和复杂程度都比8048提高了一个数量级。
8051集成了超过60000个晶体管,拥有4KB的ROM,128B的RAM,32个I/O端口,一个串行通信接口和两个16位的定时器。
经过三十多年的发展,MCS-51系列单片机已经形成了一个规模庞大、功能齐全、资源丰富的产品群。
单片机原理与应用技术·2·1.1.3 单片机的应用领域单片机在我们的日常生活和工作中无处不在、无处不有:家用电器中的微波炉、洗衣机、电饭煲、豆浆机、电子秤;住宅小区的监控系统、电梯智能化控制系统;汽车电子设备中的ABS、GPS、ESP、TPMS;医用设备中的呼吸机,各种分析仪,监护仪,病床呼叫系统;公交汽车、地铁站的IC卡读卡机、滚动显示车次和时间的LED点阵显示屏;电脑的外设,如键盘、鼠标、光驱、打印机、复印机、传真机、调制解调器;计算机网络的通信设备;智能化仪表中的万用表、示波器、逻辑分析仪;工厂流水线的智能化管理系统,成套设备中关键工作点的分布式监控系统;导弹的导航装置,飞机上的各种仪表等。
单片机到底是什么呢单片机,全称为单片微型计算机,是一种在单个集成电路芯片上集成了处理器、存储器和输入输出接口等各种功能模块的微型计算机系统。
它被广泛应用于电子设备中,如家用电器、汽车电子、工业控制等领域。
本文将从多个角度介绍单片机的定义、特点、应用和发展趋势等内容。
一、单片机的定义与特点单片机是一种集成度非常高的微型计算机系统,其核心部分是一个微型处理器。
相比于传统的计算机系统,单片机具有以下几个特点:1. 高度集成:单片机将处理器、存储器和输入输出接口等功能模块集成在一颗芯片上,大大减小了电路板的体积和重量。
2. 低功耗:由于单片机内部的电路非常简单,功耗较低,适合工作在电池供电的环境。
3. 低成本:由于集成度高,制造工艺成熟,单片机的成本相对较低,可以大规模应用于各个领域。
4. 易编程:单片机采用高级语言编写程序,不需要了解底层电路的细节,开发门槛较低,适合初学者学习和使用。
二、单片机的应用领域单片机在各个领域都得到了广泛的应用,下面将介绍几个典型的应用领域:1. 家用电器:单片机被广泛应用于家用电器中,如空调、洗衣机、冰箱等。
通过单片机的控制,可以实现自动化、智能化的功能,提高用户体验。
2. 汽车电子:单片机在汽车电子领域有着重要的应用,如发动机控制系统、车身控制系统等。
通过单片机的控制,可以提高车辆的安全性、舒适性和燃油效率。
3. 工业控制:单片机在工业控制领域被广泛应用,如自动化生产线、工厂设备等。
通过单片机的控制,可以提高生产效率、降低劳动力成本。
4. 通信设备:单片机在通信设备中起着重要的作用,如手机、路由器等。
通过单片机的控制,可以实现无线通信、数据处理等功能。
三、单片机的发展趋势随着科技的不断发展,单片机也在不断演进和进步。
下面将介绍单片机的几个发展趋势:1. 高性能:随着半导体技术的不断进步,单片机的处理能力越来越强大,可以处理更复杂的任务。
2. 低功耗:随着对节能环保的要求越来越高,单片机的功耗也在不断降低,以满足电池供电等低功耗应用的需求。
单片机的简介单片机(Microcontroller Unit,简称MCU)是一种集成了微处理器核心、存储器、输入输出接口和定时器等功能于一体的集成电路芯片。
它具有体积小、功耗低、成本低廉等特点,广泛应用于各种电子设备中。
本文将对单片机的基本特点、应用领域以及优缺点进行简要介绍。
一、单片机的基本特点单片机主要由中央处理器(CPU)、存储器、输入输出接口(I/O)和定时器等组成。
其核心部分是CPU,负责执行程序,处理数据。
常见的单片机有8位、16位和32位等不同位数的CPU。
存储器包括程序存储器(ROM)和数据存储器(RAM),用于存储程序和数据。
输入输出接口(I/O)用于与外部设备进行通信,可实现数据输入、输出等功能。
定时器用于产生精确的时间延迟。
单片机具有体积小、功耗低的特点,由于其集成度高,外部元器件少,因此相对于传统的电路设计方案,可以大大减小产品体积和功耗。
此外,单片机具有较高的可编程性,可以根据需求进行程序设计,实现各种功能。
其性价比也较高,适合大规模生产。
二、单片机的应用领域由于单片机具有体积小、功耗低、成本低等特点,因此在各个领域都有广泛的应用。
1. 家电控制:单片机广泛应用于家用电器,如洗衣机、冰箱、电视等。
通过控制单片机,可以实现温度控制、计时器功能等。
2. 工业自动化:单片机在工业设备和自动化领域也有重要应用。
例如,可以通过单片机实现对机器设备的监控和控制,提高生产效率和质量。
3. 交通领域:单片机在交通领域有着广泛的应用,如智能交通信号灯、车辆控制系统等。
通过单片机的智能控制,可以提高交通流量和安全性。
4. 医疗设备:单片机在医疗设备中具有重要地位,如心电图仪、血压计等。
通过单片机的高精度控制和数据处理,可以提高医疗设备的性能和准确性。
5. 智能家居:随着物联网的发展,单片机在智能家居领域有着广泛应用。
通过单片机的控制,可以实现家庭安防、远程控制等功能。
三、单片机的优缺点1. 优点:a. 体积小、功耗低:由于单片机的集成度高,体积相对较小,适合应用于体积有限的电子设备中,并且其功耗低,有助于延长电池寿命。
第0章绪论1.什么是单片机?其主要特点有那些?解:单片微型计算机(Single-Chip Microcomputer),简称单片机。
就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。
单片机的主要特点有:(1)可靠性高(2)便于扩展(3)控制功能强(4)低电压、低功耗(5)片内存储容量较小,除此之外,单片机还具有集成度高、体积小、性价比高、应用广泛、易于产品化等特点2.当前单片机的主要产品有那些?各有何特点?举出你生活中应用单片机的例子。
解:当前单片机的主要产品有:Intel的8051系列、Motorola的M68HC系列、Philips(飞利浦)的80C51系列、台湾义隆公司(EMC)EM78系列单片机、美国Microchip公司的PIC 单片机系列、Atmel公司的A T90系列单片机Ubicom公司的Scenix单片机、日本爱普生科技公司的Epson单片机、Zilog公司的Z86系列、美国国家半导体公司NSCOP8单片机、台湾Winbond(华邦)的W78系列等。
MCS-51为主流产品。
MSP430的功能较强。
是一种特低功耗的Flash微控制器。
主要用于三表及超低功耗场合。
EM78系列单片机采用高速CMOS工艺制造,低功耗设计为低功耗产品,价格较低。
具有三个中断源、R-OPTION功能、I/O唤醒功能、多功能I/O口等。
具有优越的数据处理性能,采用RISC结构设计。
Microship单片机是市场份额增长较快的单片机。
它的主要产品是PIC系列8位单片机。
CPU采用RISC结构,运行速度快,价格低适于用量大、档次低、价格敏感的产品。
Motorola是世界上最大的单片机生产厂家之一,品种全、选择余地大、新产品多。
其特点是噪声低,抗干扰能力强,比较适合于工控领域及恶劣的环境。
A VR是增强RISC内载Flash的单片机,单片机内部32个寄存器全部与ALU直接连接,突破瓶颈限制,每1MHz可实现1MIPS的处理能力,为高速、低功耗产品。
1.什么是单片机?单片机即单片微型计算机,是将微型处理器CPU、储存器(只读存储器POM和随机存储器PAM)、总线、定时/计数器、输入/输出接口I/O和其他多种功能器件集成在一小块芯片上构成的微型计算机。
2.单片机主要特点:集成度高、体积小、可靠性高、控制功能强、低功耗、可扩展性好、性价比高3.51单片机内部结构:8位CPU、5个中断源,分为2个优先级、一个全双工串行I/O口、8位并行I/O口P0,P1,P2,P3、4KB的片内程序存储器(8031无)、片内数据存储器(片内RAM)、含21个特殊功能寄存器SFR- Special Function Register 、2个16位定时器/计数器、振荡器和时序逻辑(振荡频率1.2~12MHZ )CPU是单片机的核心部分,振荡器和时序逻辑产生内部时钟,中断控制逻辑应付突发事件,并行I/O接口和串行I/O接口是数据传输通道,程序存储器存放单片机程序,是指挥所,数据存储器存放内部待定处理的数据和处理后的结果,是数据仓库,定时/计数器完成对外输入脉冲的计数或根据内部时钟及定时设置,周期性的产生定时信号。
4.CPU结构与工作原理CPU是单片机的核心,由运算器和控制器等部件组成(1)运算器以8位算术/逻辑运算部件ALU为核心,加上通过内部总线而挂在其周围的暂存器TMP1、TMP2、累加器ACC、寄存器B、状态标志寄存器PSW以及布尔处理器组成整个运算器的逻辑电路。
(2)累加器ACC(8位)需要ALU处理的数据和计算结果多数要经过A累加器。
单片机内部数据传送的中转站。
累加器A在数据传输和处理过程中起重要作用。
(3)寄存器B(8位)与A累加器配合执行乘、除运算。
也可用作通用寄存器。
A和ACC的实质是一样的,对应地址都是0E0H,只是汇编在使用时,在格式上取了两个名字。
使用有一定的规律:当其要进行位表示时,必须用ACC,比如要写成ACC.7,而不能写成A.7;但当其作为8位二进制数时,ACC 和A都能用,但还是有区别:比如INC ACC和INC A都能用还有PUSH ACC, POP ACC不可以写成PUSH A 和POP A(4)程序状态字寄存器PSW (8位)1.进位标志Cy(PSW.7)表示运算是否有进位(借位),有“1”,否则“0”,很多算术逻辑运算指令都会影响。
湖南科技大学信息与电气工程学院《课程设计报告》题目:多功能数字时钟专业:通信工程班级:一班姓名:徐升炜学号: 1254040128指导教师:尹艳群2015年 6 月 23 日信息与电气工程学院课程设计任务书2014—2015 学年第二学期专业:通信工程班级:一班学号: 1254040128 姓名:徐升炜课程设计名称:单片机课程设计设计题目:多功能数字时钟完成期限:自 2015 年 6 月 8 日至 2015 年 6 月 19 日共 2 周设计依据、要求及主要内容(可另加附页):一、设计依据本方案以STC15F2K60S2单片机作为主控核心,与时钟芯片、LED显示、按键等模块组成硬件系统,通过《单片机原理与应用》这门课的课程设计,学生应能对STC15系列单片机有一个全面的认识,掌握以STC15系列单片机为核心的电子电路的设计方法和应用技术。
二、要求(1)利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。
(2)利用LED分别显示当前时间和日历。
(3)利用尽可能少的开关实现:校正日历和时间(4)定制闹钟(时、分、表)三、设计内容该课程设计是利用STC15F2K60S2单片机内容的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。
设计的电子时钟通过数码管显示,并通过按键实现时间和暂停、启动控制等。
我们选择的方法是单片机开发设计使用的传统方法,通过本次设计,可以了解整个单片机开发的流程。
文章首先介绍了单片机的基本知识,然后同时给出了框图,流程图等。
论文涵盖了从需求分析,系统设计,编程,原理图等产品开发的基本过程。
近几年,单片机在各个领域得到广泛的应用。
从工业到人们的日常生活,大部分的科技产品都是通过单片机来控制。
在它问世之前,自动控制设备不能被广泛的应用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。
在第一台微处理器成功研制不久,第一个单片机就问世了。
因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。
指导教师(签字):批准日期:年月日摘要随着科学技术的不断发展,人们对时间计量的精度要求越来越高。
高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟石晶表石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便;另一方面《单片机微机原理与接口技术》是一门实践性很强的的课程,只靠短短的课堂教学,学生只能略懂一些肤浅的表面知识,通过课程设计,学生亲自动手去做,在发现问题和解决问题中,才能够更好的理解《单片机微机原理与接口技术》的理论知识,提干我们的知识运用能力和实验技术,增强实践能力,为我们将来在技术领域的发展奠定了一定的实践基础。
本次电子技术基础课程设计选题是数字钟的设计。
主要原理是由晶体振荡电路产生多谐振荡,经过分频器分频后输出稳定的秒脉冲,作为时间基准。
秒计数器满60向分计数器进位,分计数器满60向小时计数器进位,小时计数器以24为一个周期,并实现小时高位具有零熄灭的功能。
计数器的输出经译码器送到显示器,可在相应位置正确显示时、分、秒。
计时出现误差或者调整时间可以用校时电路进行时、分的调整。
目录1.设计的任务与要求 (5)1.1数字钟的设计目的: (5)1.2数字钟的设计要求 (5)1.3数字电子钟的基本原理 (5)2.电路仿真与设计 (6)2.1系统设计框图 (6)2.2单元模块设计 (7)2.2.1 74LHC595芯片 (7)2.2.2 数码管驱动 (7)2.2.3 行列式按键 (8)2.2.4电子日历主芯片STC15F2K60S2 (9)2.2.5综合框图 (9)3.程序设计 (10)4.课程设计心得体会 (19)5.参考资料 (20)1.设计的任务与要求1.1数字钟的设计目的:(1) 掌握数字电子钟的设计方法和制作过程。
(2)掌握常用数字集成电路的功能和使用。
(3)了解各芯片的逻辑功能、引脚安排和使用方法。
(4)掌握计数器相互级联的方法。
(5)学会用仿真软件对设计的原理图进行仿真。
1.2数字钟的设计要求:(1)利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。
(2)利用LED分别显示当前时间和日历。
(3)利用尽可能少的开关实现:校正日历和时间(4)定制闹钟(时、分、表)1.3数字电子钟的基本原理:单片机先通过了STC15F2K60S2主芯片,再通过74LHC595寄存器驱动时钟屏幕,,芯片驱动方式则是并行驱动,这样可以避免每次传送新的显示数据时,都需要从头到尾传送 24 个笔段数据。
目前的传送方式可以只是传送已经变化了的显示数据。
晶体频率使用的是 32768HZ,这种低频率时基,对掉电保护的电池耗电关系极大,STC15F2K60S2单片机具有的实时时钟的功能,大大方便了电路设计。
按照常规,在如此低的频率下,对单片机的指令执行速度会有矛盾,但是,这种单片机却能够让程序运行时使用“内部RC ”振荡频率而仅仅是时钟部分使用 32768HZ频率,这样,就可以选择“内部RC”高达数 MHZ 的指令运行频率而不用理会时钟走时频率,两者依靠这种特有的“RTC”功能获得了很理想的配合。
当进入电池掉电保护的时候,可以令电池耗电维持在仅仅数十 uA 的水平,一只 60mAh的掉电保护电池,就可以让掉电保护时间长达几个月之久!进入掉电保护后,屏幕不显示,所有按钮和控制功能暂时失效,仅仅实时时钟仍然继续走时。
当外部主电源恢复供电后,所有功能自动恢复,实时时钟无需调整。
单片机的 15P是复位引脚,当上电时或者程序运行发生异常时,可以通过此引脚让程序重新运行。
但是,一般地,单片机本身具有“看门狗”自动复位功能,可以快速地自动对程序运行异常进行复位,人们几乎觉察不到它的复位影响。
单片机的 10P 引脚安排为专门检测外部供电是否正常,当外部 5V供电掉电后,单片机将立即进入掉电保护状态,而在电路中电源能量还没有完全消耗尽之前,程序也必须抢先对各个端口进行配置,以便进入低电源消耗状态。
电路图中有两个输出端口,一个是“睡眠”控制输出端口,它只有在开始倒计时的时候才会输出高电平;另一个时“定时”输出端口,它只有在到达定时时间的时候才会输出高电平。
合理地利用这两个输出,就能够安排一些简单的自动控制,例如,可以利用“睡眠”的倒计时功能来给电孵化行业的“自动翻蛋”使用,利用“定时”功能来作为一只“电子闹钟”等等。
电路中,屏幕的公共引脚接有一只 NPN小功率三极管,这主要是在单片机对 74LHC595 传送数据时,临时关闭显示屏幕的供电以免产生“鬼影”,同时,在掉电保护时则可以完全关闭屏幕的供电。
单片机预留了两个端口没有使用,这里可以在将来安排外接电存储器,以便派生例如电子打铃仪或者多次定时数据存储,成为功能更加丰富的时钟品种。
各个按钮的使用说明:(请参考印刷板图)。
各按键在印刷板上的编号与单片机芯片引脚和功能关系,请参考下面表格。
其中,标注“G”的焊盘是电路供电的参考点,即 5V电源的负极,俗称“地线”。
所有按键都是需要与这个“G”接通的时候(需要串入 1K 左右电阻),该按键才算是“被按下”。
当这个“G”引出到按键板时,需要在它上面串接一只 1K左右的电阻,不要直接让其与各按键引脚直接“短接”,以防止芯片内部引脚损坏。
2.电路仿真与设计2.1系统设计框图2.2单元模块设计2.2.1 74LHC595芯片这是由两片74Lhc595连接成的60进制计数器他们都是工作在置数方式,低位是连接成为一个十进制计数器,它的clk端接的是低位的进位脉冲。
高位接成了六进制计数器。
当输出端为0101的时候在下个时钟的上升沿把数据置数成0000 这样就形成了6进制计数器,连个级联就成为了60进制计数器,分别可以作为秒和分记时。
24进制计数器的个位也是用置数法连接成了十进制计数器。
74LHC595的两个输入引脚接到了十位的Q1和个位的Q2 上输出引脚接到了电路板上所有161芯片的Rest端。
也就是说当十位为0010个位为0100的时候(24)使所有161复位归0。
完成24进制计数。
2.2.2数码管驱动数码管驱动电路时由DPY组成,它能将161输出的标准BCD码变换成驱动七段数码管所需的信号。
上面的200欧电阻是为数码管限流用的,防止由于电流太大损坏主芯片2.2.3行列式按键键盘分编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生按键编码号或键值的称为编码键盘,如计算机键盘。
而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,用的最多的是非编码键盘,也有用到编码键盘的,我们这里用的就是非编码键盘。
如图2键盘图所示,当按钮按下时;端口会变成低电平,我们设计一段扫描程序来判断那个端口是低电平来判断是否有按键按下。
2.2.4电子日历主芯片STC15F2K60S22.2.5综合框图3.程序设计#define MAIN_Fosc 22118400L#include "STC15Fxxxx.H"#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000))#define DIS_DOT 0x20#define DIS_BLACK 0x10#define DIS_ 0x11u8 code t_display[]={// 0 1 2 3 4 5 6 7 8 9 A B CD E F0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//black - H J K L N o P U t G Q r M y0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50 ,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46 };u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};sbit P_HC595_SER = P4^0; //pin 14 SER data inputsbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clocku8 LED8[8];u8 display_index;bit B_1ms;u8 hour,minute,second;u8 hour1,minute1,second1;u16 year,month,day;u16 msecond;u8 KeyCode;u8 cnt10ms;u8 IO_KeyState, IO_KeyState1, IO_KeyHoldCnt;u8 cnt50ms;u8 m;void IO_KeyScan(void); //50ms callvoid DisplayRTC(void){if(m==0) //{if(hour >= 10) LED8[0] = hour / 10;else LED8[0] = DIS_BLACK;LED8[1] = hour % 10;LED8[2] = DIS_;LED8[3] = minute / 10;LED8[4] = minute % 10;LED8[5] = DIS_;LED8[6] = second / 10;LED8[7] = second % 10;}else if(m==1){LED8[0]=2;LED8[1]=0;LED8[2]=year/10;LED8[3]=year%10;LED8[4]=month/10;LED8[5]=month%10;LED8[6] = day / 10;LED8[7] = day % 10;}else if(m==2){if(hour >= 10) LED8[0] = hour1 / 10;else LED8[0] = DIS_BLACK;LED8[1] = hour1 % 10;LED8[2] = DIS_;LED8[3] = minute1 / 10;LED8[4] = minute1 % 10;LED8[5] = DIS_;LED8[6] = second1 / 10;LED8[7] = second1 % 10;}if(hour==hour1)if(minute==minute1)if(second==second1){P17=P16=P47=P46=0;}}void RTC(void){if(++second >= 60){second = 0;if(++minute >= 60){minute = 0;if(++hour >= 24){hour = 0;day++;if(day>30){day=0;month++;if(month>12){month=0;year++;}}}}}}void main(void){u8 i,k;P0M1 = 0; P0M0 = 0;P1M1 = 0; P1M0 = 0;P2M1 = 0; P2M0 = 0;P3M1 = 0; P3M0 = 0;P4M1 = 0; P4M0 = 0;P5M1 = 0; P5M0 = 0;P6M1 = 0; P6M0 = 0;P7M1 = 0; P7M0 = 0;AUXR = 0x80; //Timer0 set as 1T, 16 bits timer auto-reload, TH0 = (u8)(Timer0_Reload / 256);TL0 = (u8)(Timer0_Reload % 256);ET0 = 1; //Timer0 interrupt enableTR0 = 1; //Tiner0 runEA = 1;display_index = 0;hour = 11;minute = 59;second = 58;hour1 = 11;minute1 = 59;second1 = 58;year = 15;month = 6;day = 19;m=0;RTC();DisplayRTC();// for(i=0; i<8; i++) LED8[i] = DIS_BLACK;for(i=0; i<8; i++) LED8[i] = i;k = 0;KeyCode = 0;cnt10ms = 0;IO_KeyState = 0;IO_KeyState1 = 0;IO_KeyHoldCnt = 0;cnt50ms = 0;while(1){if(B_1ms){B_1ms = 0;if(++msecond >= 1000){msecond = 0;RTC();DisplayRTC();}if(++cnt50ms >= 50){cnt50ms = 0;IO_KeyScan();}if(KeyCode > 0){if(KeyCode == 17) //hour +1{if(m==0){if(++hour >= 24) hour = 0;}else if(m==1){if(++year>=100)year=0;}else if(m==2){if(++hour1 >= 24) hour1 = 0;}DisplayRTC();}if(KeyCode == 18) //hour -1{if(m==0){if(--hour >= 24) hour = 23;}else if(m==1){if(--year>=100)year=99;}else if(m==2){if(--hour1 >= 24) hour1 = 23;}DisplayRTC();}if(KeyCode == 19) //minute +1{if(m==0){second = 0;if(++minute >= 60) minute = 0;}else if(m==1){month++;if(month>=30)month=0;}else if(m==2){if(++minute1 >= 60) minute1 = 0;}DisplayRTC();}if(KeyCode == 20) //minute -1{if(m==0){second = 0;if(--minute >= 60) minute = 59;}else if(m==1){month--;if(month>30)month=29;}else if(m==2){if(--minute1 >= 60) minute1 = 59;}DisplayRTC();}if(KeyCode == 21) //second +1{if(m==0){if(++second >= 60) hour = 0;}else if(m==1){if(++day>=30)day=0;}else if(m==2){if(++second1 >= 60) second1 = 0;}DisplayRTC();}if(KeyCode == 22) //second -1{if(m==0){if(--second >= 60) second = 59;}else if(m==1){if(--day>=30)day=29;}else if(m==2){if(--second1 >= 60) hour1 = 59;}DisplayRTC();}if(KeyCode ==32){m++;if(m>2)m=0;}KeyCode = 0;}}}}/**********************************************/u8 code T_KeyTable[16] = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0};void IO_KeyDelay(void){u8 i;i = 60;while(--i) ;}void IO_KeyScan(void) //50ms call{u8 j;j = IO_KeyState1;P0 = 0xf0;IO_KeyDelay();IO_KeyState1 = P0 & 0xf0;P0 = 0x0f;IO_KeyDelay();IO_KeyState1 |= (P0 & 0x0f);IO_KeyState1 ^= 0xff;if(j == IO_KeyState1){j = IO_KeyState;IO_KeyState = IO_KeyState1;if(IO_KeyState != 0){F0 = 0;if(j == 0) F0 = 1;else if(j == IO_KeyState){if(++IO_KeyHoldCnt >= 20){IO_KeyHoldCnt = 18;F0 = 1;}}if(F0){j = T_KeyTable[IO_KeyState >> 4];if((j != 0) && (T_KeyTable[IO_KeyState& 0x0f] != 0))KeyCode = (j - 1) * 4 + T_KeyTable[IO_KeyState & 0x0f] + 16;}}else IO_KeyHoldCnt = 0;}P0 = 0xff;}void Send_595(u8 dat){u8 i;for(i=0; i<8; i++){dat <<= 1;P_HC595_SER = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}}void DisplayScan(void){Send_595(~T_COM[display_index]);Send_595(t_display[LED8[display_index]]);P_HC595_RCLK = 1;P_HC595_RCLK = 0;if(++display_index >= 8) display_index = 0;}void timer0 (void) interrupt TIMER0_VECTOR{DisplayScan();B_1ms = 1;}4.课程设计心得体会通过本次实验,能初步理论联系实际、应用C语言与电路设计、能简单实现程序、并且能通自己的调试进行修改。