单片机报告

重庆科技学院

课程设计成果

   

院(系):电气与信息工程学院  班 级: 电自普1002

学生姓名:    邹锋          学 号:   2010441603 

设计地点(单位)     逸夫科技大楼I305

设计题目:              多功能电脑时钟程序设计            

        完成日期:    2011  年 7  月 5  日

指导教师评语: _______________________________________

_________________________________________________________________________________________________________________________________________________________________________________________________________    ___________

成绩(五级记分制):______ __________
          教师签名:_________________________


 

主要内容为本课程设计的简单说明(200字左右)。

本课程设计使用STC89C51单片机(晶体管显示是以5ms一个的速度刷新晶体管),本次设计充分的利用了单片机的最小系统、数码管显示技术、按键检测技术。单片机最小系统包括:复位电路、时钟振荡电路。数码管采用的是数码管动态扫描技术,按键采用的是按键扫描技术。整个系统是使用的keil2开发软件开发的,软件的调试主要是依靠开发软件仿真实现的。硬件调试则是通过对硬件的检测,看硬件是否损坏。软件程序设计中充分的利用了单片机程序设计中常用的软件延时思想来控制按键的变化以及各种模式之间的切换;用定时器准确的控制了数码管变化的时间等。

关键字:软件,硬件,定时,延时(3~5个关键字)

重庆科技学院

课程设计任务书

设计题目:多功能电脑时钟程序设计

教研室主任:            指导教师:王成敏/曾建奎/张义辉/严利/常继彬

              年      月      日

目录

1.产品功能分析·· 1

2.方案设计·· 2

3.系统设计·· 4

4.系统调试·· 6

5.程序调试·· 12

6.技术小结·· 13

7.多功能电脑时钟使用说明·· 13

8.心得体会·· 14

9.参考文献·· 15


                       
第一章

产品功能分析

主要介绍本次课程设计完成的产品具有哪些详细的功能,及操作说明,(要求把产品的所有的功能全部写在该部分)

产品:多功能电脑时钟

主要功能:

1. 实时显示当前时间即北京时间(时、分)。

2. 可修改北京时间(时、分)。

3.可设定闹铃时间(时、分)。

4.可进行分和秒的切换。(切换前显示时、分,切换后显示分、秒)。

5.led标志选择模式

6.可实现秒表功能

7.可实现倒计时功能(包括对其进行设置)

第二章

方案设计

2.1 硬件方案设计

产品采用AT89C51单片机,使用包含两个定时器/计数器,4个LED灯,四个按键,一个蜂鸣器。

整体单片机电路图:

最小系统设计:单片机最小系统有一个11.0592MHZ的晶振组成的时钟电路,和一个复位电路还有单片机组成。

显示电路设计:显示电路的数码管由四个位选端口和八个段选端口组成。本次选用的是共阴极数码管,并采用的是动态的显示方式段选择先全部并在一起,有统一的I/O资源来控制

按键电路设计:本次设计MODE键作为切换键UP键作为数字增减键,DOWN键作为减少键。ENT作为结束以及开始键

闹铃设计:闹铃是有蜂鸣器NPN管还有电阻组成。蜂鸣器接低电平。

发光二极管设计:

2.2  软件方案设计

根据系统功能描述,可以将功能大致分四类(七个模式):

1.  北京时间

2.     闹铃功能

3.     秒表功能

4.     倒计时功能

系统设有四个数码管,四个按键,采用菜单式人机对话,便于操作,所以可以分成多个菜单功能键切换菜单,UP或DOWN键设置时间,ENT确定菜单。(其中MODE键进行模式的选择。)

第一个模式:显示初始值的北京时间(LED灯P23亮)

第二个模式:设置北京时间的小时数( LED灯P24亮)。按P21键增加小时数,当小时数增加到23之后会自动跳转为0,按P22键减少小时数,,当小时数减少到0之后会自动跳转为23。

第三个模式:设置北京时间的分钟数(LED灯P25亮)。按P21键增加分钟数,当分钟数增加到59之后,会自动跳转为 0。按P22键减少分钟数,当分钟数减少到0之后,会自动跳转到59。

第四个模式:秒表模式(LED灯P26亮),四位数码管,左边三位显示秒数,最右边一位显示毫秒数。按UP开始,DOWN结束,ENT清零。

第五个模式:设置闹钟的小时以及分钟数(LED灯P23、P24、 P25、 P26亮)按P21键增加小时数,当小时数增加到23之后会 自动跳转为0,按P22键增加分钟数,,当分钟数减少到0之后会自动跳转为59。

第六个模式:设置倒计时的秒数(LEDP23 P24灯全灭且初始值设定为10)按P21键增加秒数,当秒数增加到59之后会自动跳转为0。按P22键减少秒数,当秒数减少到0之后会自动跳转为59。能设置一分钟之内的时间。

第七个模式:进入倒计时模式,由之前模式九设置的时间开始倒计时。按P32键开始倒计时,按P22暂停倒计时,若要继续开始,则再按P32键。按P21键是重新设定倒计时,这时会自动跳转到第七个模式来设定倒计时的时间。


第三章

系统设计

3.1硬件电路设计与分析

CPU时钟与复位电路、数码管显示电路、按键接口电路、LED指示电路、蜂鸣器接口电路、RS-232接口电路。

3.2 软件的设计

控制程序的结构及模块划分;

初始化程序、数码管显示程序、按键扫描及处理程序、倒计时程序、闹铃程序、秒表程序、时钟程序、通信程序。

  

画出整个软件的模块图、并对每一个模块图的算法用程序流程图、相关部分代码介绍


第四章     系统调试

4.1 调试方法及步骤

(1)编译程序,并进行设置令其生成HEX文件

(2)启动STC-ISP,打开程序编译生成的HEX文件

(3)程序下载到单片机

(4)下载成功:

4.2    测试方法及测试结果

初次实验,发现闹钟的程序设计存在问题,当北京时间和闹钟时间相同时闹钟不响,经过仔细检测发现为单片机蜂鸣器的问题,后来换了一个单片机再次测试,实现了设计的一切功能。


小结

在本次设计中,我学到很多的东西,加深了我对单片机的理解和认识。在这次设计中也学会啦如何去解决一些常见的问题,也对单片机的程序设计有了一些理解。在这次课程设计中学会啦如何去查找资料,如何设计电路。

在这次课程设计中我也知道遇到了问题不要着急,要慢慢的细心的去寻找问题出在哪里,并找到解决的办法。任何问题都是可以解决的,遇到问题一定要冷静。总之在这次课程设计中,我学到啦很多,让我受益匪浅。


致谢

写出在本次课程设计及论文完成过程中,为你提供帮助的人,并表达谢意。

                                         签名

                                             20##年  7 月 5   日


参考文献

[1] 宗成阁. 单片机原理及应用[M]. 哈尔滨工业大学出版社. 2009.4

[2]胡文金,钟秉翔. 单片机应用技术实训教程[M]. 重庆大学出版社. 2005.

[3]沈红卫. 单片机的智能系统设计与实现[M]. 北京电子工业出版社. 2005.

[4]周航慈.单片机应用程序设计技术[M].北京航空航天大学出版社.1991

[5]李平,杜涛,王靖.单片机入门与开发.机械工业出版社.2008.8

[6]冯育长.单片机系统设计与实例分析.西安电子科技大学出版社.2007.5

[7]楼然苗, 李光飞.单片机课程设计指导. 北京航空航天大学出版社.2007

[8]单片机实验及课程设计指导书(重庆科技学院);

[9]单片机原理及应用(MCS---51);重庆大学出版社;20##年;

[10]李有才,《单片机课程设计纲要》,电子科技大学出版社,20##年


要求:至少列出6篇参考文献

 

第二篇:单片机设计报告

目录                          

目录................................................................. I

摘要................................................................ II

第一章  设计要求..................................................... 1

1.1课程设计项目名称.............................................. 1

1.2项目设计目的及技术要求........................................ 1

第二章  总体方案..................................................... 2

2.2硬件电路设计.................................................. 2

2.2.1单片机最小系统电路...................................... 2

2.2.2复位电路................................................ 5

2.2.3 8255可编程并行I/O口接口芯片........................... 6

2.2.4蜂鸣器的工作原理........................................ 8

2.3软件设计...................................................... 9

2.3.1时间调节原理框图........................................ 9

2.3.2主程序流程图........................................... 10

第三章  总结........................................................ 11

第四章  参考文献.................................................... 12

附录................................................................ 13

一、仿真图:.................................................... 13

二、程序清单:................................................... 13

                 

                            

                        

摘要

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于数字钟电路的基本组成包含了数字电路的主要组成部分,因此进行数字钟的设计是必要的,研究数字钟及扩大其应用,有着非常现实的意义。

单片机数字时钟就是其中的一款设计。它具有编程灵活,便于电子钟功能的扩充,即可用该电子钟发出各种控制信号,精确度高等特点,同时可以用该电子钟发出各种控制信号。单片机数字钟是单片机为核心。时钟,本设计是以单片机AT89S52配备LED数码显示管,数字钟采用24小时制方式显示时间,带有年月日、秒表和闹钟功能。本设计打算采用蜂鸣器做提醒,因没有蜂鸣器所以采用闪灯来提醒。使人不仅仅是通过视觉来感受单片机数字钟带来的方便。

而51系列单片机是各单片机中最为典型和最有代表性的一种,通过本次课程设计进一步对单片机学习和应用,从而更熟悉单片机的原理和相关设计并提高了开发软、硬件的能力。本设计主要设计一个基于80C51单片机的电子时钟,并在LED上显示相应的时间,通过两个控制键和4×4键盘来实现时间的调节功能。应用Proteus软件实现单片机数字时钟系统的设计与仿真。

    关键词:单片机  80C51  数字时钟  汇编语言  C语言


第一章  设计要求

课程设计是工科学生十分重要的实践教学环节,通过课程设计,培养学生综合运用先修课程的理论知识和专业技能,解决工程领域某一方面实际问题的能力。课程设计报告是科学论文写作的基础,不仅可以培养和训练学生的逻辑归纳能力、综合分析能力和文字表达能力,也是规范课程设计教学要求、反映课程设计教学水平的重要依据。为了加强课程设计教学管理,提高课程设计教学质量,特拟定如下基本要求。

1. 课程设计教学一般可分为设计项目的选题、项目设计方案论证、项目设计结果分析、答辩等4个环节,每个环节都应有一定的考核要求和考核成绩。

2. 课程设计项目的选题要符合本课程设计教学大纲的要求,该项目应能突出学生实践能力、设计能力和创新能力的培养;该项目有一定的实用性,且学生通过努力在规定的时间内是可以完成的。

3. 项目设计方案论证主要包括可行性设计方案论证、从可行性方案中确定最佳方案,实施最佳方案的软件程序、硬件电路原理图和PCB图。项目设计方案论证内容记录于课程设计报告书第三项中,项目设计方案论证主要考核设计方案的正确性、可行性和创新性,考核成绩占30%左右。

4. 项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,项目测试中出现故障或错误原因的分析和处理方法。

5. 学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。

6. 答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出2~3个问题,通过答辩可进一步了解学生对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。

7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书交给课程设计指导教师评阅。

8. 课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。

    1.1课程设计项目名称

    实时时钟显示电路设计

    1.2项目设计目的及技术要求

    1.最小单片机系统:其作用是和外围的时钟芯片通信,并控制数据传输过程,采集时间信息并予以处理;

    2.8255可编程并行I/O口接口芯片:它是本设计的核心模块,由它提供实时的日历时钟信息;

3.LED数码管显示模块:此模块用于实时时钟信息显示;

程序部分包括单片机和8255A芯片的接口程序(实现单片机和8255A之间的数据传输过程)以及液晶显示程序。

第二章  总体方案

2.1方案开发的基本要求

    采用LED数码管动态扫描,LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼精看到字样了。LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类,最佳方案是采用LED数码管动态扫描显示。

     2.2硬件电路设计

按照系统设计功能的要求,电路系统构成框图如图1所示。主控芯片使用52系列AT89S52单片机。

 图1实时时钟电路系统构成框图

2.2.1单片机最小系统电路

单片机最小系统是最小的单片机系统,没有市场上买的有那么多功能。通过自己喜欢的作用来扩展电路板。电路简单,这个电路通过扩展时钟电路,数码管显示电路来实现实时时钟电路显示。

      

   单片机最小系统电路图

                

                       图3 AT89C52芯片引脚

89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。

 管脚说明:

   VCC:供电电压。 GND:接地。

  P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。当P0口的管脚第一次写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

  P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

  P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

  P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口作为AT89C51的一些特殊功能口,管脚 备选功能

  P3.0 RXD(串行输入口)

  P3.1 TXD(串行输出口)

  P3.2 /INT0(外部中断0)

  P3.3 /INT1(外部中断1)

  P3.4 T0(计时器0外部输入)

  P3.5 T1(计时器1外部输入)

  P3.6 /WR(外部数据存储器写选通)

  P3.7 /RD(外部数据存储器读选通)

  RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

  ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

  在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA / VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

 2.2.2复位电路

 RST复位输入端。 当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。

    89C52单片机的最小系统,包括晶振电路,复位电路,确保系统的控制部分。P0端口用作地址/数据复用总线AD[0~7],和日历时钟芯片相连。P1端口用作数码管的段码接口,由于本设计的显示不会出现小数点,因此只使用了a、b、c、d、e、f、g,而没有使用dp(小数点)段。P2端口的P2.1~P2.4作为数码管的位码接口,它们需要通过4-16译码电路以及驱动电路来控制13位数码管的位码选择。P2端口的P2.0在反相之后为日历时钟芯片提供片选信号,需要反相是因为该片选信号为低电平有效。单片机的P3.7(/RD)、P3.6(/WR)引脚和日历时钟芯片的读、写引脚直接相连,它们均为低电平有效。  

      

            高低电位复位电路

    2.2.3 8255可编程并行I/O口接口芯片

    8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。  8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。  

 特性 

 1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。 

 2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC口。它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.  

             

 引脚说明   

    RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即CS    =0时,表示芯片被选中,允许8255与CPU进行通讯;CS    =1时,8255无法与CPU做数据传输。

RD:读信号线,当这个输入引脚为低电平时,即RD=0且CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即WR=0且CS=0时,允许CPU将数据或控制字写入8255。  

    D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 

    PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。  

    PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。  

    PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。 

    A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。  

 当A1=0, A0=0时,PA口被选择;    

 当A1=0, A0=1时,PB口被选择;    

 当A1=1, A0=0时,PC口被选择;    

 当A1=1. A0=1时,控制寄存器被选择。

 2.2.4蜂鸣器的工作原理

          

如图所示,蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机的P3.7引脚控制,当P3.7输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当P3.7输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制P3.7脚的电平来使蜂鸣器发出声音和关闭。 

                        

 

 

2.3软件设计

 2.3.1时间调节原理框图

2.3.2主程序流程图

                     

第三章  总结

硬件设计单片机AT89C52,它是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。单片机是很容易受干扰的控制器,当采用外部晶振时,应尽量让其靠近单片机减少对其干扰,防止程序乱飞现象。软件设计中要完成键值处理,定时中断,延时,键盘扫描,显示等功能。合理利用可以减少CPU利用资源,具有执行效率高等优点。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。在设计的过程中遇到困难我就及时和我的指导老师联系,在老师的帮助下,困难一个一个解决掉,设计也慢慢成型。这次设计的过程是一次再学习,再提高的过程。

本次让我们体味到设计电路、连接电路、调测电路过程中的乐苦与甜。设计是我们将来必需的技能,这次实习恰恰给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。同时在设计的过程中,遇到了一些以前没有见到过的元件,但是通过查找资料来学习这些元件的功能和使用。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像把频率调准等等。这又要我们要灵活处理,在不影响试验的前提下可以加快进度。合理的分配时间。在设计控制电路的时候,我们可以连接显示和时钟电路,这样就加快了完成的进度。最重要的是要熟练地掌握课本上的知识,这样才能对试验中出现的问题进行分析解决。

                         

                 

                  

                

第四章  参考文献

【1】单片机原理与嵌入式系统设计:原理、应用、proteus仿真、实验设计/张齐,朱宁西,毕盛编著。北京:电子工业出版社,2011

【2】李希文.电子测量技术 西安电子科技大学出版社 2008

【3】朱善君等.单片机接口技术与应用。北京:清华大学出版社,2005

【4】马忠梅等.单片机的C语言应用设计。北京:北京航空航天大学出版社,1999

【5】周润景等.PROTEUS入门实用教程。北京:机械工业出版社,2007

【6】朱清慧等.Proteus教程----电子线路设计、制版与仿真。北京:清华大学出版社,2008

【7】张齐.单片机应用系统设计技术----基于C51的proteus仿真。北京:电子工业出版社,2009

【8】谭浩强.C++程序设计.北京:清华大学出版社.2011.

【9】邱关源.电路(第五版).北京:高等教育出版社.2006.

                             

附录

一、仿真图:

二、程序清单:

    #include<reg52.h>                                           

#include<absacc.h>

#define PA XBYTE[0x0000]

#define PB XBYTE[0x2000]

#define PC XBYTE[0x4000]

#define CMD XBYTE[0x6000]

sbit up=P1^0;

sbit down=P1^1;

sbit FMQ=P1^3;

bit flag_TR=0;

unsigned char flag_SET=0,shi=0,fen=0,miao=0,temp=0,i;

unsigned char shu[10]={

   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

};

void init()

{

   IE=0x87;

   TMOD=0x01;

   TH0=0x4c;

   TL0=0X00;

   TCON=0x05;

   CMD=0x80;

}

void delay(unsigned int m)

{

   unsigned char count;

while(m!=0)

{

    for(count=0;count<239;count++){}

    m--;

}  

}

void display(unsigned char shi,unsigned char fen,unsigned char miao)

{

   unsigned char shi0,shi1,fen0,fen1,miao0,miao1;  

   shi0=shi/10; shi1=shi%10;

   fen0=fen/10; fen1=fen%10;

   miao0=miao/10; miao1=miao%10;

   PA=0x80;

   PB=shu[shi0];

   delay(5);

   PA=0x40;

   if(flag_SET==3&&!flag_TR)

       PB=shu[shi1]&0x7f;

   else

       PB=shu[shi1];

   delay(5);

   PA=0x20;

   PB=shu[fen0];

   delay(5);

   PA=0x10;

   if(flag_SET==2&&!flag_TR)

       PB=shu[fen1]&0x7f;

   else

       PB=shu[fen1];

   delay(5);

   PA=0x08;

   PB=shu[miao0];

   delay(5);

   PA=0x04;

   if(flag_SET==1&&!flag_TR)

       PB=shu[miao1]&0x7f;

   else

    PB=shu[miao1];

   delay(5);

}

void main()

{

   init();

   while(1)

   {

       display(shi,fen,miao);

       if(flag_TR==0)

       {

           TR0=0;

           if(flag_SET==1&&up==0)

           {

               while(up==0);

               miao++;

               if(miao==60)miao=0;

           }

           if(flag_SET==1&&down==0)

           {

               while(down==0);

               miao--;

               if(miao>60)miao=59;

           }

           if(flag_SET==2&&up==0)

           {

               while(up==0);

               fen++;

               if(fen==60)fen=0;

           }

           if(flag_SET==2&&down==0)

           {

            while(down==0);

               fen--;

               if(fen>60)fen=59;

           }  

           if(flag_SET==3&&up==0)

           {

               while(up==0);

               shi++;

               if(shi==24)shi=0;

           }

           if(flag_SET==3&&down==0)

           {

               while(down==0);

               shi--;

               if(shi>24)shi=23;

           }

       }

       if(flag_TR==1)

       {

           TR0=1;

       }

       if(flag_TR==1&&fen==0&&miao==0)

       {

           for(i=0;i<shi;i++)

           {

               FMQ=0;

               delay(300);

               FMQ=1;

               delay(300);

        }

        while(miao==0);

    }

}

}

void timer0() interrupt 1

{

   EA=0;

   TH0=0x4c;

   TL0=0x00;

   flag_SET=0;

   temp++;

   if(temp==20)

   {

       temp=0;

       miao++;   

   }

   if(miao==60)

   {

       miao=0;

       fen++;

   }              

   if(fen==60)

   {

       fen=0;

       shi++;

   }

   if(shi==24)

   {

       shi=0;

   }                                        

   EA=1;

}

void int_0() interrupt 0

{

EA=0;

flag_TR=!flag_TR;

EA=1;

}

void int_1() interrupt 2

{

   EA=0;

   if(!flag_TR)

       flag_SET++;

   flag_SET%=4;

   EA=1;

}

相关推荐