范文一:单片机设计报告
目录
目录 ................................................................. 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 #include #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++){}>239;count++){}> } } 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; PB=shu[shi1]; else delay(5); PA=0x20; PB=shu[fen0]; delay(5); PA=0x10; if(flag_SET==2&&!flag_TR) PB=shu[fen1]&0x7f; PB=shu[fen1]; else delay(5); PA=0x08; PB=shu[miao0]; delay(5); PA=0x04; if(flag_SET==1&&!flag_TR) } void main() { init(); while(1) { PB=shu[miao1]&0x7f; else PB=shu[miao1]; delay(5); display(shi,fen,miao); if(flag_TR==0) { TR0=0; if(flag_SET==1&&up==0) { } if(flag_SET==1&&down==0) while(up==0); miao++; if(miao==60)miao=0; } { } if(flag_SET==2&&up==0) { } if(flag_SET==2&&down==0) { while(down==0); fen--; if(fen>60)fen=59; while(up==0); fen++; if(fen==60)fen=0; while(down==0); miao--; if(miao>60)miao=59; } if(flag_SET==3&&up==0) { } if(flag_SET==3&&down==0) { } while(down==0); shi--; if(shi>24)shi=23; while(up==0); shi++; if(shi==24)shi=0; if(flag_TR==1) { } TR0=1; if(flag_TR==1&&fen==0&&miao==0) { for(i=0;i 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; } 多功能无线数字钟 摘要:本系统装置的主要功能包括数字钟、无线控制和温度计。数字钟通 过时钟芯片DS1302实现,时钟准确,误差小;无线控制采用红外遥控,成本低,操作距离适中;温度采集采用温度传感器DS18B20,精度高。系统扩展、系统配置灵活。容易构成何种规模的应用系统,且应用系统较高的软、硬件利用系数。单片机具有可编程性,硬件的功能描述可完全在软件上实现,而且设计时间短,成本低,可靠性高。综上所述,利用振荡电路与单片机结合实现电阻、电容、电感测试仪更为简便可行,节约成本。所以,本次设计选定以STM8S105系列单片机为核心来进行。 关键词:STM8单片机、红外无线、DS18B20、DS1302 目录 1. 设计任务及要求 ...................................................................................................... 3 1.1 数字钟任务及要求 . ........................................................................................................... 3 1.2 温度计任务及要求 . ........................................................................................................... 3 2. 方案比较及选择 ...................................................................................................... 3 2.1显示部分 . ............................................................................................................................ 3 2.2 红外遥控器 . ....................................................................................................................... 3 2.3 红外接收电路 . ................................................................................................................... 4 2.4 语言模块 . ........................................................................................................................... 4 2.5温度采集 . ............................................................................................................................ 4 2.3 MCU 方案........................................................................................................................ 4 3. 硬件电路设计 .......................................................................................................... 5 3.1 单元电路设计 . ................................................................................................................... 5 3.1.1 单片机控制电路设计 . ............................................................................................ 5 3.1.2 显示电路设计 . ........................................................................................................ 6 3.1.4 时钟电路设计 . ........................................................................................................ 6 3.1.5 温度采集电路设计 . ................................................................................................ 6 3.1.6 红外接收电路设计 . ................................................................................................ 7 3.1.7 蜂鸣器电路设计 . .................................................................................................... 7 3.1.8 电源电路设计 . ........................................................................................................ 8 3.2 整体电路 . ........................................................................................................................... 8 4. 软件程序设计 .......................................................................................................... 9 4.1 程序算法设计流程图 . ....................................................................................................... 9 5. 系统测试及结果 .................................................................................................... 10 6. 设计总结 ................................................................................................................ 10 参考文献 ..................................................................................................................... 10 附录1 电路原理图及印刷板图 ................................................................................ 11 附录2 源程序 ............................................................................................................ 12 1. 设计任务及要求 1.1 数字钟任务及要求 (1)显示年月日时分秒及星期信息。 (2)具有可调整日期和时间功能 (3)增加闰年计算功能 (4)实现语音报时 (5)电子秤设计 1.2 温度计任务及要求 (1)基本范围-50℃-110℃ (2)精度误差小于0.5℃ (3)LED 数码直读显示 (4)实现语音报数 2. 方案比较及选择 2.1显示部分 方案一: 数值显示可采用LED 点阵显示,如16*16点阵 方案二: 采用七段数码管显示数值,如共阴数码管 方案选择: 考虑到数码管显示操作简单,硬件电路少,本设计采用数码管显示。 2.2 红外遥控器 方案一: 采用红外发射二极管,搭配单片机,软件编码再结合按键检测可以自制专业红外反射器 方案二: 采用市面上现成的遥控器 方案选择: 由于自己搭建发射电路复制和制作成本高,这里采用现成的红外遥控器,38KHZ 载波。 2.3 红外接收电路 方案选择: 结合发射器,这里采用一体化红外接收头HS0038, 方案不做比较。 2.4 语言模块 方案选择: 采用语音模块,它是主要由语音芯片组合的模块电路。 2.5温度采集 方案一: 可以采用AD595温度传感器,结合STM8S 单片机内嵌的ADC 采集电压经过软件计算,进而得到温度值 方案二: 采用单总线数字温度传感器DS18B20 方案选择: 由于模拟传感器需要配合前置电路和数模转换器,需消耗成本,这里采用数字传感器DS18B20 2.3 MCU方案 方案一:51单片机 51单片机是目前应用最广泛的8位单片机之一,很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。其功能特点如下: a 、可以仿真63K 程序空间, 接近64K 的16位地址空间; b 、可以仿真64Kxdata 空间, 全部64K 的16位地址空间; c 、可以真实仿真全部32 条IO 脚; d 、完全兼容keilC51 UV2 调试环境, 可以通过UV2 环境进行单步, 断点, 全速等操作; e 、可以使用C51语言或者ASM 汇编语言进行调试; f 、可选使用用户晶振,支持0-40MHZ 晶振频率; g 、片上带有768字节的xdata, 可以在仿真时选用,进行xdata 的仿真; h 、可以仿真双DPTR 指针; i 、可以仿真去除ALE 信号输出。 方案二:STM8单片机 STM8S 是意法半导体公司近些年推出的8位微处理器,与AVR 等新一代8位微处理器相比,其功能更强大,但价格相对便宜。其功能特点如下: a 、最大支持128kB FLASH 、6Kb RAM 、2Kb EEPROM, 可达30万次擦写,最大 封装有68引脚; b 、灵活的时钟控制,4个主时钟源,并带有时钟监控的时钟安全保障系统 c 、带有32个中断的嵌套中断控制器,6个外部中断向量,最多27个外部中断; d 、高级控制定时器:4 个捕获/ 比较通道,3 个互补输出,死区控制和灵活的同步,16 位通用定时器,带有3 个捕获/ 比较通道(IC、OC 或 PWM),带有8位预分频器的8 位基本定时器,自动唤醒定时器,2 个看门狗定时器:窗口看门狗和独立看门狗; e 、非常强健的I/O 设计,对倒灌电流有非常强的承受能力。 方案选择: 51 单片机是一款典型的单片机,但是由于51 单片机的FLASH 和RAM 都比较小,寄存器和定时器的数量少,体积大,所以不建议采用。方案二中的STM8S 系列单片机,体积小,功能强大,价格便宜。所以选择STM8 作为主控制MCU 。 3. 硬件电路设计 3.1 单元电路设计 3.1.1 单片机控制电路设计 单片机控制电路主要包括单片机及其周围元件。 3.1.2 显示电路设计 显示电路主要包括四位共阴数码管、锁存器74HC573、译码器74HC138。电路如下图所示: 3.1.4 时钟电路设计 时钟电路主要包括DS1302、32768晶振及纽扣电池。电路如下图所示: 3.1.5温度采集电路设计 温度采集电路包括DS18B20及其插座。电路如下图所示: 3.1.6 红外接收电路设计 电路如下图所示: 3.1.7 蜂鸣器电路设计 电路如下图所示: 3.1.8 电源电路设计 电路如下图所示: 3.2 整体电路 整体电路图如下图所示: 4. 软件程序设计 4.1程序算法设计流程图 5. 系统测试及结果 经实验检测,本装置系统能实现数字钟、闹钟设定、红外无线控制、语音报时、温度采集及显示灯功能。功能强大,并且系统稳定,造价低,达到了课程设计的要求,是理想的多功能数字时钟。 6. 设计总结 经过几个星期的努力,本设计系统终于完成了。通过该课程设计,掌握了硬件电路制作和软件编译的基本过程及其各阶段的基本任务,熟悉了产品设计制作的总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的, 对该理论在实践中的应用有深刻的理解 。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计表示出来,加深了对理论知识的理解。 课程设计中的电路和程序比较复杂,因此调试的过程更是考验我们耐性和细心。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我对PCB 电路设计和单片机C 语言编程有了更深的认识,操作能力有了提高。 参考文献 [1]童诗白华英成,模拟电子技术基础[M].北京:高等教育出版社,2006. [2]阎石,数字电子技术基础[M].北京:高等教育出版社,2006. [3]胡斌胡松,电子元器件[M].北京. 电子工业出版社,2010. [4]孙肖子,电子设计指南[M].北京. 高等教育出版社,2006. [5]谭浩强,C 程序设计[M].北京:清华大学出版社,2010. 附录1电路原理图及印刷板图 PCB 电路正面: PCB 电路反面: 附录2源程序 (1)主函数文件程序 stm8/ ;********************************************* ; 功能:遥控数字时钟 ; 时间:2012/11/30 ; 地点:广东工业大学 ;********************************************** #INCLUDE "STM8S105C_S.INC" #include "mapping.inc" #INCLUDE "RAM.INC" #INCLUDE "ISD1730.INC" segment 'rom' main.l ; initialize SP ldw X,#stack_end ldw SP,X #ifdef RAM0 ; clear RAM0 ram0_start.b EQU $ram0_segment_start ram0_end.b EQU $ram0_segment_end ldw X,#ram0_start clear_ram0.l clr (X) incw X cpw X,#ram0_end jrule clear_ram0 #endif #ifdef RAM ; clear RAM1 ram1_start.w EQU $ram1_segment_start ram1_end.w EQU $ram1_segment_end ldw X,#ram1_start clear_ram1.l clr (X) incw X cpw X,#ram1_end jrule clear_ram1 #endif ; clear stack stack_start.w EQU $stack_segment_start stack_end.w EQU $stack_segment_end ldw X,#stack_start clear_stack.l clr (X) incw X cpw X,#stack_end jruleclear_stack INTEL MOV CLK_CKDIVR,#00H ;主频16M ;*********************延时*********************** CALL IO_INIT ;*********************时钟初始化***************** CALL TIM1_INIT ; CALL TIM2_INT ;红外解码定时器2初始化 CALL TIM3_INIT ;定期3初始化 CALL TIM4_INIT ;------------------------------ MOV ITC_SPR3,#0 MOV ITC_SPR4,#01110100B MOV ITC_SPR6,#0 ;------------------------------- ; CALL DS1302_INIT ;时钟初始化 ;*********************相关寄存器初始化*********** MOV {CLOCK_LED+2},#16 ;数码第3位显示“-” MOV {CLOCK_LED+5},#16 ;数码第6位显示“-” MOV {TEMPERATURE+4},#17 ;温度模式下数码第3位显示“o ” MOV {TEMPERATURE+5},#0CH;温度模式下数码第4位显示“C ” MOV X_TIMES_TRMPERATURE,#100 MOV TIM1_TIMES_TEMP,#10 MOV {ALARM_LED+2},#16 ;闹钟设置模式下第3位显示‘-’ MOV ALARM_MIN,#55H MOV ALARM_HOUR,#01H MOV X_TIM1,#35 ;红外接收成功指示灯闪烁时间 MOV X_TIM2,#90 ;时间/日期更新时间 MOV X_TIM3,#20 ;调整模式下数码管闪烁效果快慢 RIM ;开总中断 MOV BEEP_TIME,#3 ;************************************************************ ; 调试区 CALL ISD1730_INIT MOV X_MS,#10 CALL DELAY_MS ;************************************************************ JP CLOCK_MAIN ;进入任务分配 interrupt TIM1_INTERRUPT TIM1_INTERRUPT.l JP TIM1_INTERRUPT_CODE interrupt TIM4_INTERRUPT TIM4_INTERRUPT.l JP TIM4_INTERRUPT_CODE ;******************定时器3更新中断******************* interrupt TIMER_3 TIMER_3.l BRES TIM3_SR1,#0 ;必要时的清除更新产生的更新标志 BTJF LED_SHAN,TIMER_3_EXIT DEC X_TIM3 JRNE TIMER_3_EXIT MOV X_TIM3,#50 BTJT IR_CH1_F,ALARM_LED_SHAN BCPL DISPLAY_SP,#0 ;任务0/1切换,闪烁效果 JRA TIMER_3_EXIT ALARM_LED_SHAN BCPL ALARM_SHAN ;闹钟模式下闪烁标志 TIMER_3_EXIT BTJT LED_OFF,LED_DATA_NOTSHOW CALL LED_DATA_SHOW ;调用数码管显示函数 LED_DATA_NOTSHOW DEC X_TIM2 JRNE TIMER_3_EXIT_1 ;判断是否需要更新时间/日期 MOV X_TIM2,#90 BTJT LED_DATE_TEM,LED_DISPLAY_TEM BSET DS1302_FLAG ;采集时间 BRES DS1820_FLAG JRA TIMER_3_EXIT_1 LED_DISPLAY_TEM BSET DS1820_FLAG ;采集温度 BRES DS1302_FLAG TIMER_3_EXIT_1 BTJF RX_SUCCESS_LED,TIMER_3_EXIT_2;判断是否需要闪烁一下RX_SUCCESS_LED DEC X_TIM1 JRNE TIMER_3_EXIT_2 BSET IR_LED BRES RX_SUCCESS_LED MOV X_TIM1,#35 TIMER_3_EXIT_2 ;*********************关闹钟******************* BTJF ALARM_CLOCK,TIMER_3_EXIT_3 ;BCPL BEEPER TIMER_3_EXIT_3 IRET IRET IRET IRET IRET ;***********定时2更新中断*********** interrupt TIMER_2 TIMER_2.l JP TIM2_INTERRUPT ;***********定时器2捕获中断********* interrupt TIMER_2_CAPTURE TIMER_2_CAPTURE.l JP TIM2_CAPTURE (2)根据时钟计时分配任务 STM8/ ;********************************************* ; 功能:遥控数字时钟 ; 时间:2012/11/30 ; 地点:广东工业大学 ;********************************************** #INCLUDE "STM8S105C_S.INC" #include "mapping.inc" #INCLUDE "RAM.INC" #INCLUDE "ISD1730.INC" SEGMENT 'rom' INTEL ;--------------------时钟任务分配------------------ .CLOCK_MAIN BTJT RX_SUCCESS,GET_IR_FUNCTION ;红外是否有更新 BTJT DS1302_FLAG,GET_TIME ;是否需要更新时间 BTJT DS1820_FLAG,GET_TEMPERATURE ;是否是显示温度模式 BTJT READ_TIME_FLAG,READ_NOWTIME ;报时 BTJT READ_WENDU_FLAG,READ_NOWWENDU;报温 JP CLOCK_MAIN GET_TIME;---------------------------更新时间 BRES DS1302_FLAG ;清除更新时间标志位 CALL DS1302_GETTIME ;调用读取时间函数 JP CLOCK_MAIN ;返回任务分配 GET_TEMPERATURE;--------------------温度显示模式 BRES DS1820_FLAG ;清除显示温度模式标志位 CALL READ_TEMPERATURE ;取温度显示 JP CLOCK_MAIN GET_IR_FUNCTION;--------------------遥控有按键按下,并成功接收 JP IR_TASK ;解码 JP CLOCK_MAIN READ_NOWTIME;-----------------------报时 BRES READ_TIME_FLAG ; CALL READ_TIME JP CLOCK_MAIN READ_NOWWENDU;-----------------------报温度值 ; CALL READ_WENDU BRES READ_WENDU_FLAG JP CLOCK_MAIN END (3)红外遥控任务管理文件 STM8/ ;********************************************* ; 功能:红外按键执行程序 ; 时间:2012/11/30 ; 地点:广东工业大学 ;********************************************** #INCLUDE "STM8S105C_S.INC" #include "mapping.inc" #INCLUDE "RAM.INC" #INCLUDE "ISD1730.INC" SEGMENT 'rom' INTEL ;************************红外任务解码********************** .IR_TASK BSET RX_SUCCESS_LED BRES IR_LED BRES RX_SUCCESS BTJF LED_OFF,IR_TASK_NEXT ;判断此时是否数码管关闭 LD A,{RX_BUF+3} ;是关闭 CP A,IR_ON_OFF ;判断是否为开关按键 JRNE IR_CODE_TASK_ERROR ;不是,错误,返回 JP IR_TASK2_OFF ;是,执行IR_TASK2_OFF IR_TASK_NEXT CLRW X LD A,#21 ;21个任务码 LD XL,A LD A,{RX_BUF+3} IR_CODE_TASK_LOOP DECW X JREQ IR_CODE_TASK_ERROR ;小于0,出错 CP A,(IR_TASKCODE,X) ;查表方式取出值 JRNE IR_CODE_TASK_LOOP JRA IR_CODE_TASK_SUCCESS IR_CODE_TASK_ERROR ; ;清相关标志位 JP CLOCK_MAIN IR_CODE_TASK_SUCCESS LD A,XL LD IR_TASK_SP,A ;任务号放IR_TASK_SP CPW X,#15 JRNC IR_CODE_FUNCTION_TASK ;功能键 CPW X,#5 JRNC IR_CODE_FIGURE_TASK ;数字键 LD A,#3 JRA IR_TASK_CONTROL IR_CODE_FIGURE_TASK LD A,#1 JRA IR_TASK_CONTROL IR_CODE_FUNCTION_TASK LD A,#2 IR_TASK_CONTROL LD XL,A LD A,#3 MUL X,A JP (IR_TASK_CONTROL_1,X) IR_TASK_CONTROL_1 JP IR_TASK0 JP IR_TASK1 JP IR_TASK2 JP IR_TASK3 IR_TASK0 JP CLOCK_MAIN ;---------------------------------------------------------------- IR_TASK1 ;数字键 BTJT IR_MODE_F,IR_TASK1_EXIT JP CLOCK_MAIN ;不是设置模式,返回 IR_TASK1_EXIT CLRW X LD A,IR_TASK_SP ;'9'->IR_TASK_SP=6 '8'->IR_TASK_SP=7 SUB A,#5 ;'0'->IR_TASK_SP=15 15-6=9 LD XL,A ;'9'->IR_TASK_SP=6 6-6=0 LD A,#3 MUL X,A JP (IR_TASK1_CONTROL_1,X) IR_TASK1_CONTROL_1 JP IR_TASK19 JP IR_TASK18 JP IR_TASK17 JP IR_TASK16 JP IR_TASK15 JP IR_TASK14 JP IR_TASK13 JP IR_TASK12 JP IR_TASK11 JP IR_TASK10 ;----------------------"0"----------------------- IR_TASK10 MOV ADJUST_H,#0 BTJF IR_CH1_F,IR_TASK10_EXIT JP ALARM_ADJUST IR_TASK10_EXIT JP IR_ADJUST_TASK IR_TASK11 MOV ADJUST_H,#1 BTJF IR_CH1_F,IR_TASK11_EXIT JP ALARM_ADJUST IR_TASK11_EXIT JP IR_ADJUST_TASK IR_TASK12 MOV ADJUST_H,#2 BTJF IR_CH1_F,IR_TASK12_EXIT JP ALARM_ADJUST IR_TASK12_EXIT JP IR_ADJUST_TASK IR_TASK13 MOV ADJUST_H,#3 BTJF IR_CH1_F,IR_TASK13_EXIT JP ALARM_ADJUST IR_TASK13_EXIT JP IR_ADJUST_TASK IR_TASK14 MOV ADJUST_H,#4 BTJF IR_CH1_F,IR_TASK14_EXIT JP ALARM_ADJUST IR_TASK14_EXIT JP IR_ADJUST_TASK IR_TASK15 MOV ADJUST_H,#5 BTJF IR_CH1_F,IR_TASK15_EXIT JP ALARM_ADJUST IR_TASK15_EXIT JP IR_ADJUST_TASK IR_TASK16 MOV ADJUST_H,#6 BTJF IR_CH1_F,IR_TASK16_EXIT JP ALARM_ADJUST IR_TASK16_EXIT JP IR_ADJUST_TASK IR_TASK17 MOV ADJUST_H,#7 BTJF IR_CH1_F,IR_TASK17_EXIT JP ALARM_ADJUST IR_TASK17_EXIT JP IR_ADJUST_TASK IR_TASK18 MOV ADJUST_H,#8 BTJF IR_CH1_F,IR_TASK18_EXIT JP ALARM_ADJUST IR_TASK18_EXIT JP IR_ADJUST_TASK IR_TASK19 MOV ADJUST_H,#9 BTJF IR_CH1_F,IR_TASK19_EXIT JP ALARM_ADJUST IR_TASK19_EXIT JP IR_ADJUST_TASK IR_ADJUST_TASK LD A,IR_MODE_SP CP A,#2 JREQ DS1302_TIME_ADJUST CP A,#3 JREQ DS1302_DATE_ADJUST JP IR_ADJUST_TASK_EXIT DS1302_TIME_ADJUST ;*---------时间调整 CLRW X LD A,LED_SHANSHUO_1 ;第几位 LD XL,A LD A,(TIME_ADJUST,X) LD ADJUST_W,A BTJF LED_SHANSHUO,#0,ADJUST_SHI DEC LED_SHANSHUO_1 LD A,LED_SHANSHUO_1 LD XL,A LD A,(CLOCK_LED,X) ;取显示值 INC LED_SHANSHUO_1 SWAP A AND A,#11110000B OR A,ADJUST_H LD ADJUST_H,A JRA IR_ADJUST_TASK_ONE ADJUST_SHI INC LED_SHANSHUO_1 LD A,LED_SHANSHUO_1 LD XL,A LD A,(CLOCK_LED,X) ;取显示值 DEC LED_SHANSHUO_1 AND A,#0FH SWAP A OR A,ADJUST_H SWAP A LD ADJUST_H,A IR_ADJUST_TASK_ONE CALL DS1302_ADJUST JRA IR_ADJUST_TASK_EXIT DS1302_DATE_ADJUST ;----------日期调整 CLRW X LD A,LED_SHANSHUO_1 ;第几位 LD XL,A LD A,(DATE_ADJUST,X) LD ADJUST_W,A BTJF LED_SHANSHUO,#0,ADJUST_DATE_SHI DEC LED_SHANSHUO_1 LD A,LED_SHANSHUO_1 LD XL,A LD A,(CLOCK_LED,X) ;取显示值 INC LED_SHANSHUO_1 SWAP A AND A,#11110000B OR A,ADJUST_H LD ADJUST_H,A JRA IR_ADJUST_DATE_TASK_ONE ADJUST_DATE_SHI INC LED_SHANSHUO_1 LD A,LED_SHANSHUO_1 LD XL,A LD A,(CLOCK_LED,X) ;取显示值 DEC LED_SHANSHUO_1 AND A,#0FH SWAP A OR A,ADJUST_H SWAP A LD ADJUST_H,A IR_ADJUST_DATE_TASK_ONE CALL DS1302_ADJUST IR_ADJUST_TASK_EXIT JP IR_TASK2_YOU ;调整完,闪烁位自动加1 JP CLOCK_MAIN ;---------------------闹钟模式设置---------- ALARM_ADJUST CLRW X LD A,LED_SHANSHUO_1 ;第几位 LD XL,A LD A,ADJUST_H LD (ALARM_LED,X),A ADJUST_ALARM_ONE ;更新一下ALARM_SEC,ALARM_MIN,ALARM_HOUR CLRW X LD A,(ALARM_LED,X) ;小时十位 INCW X SWAP A OR A,(ALARM_LED,X) ;小时个位 LD ALARM_HOUR,A INCW X INCW X LD A,(ALARM_LED,X) ;分钟十位 INCW X SWAP A OR A,(ALARM_LED,X) ;分钟个位 LD ALARM_MIN,A ADJUST_ALARM_EXIT JP IR_TASK2_YOU ;闪烁位自动加1,下1位 JP CLOCK_MAIN ;------------------------------------------------------------------ IR_TASK2 ;功能键 CLRW X LD A,IR_TASK_SP ;'MOED'->IR_TASK_SP=21 'ZUO'->IR_TASK_SP=20 SUB A,#15 ;'BACK'->IR_TASK_SP=16 16-16=0 LD XL,A ;'MOED'->IR_TASK_SP=21 21-16=5 LD A,#3 MUL X,A JP (IR_TASK2_CONTROL_1,X) IR_TASK2_CONTROL_1 JP IR_TASK2_BACK JP IR_TASK2_STOP JP IR_TASK2_OFF JP IR_TASK2_YOU JP IR_TASK2_ZUO JP IR_TASK2_MODE ;-----------------------MODE------------------------------------- IR_TASK2_MODE ;设置模式 BSET IR_MODE_F ;置标志位 LD A,IR_MODE_SP CLRW X LD XL,A LD A,#3 MUL X,A JP (ONE_IR_TASK2_MODE_1,X) ONE_IR_TASK2_MODE_1 JP ONE_IR_TASK0 JP ONE_IR_TASK1 JP ONE_IR_TASK2 JP ONE_IR_TASK3 ONE_IR_TASK0 ;按1下 BSET DS1302_GET_DATE_TIME JRA ONE_IR_TASK2_MODE_EXIT ONE_IR_TASK1 ;按2下 BRES DS1302_GET_DATE_TIME ;显示时间;IR_MODE_SP=2 BSET LED_SHAN ;闪烁显示 JRA ONE_IR_TASK2_MODE_EXIT ONE_IR_TASK2 ;按3下 BSET DS1302_GET_DATE_TIME ;显示日期 BSET LED_SHAN ;闪烁显示 JRA ONE_IR_TASK2_MODE_EXIT ONE_IR_TASK3 ;4 CLR LED_SHANSHUO_1 ;回0 BRES IR_MODE_F ;模式键按下标志位清除 BRES LED_SHAN ;停止闪烁 BRES DS1302_GET_DATE_TIME;显示时间 CLR DISPLAY_SP BRES LED_DATE_TEM CLR IR_MODE_SP JP CLOCK_MAIN ONE_IR_TASK2_MODE_EXIT INC IR_MODE_SP ;模式显示指针加1 JP CLOCK_MAIN ;----------------------"<<"------------------------------------><"------------------------------------> BTJF IR_MODE_F,IR_TASK2_YOU_EXIT DEC LED_SHANSHUO_1 LD A,LED_SHANSHUO_1 JRPL IR_TASK2_ZUO_1 MOV LED_SHANSHUO_1,#7 ;LED_SHANSHUO_1<> JRA IR_TASK2_ZUO_EXIT IR_TASK2_ZUO_1 CP A,#2 JRNE IR_TASK2_ZUO_2 DEC LED_SHANSHUO_1 JRA IR_TASK2_ZUO_EXIT IR_TASK2_ZUO_2 CP A,#5 JRNE IR_TASK2_ZUO_EXIT DEC LED_SHANSHUO_1 IR_TASK2_ZUO_EXIT ;模式退出 CALL SP_SWAP ;计算LED_SHANSHUO JP CLOCK_MAIN ;----------------------">>>"------------------------------------- IR_TASK2_YOU BTJF IR_MODE_F,IR_TASK2_YOU_EXIT INC LED_SHANSHUO_1 LD A,LED_SHANSHUO_1 CP A,#2 JRNE IR_TASK2_YOU_1 INC LED_SHANSHUO_1 JRA IR_TASK2_YOU_EXIT IR_TASK2_YOU_1 CP A,#5 JRNE IR_TASK2_YOU_2 INC LED_SHANSHUO_1 JRA IR_TASK2_YOU_EXIT IR_TASK2_YOU_2 CP A,#8 JRC IR_TASK2_YOU_EXIT CLR LED_SHANSHUO_1 IR_TASK2_YOU_EXIT ;模式退出 CALL SP_SWAP ;计算LED_SHANSHUO JP CLOCK_MAIN ;----------------------ON/OFF------------------------------------ IR_TASK2_OFF ;开/关闭 BCPL LED_OFF ;开/关数码管标志位 CLR PB_ODR ;请数码管显示 ; BCPL TIM3_CR1,#0 ;开/关闭定时器 JP CLOCK_MAIN ;-----------------------STOP------------------------------------- IR_TASK2_STOP BCPL IR_STOP_F BTJT IR_STOP_F,DS1302_STOP MOV RTC_ADDR,#8EH MOV RTC_DATA,#0H CALL WIRTE_DATA1302 MOV RTC_ADDR,#80H LD A,SEC AND A,#01111111B LD RTC_DATA,A CALL WIRTE_DATA1302 ;写入秒 JRA IR_TASK2_STOP_EXIT DS1302_STOP MOV RTC_ADDR,#8EH MOV RTC_DATA,#0H CALL WIRTE_DATA1302 MOV RTC_ADDR,#80H LD A,SEC OR A,#080H LD RTC_DATA,A CALL WIRTE_DATA1302 ;写入秒 IR_TASK2_STOP_EXIT ;退出 JP CLOCK_MAIN ;---------------------BACK_MUNE---------------------------------- IR_TASK2_BACK BRES TIM1_CR1,#0 BRES LED BSET PE_ODR,#6 BRES TIM4_CR1,#0 ;关闹钟 CLR LED_SHANSHUO_1 ;回0 BRES IR_MODE_F ;模式键按下标志位清除 BRES IR_CH1_F ;闹钟设置键标志位清除 BRES LED_SHAN ;停止闪烁 BRES DS1302_GET_DATE_TIME;显示时间 CLR DISPLAY_SP BRES LED_DATE_TEM MOV RTC_ADDR,#8EH MOV RTC_DATA,#0H CALL WIRTE_DATA1302 MOV RTC_ADDR,#80H LD A,SEC AND A,#01111111B LD RTC_DATA,A CALL WIRTE_DATA1302 ;写入秒 JP CLOCK_MAIN ;----------------------CH1/CH2/EQ/----------------------- IR_TASK3 CLRW X LD A,IR_TASK_SP ;'9'->IR_TASK_SP=6 '8'->IR_TASK_SP=7 LD XL,A ;'9'->IR_TASK_SP=6 6-6=0 LD A,#3 MUL X,A JP (IR_TASK3_CONTROL_1,X) IR_TASK3_CONTROL_1 JP CLOCK_MAIN JP CLOCK_MAIN JP IR_TASK_CH1 JP IR_TASK_CH2 JP IR_TASK_EQ IR_TASK_CH1 ;闹钟设置 BSET IR_MODE_F ;功能键按下 BSET IR_CH1_F BSET LED_SHAN ;闪烁 MOV DISPLAY_SP,#4 ;闹钟设置模式显示 JP CLOCK_MAIN IR_TASK_CH2 ;开/关闹钟 BCPL ALARM_CLOCK_F BTJF ALARM_CLOCK_F,IR_TASK_CH2_STOP MOV {CLOCK_LED+5},#18;指示灯开 JRA IR_TASK_CH2_EXIT IR_TASK_CH2_STOP MOV {CLOCK_LED+5},#16;指示灯关 BRES ALARM_CLOCK ;关闹钟到标志位 BSET BEEPER ;关蜂鸣器 IR_TASK_CH2_EXIT JP CLOCK_MAIN ;---------------------温度/时间----------------------------------- IR_TASK_EQ BCPL LED_DATE_TEM BTJT LED_DATE_TEM,IR_TASK_EQ_1 MOV DISPLAY_SP,#0 JRA IR_TASK_EQ_EXIT IR_TASK_EQ_1 MOV DISPLAY_SP,#2 IR_TASK_EQ_EXIT ;EQ退出 JP CLOCK_MAIN ;****************************** ; 功能:计算LED_SHANSHUO变量 ; 入口参数:LED_SHANSHUO_1 ; 出口参数:LED_SHANSHUO ;****************************** .SP_SWAP LD A,LED_SHANSHUO_1 CP A,#2 JRNC SP_SWAP_1 ;>= MOV LED_SHANSHUO,LED_SHANSHUO_1 JRA SP_SWAP_EXIT_1 SP_SWAP_1 CP A,#5 JRNC SP_SWAP_2 ;>= DEC LED_SHANSHUO_1 MOV LED_SHANSHUO,LED_SHANSHUO_1 INC LED_SHANSHUO_1 JRA SP_SWAP_EXIT_1 SP_SWAP_2 DEC LED_SHANSHUO_1 DEC LED_SHANSHUO_1 MOV LED_SHANSHUO,LED_SHANSHUO_1 INC LED_SHANSHUO_1 INC LED_SHANSHUO_1 SP_SWAP_EXIT_1 BTJF IR_CH1_F,SP_SWAP_EXIT LD A,LED_SHANSHUO_1 CP A,#6 JRC SP_SWAP_EXIT_2 CLR LED_SHANSHUO_1 SP_SWAP_EXIT_2 SP_SWAP_EXIT RET RET RET RET RET END 河南机电高等专科学校 《嵌入式系统基础》 课程设计报告 设计题目:时钟调时与花样彩灯 系 部: 电子通信工程系 班 级: 应 电 学 号: 100415000 学生姓名: ###### 成 绩: 2012年05月 《嵌入式系统基础》课程设计报告 前言: DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能, 5.5V。采用三线接口与CPU进行同步通信,并可采用突发方工作电压为2.5V, 式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 一、硬件设计 1. 设计思路及原理框图 利用AT89S51单片机和DS1302芯片计算时间和日期,输出信号全部数字化。由数字计数芯片DS1302和单片机AT89S51构成的数字时钟装置,他直接输出时、分、秒的时间数字信号,其也可直接与计算机连接。采用AT89S51单片机控制,软件编程的自由度较大,可通过编程实现各种各样算数算法和逻辑控制,而且体积小,硬件实现简单,安装方便。然后通过六位数码管来显示。 电源电路 四位数码管 复位电路 AT89S51 时钟振荡电路 DS1302 键盘模块 2. 采用的芯片功能介绍 2.1 引脚功能及结构 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功 2 能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。 下图为DS1302的引脚功能图: 2.2 DS1302的控制字节 DS1302 的控制字下图所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 RAM RD 1 A4 A3 A2 A1 A0 CK W Ds1302的控制字节 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 2.4 DS1302的寄存器 3 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据 位为BCD码形式,其日历、时间寄存器及其控制字见下表: 取值范围 各位内容 寄存器 命令字 名称 写操作 读操作 7 6 5 4 3 2 1 0 秒寄存器 80H 81H 00-59 CH 10SEC SEC 分寄存器 82H 83H 00-59 0 10MIN MIN 时寄存器 84H 85H 01-02或00-23 12/24 0 10HR HR 日寄存器 86H 87H 01-28、29、30、31 0 0 10DATE DATE 月寄存器 88H 89H 01-12 0 0 0 10M MONTH 周寄存器 8AH 8BH 01-07 0 0 0 0 0 DAY 年寄存器 8CH 8DH 00-99 10YEAR YEAR 2.5 AT89S51芯片功能 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes system programmable)的可反复擦写1000次的Flash只读程序存储器,ISP(In- 器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令 系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单 元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价 比的解决方案。 4 D1 +5V 蜂鸣器 D2 D3dpdpdpdpdpdpgggggg666666R1------USBffffff7777778550ddddddaaaaaa999999ecececececec10101010101010KA6A5A4A3A2A1dpbdpbdpbdpbdpbdpb gggggg111111fbfbfbfbfbfbX8cccccc222222VCCVCCVCCVCCVCCVCCa8a8a8a8a8a8IN4148X3dddddd1444444扬声器接口p1.1eeeeee2555555 S4S2S3S1 VCCVCCVCCVCCVCCVCC131313131313141414141414QHQHQHQHQHQHCLRCLRCLRCLRCLRCLRS8121212121212S5S6S7QGQGQGQGQGQG999999CLKCLKCLKCLKCLKCLK111111111111QFQFQFQFQFQF888888101010101010S12S9S10S11QEQEQEQEQEQEGNDGNDGNDGNDGNDGND QDQDQDQDQDQDIC5IC6IC7IC8IC9IC10+5V767676767676S13S14S15QCQCQCQCQCQC74LS16474LS16474LS16474LS16474LS16474LS164S16555555 QBQBQBQBQBQB2424242424244.7kBBBBBBQAQAQAQAQAQA131313131313AAAAAA+5V1P0.0IC2ATMEGA8P0.0P0.422923P0.1+5VPC8(RESET)PC0(ADC0)3P0.124P0.2RXDPC1(ADC1)P0.54X122125P0.3TXDGNDAGNDPC2(ADC2)5RSTP0.22026X7X3P0.42AREFPC3(ADC3)P0.661827P1.0P0.5R5V1+5VAVCCPC4(ADC4/SDA)111397P0.328P0.0P1.1p1.0P0.0P0.6RSTPC5(ADC5/SCL)2P0.7223887+5VP0.1P1.2P1.4p1.1P0.1P0.7+5VXTAL1333379P0.2东红P1.3p1.2P0.2Y244436510×1230+5V北绿12MX12P1.4p1.3P0.3PD0(RXD)P1.055535831北黄p1.4P0.4GNDXTAL2PD1(TXD)P1.16163432USB3北红C7p1.5P0.5R5+5VPD2(INT0)P1.27273351西绿10uFX5p1.6P0.6GNDGNDPD3(INT1)P1.383832西黄10Kp1.7P0.7RESET9MOSI4128412USB2西红P2.7P0.3MISO+5VVCCPB0(ICP)P1.51052RST92713USB3南绿LED1LED2P0.4RESETP2.6SCKPB1(OC1A)P1.611VCC6326INT114RSTP0.5南黄P2.5RSTPB2(OC1B)P1.712742515P1.5P0.6南红P2.3P2.4GNDR11PB3(MOS1/OCZ)10K13P2.3C385AT89S52316P1.6+5VP0.7东绿RXDP2.2GNDPB4(MISO)14613P2.222P17P1.7东黄TXDP2.1INT1 (P3.3)、X9+5VPB5(SCK)1571224P2.1INT0INT0 (P3.2)P2.3P2.02V2上(加)16C4823P2.0GNDINT1P2.2+5V右(移)1791522USB322PP2.7P3.4T1 (P3.5)P2.1TXDINT1R1018R9左(移)1421P2.622PP3.5T0 (P3.4)P2.0RXDINT0510 1919510USB2下(减)C8Y3P2.5P3.5X1GNDX1EA201830P2.4P3.4X2ALE/P3. 原理图 ALE22P3129P2.31EA/VPPSEN C9X6PSEN10C5P2.22X4RXD (P3.0) +5V1117+5V0.1uF2P2.13+5V TXD (P3.1)(P3.7) RD+5V+5V1161P2.04GND(P3.6) WRIC3+5VP3.62518RXDP3.7Vcc1Vcc2DZ1R24R253.6VX227P3.5TXDGNDX1SCLKX1010K10K436P3.6X2I/OHRM0038Y1AT24C0245P3.7510GNDRSTDZ23.6V3A0VCCR6DS18B20DS1302C132.768KHzC2P3.7A1WP15102P3.6R210KA2SCL2X11R76pF6pFGNDSDA5101+5VR310K3HW+5VP1.0GND GNDR410KR8红外遥控发射、接收温度传感器数据存储扩展GNDUSB+3VUSB+5V10K INT0 32.768KHZ C6 P1.4 0.1uF VCC P1.2 P1.3 X1 X2 VCC A P3.7 CE VCC2 T DS1302 8 P3.6 I/O 9 S P3.5 SCLK VCC1 5 1 GND + - 5 二、软件设计 1. 设计思路 应用系统设计中,软件的工作量占系统设计的百分之四十,软件的结构应清晰、 简洁、流程合理,各功能程序模块化、功能化,设置状态标志以便查询和进行程 序转移、运行、控制,设置软件抗干扰程序和自诊断程序。 2. 程序流程图 (1)主程序流程如下图所示: 开始 定义堆栈区 8155、T0、数据缓冲区、标志位初始化 调用键盘扫描程序 否 是C/R键, 是 地址指针指向计时缓冲区 调用时间设置程序 6 (2)计时模块流程图如下图所示: 保护现场 重装定时器初值 循环次数减1 否 满20次, 是 秒单元加1 否 60s到, 是 秒单元清0,分单元加1 否 60分到, 是 分单元清0,时单元加1 否 24小时到, 是 时单元清0 恢复现场 返回 7 3. 具体程序: #include #define uint unsigned int #define uchar unsigned char sbit ACC0=ACC^0; sbit ACC7=ACC^7; sbit jiak=P2^3; sbit youyik=P2^2; sbit zuoyik=P2^1; sbit jiank=P2^0; sbit int1k=P3^3; sbit FMQ=P1^1; sbit CLK=P3^5;//1302时钟信号线 sbit IO=P3^6;//1302的I/O数据线 sbit RST=P3^7;//1302的RST复位线 void InputByte(uchar);//输入1Byte uchar OutputByte(uchar);//输出1Byte void W1302(uchar,uchar); uchar R1302(uchar); uchar tab[6]; void key(); void display(); void init(); uchar a,c,i,b; //c表示中断次数a表示数码管移位次数 uint temp; uchar miao,fen,shi; uchar tab1[7]={0x40,0x59,0x11,0x11,0x02,0x06,0x06}; Uchar code tab2[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90}; bit flagg; uchar zz,time; uchar code 8 tabp0[]={0xb6,0x6d,0xdb,0xb6,0x6d,0xdb,0xb6,0x6d,0xdb,0xb6,0x6d,0xdb} ; uchar code tabp2[]={0xbf,0xdf,0x6f,0xbf,0xdf,0x6f,0xbf,0xdf,0x6f,0xbf,0xdf,0x6f} ; //延时1ms void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //往1302写入1Byte d为写入的数据入口参数 void InputByte(uchar date) { uchar i; ACC=date; for(i=8;i>0;i--) { IO=ACC0;//相当于汇编中的RRC CLK=1; CLK=0; ACC=ACC>>1; } } //从1302读取1Byte数据返回值ACC uchar OutputByte(uchar date) { uchar i; ACC=date; for(i=8;i>0;i--) { ACC=ACC>>1; ACC7=IO; 9 CLK=1; CLK=0; } return(ACC); } //往1302写入数据先写地址后写数据 ucADD ucDA是入口参数 void W1302(uchar addr,uchar date) { RST=0; CLK=0; RST=1; InputByte(addr);//写地址 InputByte(date);//写1Byte数据 CLK=1; RST=0; } //读取1302某地址的数据 先写地址 后读数据 ucAddr入口地址 ucDa是返 回值 uchar R1302(uchar addr) { uchar date; RST=0; CLK=0; RST=1; InputByte(addr);//写地址 date=OutputByte();//读1Byte数据 CLK=1; RST=0; return(date); } //初始化 设置初始值 void init() { uchar i1; 10 uchar addr=0x80; W1302(0x8e,0x00);//控制命令字节WP=0 写操作 for(i1=0;i1<7;i1++)>7;i1++)> { W1302(addr,tab1[i1]);//秒分时日月星期年 addr+=2; } W1302(0x90,0xa6); W1302(0x8e,0x80);//控制命令字节WP=1写保? } void display() { uchar Curtime[7]; uchar i,i2; uchar addr=0x81; for(i2=0;i2<7;i2++)>7;i2++)> { Curtime[i2]=R1302(addr);//格式秒分时日月星期年 addr+=2; } miao=Curtime[0]; if(time!=miao){ time=miao;flagg=1;} fen=Curtime[1]; shi=Curtime[2]; tab[5]=miao%16; tab[4]=miao/16; tab[3]=fen%16; tab[2]=fen/16; tab[1]=shi%16; tab[0]=shi/16; for(i=0;i<6;i++)>6;i++)> { SBUF=tab2[tab[i]]; while(!TI); 11 TI=0; } delay(20); if(flagg==1) { flagg=0; P0=tabp0[zz]; P2=tabp2[zz]; zz++; if(zz==12)zz=0; FMQ=0;delay(300 ); FMQ=1; } } void jiaoshi() //主函数 void main() { display(); if(shi==0x00&&fen==0x00&&miao==0x80)init(); EA=1; EX1=1; IT1=1; while(1) { if(c!=1)display(); if((fen==0)&&(miao<10))>10))> {FMQ=0; delay(1000); FMQ=1; } 12 } } //外部中断1 void int1() interrupt 2 { while(1) { if(int1k==0) //扫描p3 { delay(20); if(int1k==0) { while(!int1k); W1302(0x8e,0x00); a=1; c++; if(c==2)c=0; } } if(c==1) { if(youyik==0) //扫描键盘 { delay(20); if(youyik==0) { while(!youyik); a+=2; if( a==7) a=1; } } if(zuoyik==0) 13 { delay(20); if(zuoyik==0) { while(!zuoyik); if( a==1) a=7; a-=2; } } for(i=0;i<6;i++) 这个循环是个关键="">6;i++)> { if( a==i) { b=a; SBUF=0xff; } else SBUF=tab2[tab[i]]; while(!TI); TI=0; } delay(100); if(b==a) { if(jiak==0) { delay(20); if(jiak==0) { while(!jiak); switch(b) { case 1: tab[1]++; if(tab[1]==10) 14 { tab[1]=0; tab[0]++; } if(tab[0]==2&&tab[1]==4) { tab[0]=0; tab[1]=0; } shi=tab[0]*10+tab[1]; W1302(0x84,(shi/10)*16+shi%10); break; case 3: tab[3]++; if(tab[3]==10) { tab[3]=0; tab[2]++; } if(tab[2]==6&&tab[3]==0) { tab[2]=0; tab[3]=0; } fen=tab[2]*10+tab[3]; W1302(0x82,(fen/10)*16+fen%10); break; case 5: tab[5]++; if(tab[5]==10) { tab[5]=0; tab[4]++; } if(tab[4]==6&&tab[5]==0) { tab[4]=0; tab[5]=0; } 15 miao=tab[4]*10+tab[5]; W1302(0x80,(miao/10)*16+miao%10); break; } } } if(jiank==0) { delay(20); if(jiank==0) { while(!jiank); switch(b) { case 1: if(tab[0]==0&&tab[1]==0) { tab[0]=2; tab[1]=4; } if(tab[1]==0) { tab[1]=10; tab[0]--; } tab[1]--; shi=tab[0]*10+tab[1]; W1302(0x84,(shi/10)*16+shi%10); break; case 3: if(tab[2]==0&&tab[3]==0) { tab[2]=6; tab[3]=0; } if(tab[3]==0) { tab[3]=10; tab[2]--; } 16 tab[3]--; fen=tab[2]*10+tab[3]; W1302(0x82,(fen/10)*16+fen%10); break; case 5: if(tab[4]==0&&tab[5]==0) { tab[4]=6; tab[5]=0; } if(tab[5]==0) { tab[5]=10; tab[4]--; } tab[5]--; miao=tab[4]*10+tab[5]; W1302(0x80,(miao/10)*16+miao%10); break; } } } } for(i=0;i<6;i++)>6;i++)> { SBUF=tab2[tab[i]]; while(!TI); TI=0; } delay(100); } if(c==0)break; } } 17 三、心得体会: 通过这次实训我对单片机又有了更深的了解。在学习中,我才发现学习单片机不仅仅需要软件的知识,还需要硬件的知识。我买了一个单片机在实践中就是一个活生生的例子,没有相应的硬件知识,我连单片机怎么和电脑相连都不知道,我为我当初的想法感到羞愧。单片机是一门很好的学问,需要我去钻研它。软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。 参考文献: 【1】祁伟 杨亭 《 单片机C51程序设计教程与实验》 【2】张瑞玲 杨丽 《单片机原理与应用》 【3】李庆亮 狄文辉 陈震 《C语言程序设计实用教程》 18 交通灯设计报告书 一、设计目的 通过设计了解单片机的I/O端口控制)各种中断的具体应用设计方法)发光二极管和七位数码管显示的控制方法)键盘输入的控制设计方法等。 二、设计内容 十字路口车辆通行有以下六个状态: 状态1:东西方向允许直行 状态2:东西方向允许左转 状态3:东西方向行车到南北方向行车的转换阶段 状态4:将南北方向允许直行 状态5:南北方向允许左转 状态6:南北方向行车到东西方向方向行车。 假定左转绿灯点亮的时间为25s,直行绿灯点亮的时间为20s,黄灯点亮的时间为5s,则红灯的点亮时间为50秒。黄灯每隔500ms亮一次,之后灭500ms(亮灭一次叫作闪烁一次),一共闪烁5次,持续5s。各个状态之间的变换情况如下: 状态1 状态2 状态3 状态4 状态5 状态6 状态1 表1:具体显示周期 20s 25s 5s 45s 5s 状态1 状态2 状态3 状态4 状态5 状态6 东西路直行绿左转绿红灯黄灯亮 红灯亮 口 灯亮 灯亮 亮 直行 左转 南北路黄灯 红灯亮 红灯亮 绿灯绿灯口 亮 亮 亮 三. 智能交通灯的方案选择 本方案采用AT89c51单片机为中心器件来设计交通灯控制器进行交通路口的管理。用Keiluvision编程, PROTEUS嵌入式系统仿真软件进行仿真,模拟交通信号灯的交替变换,实现十字路口交通灯的车辆直行、车辆左转和紧急情况处理等功能。用LED数码管作为倒计时指示。将发178P3.7/RDP1.7167P3.6/WRP1.6光二极管作为16个信号灯的材料。 156P3.5/T1P1.5145P3.4/T0P1.41) AT89c51单片机的主要性能参数和主要引脚 134P3.3/INT1P1.3123P1.3P3.2/INT0P1.2对交通灯控制系统的设计,首先应对交通灯的核心控制112P3.2P1.2P3.1/TXDP1.1101P3.1P1.1P3.0/RXDP1.0P3.0P1.0芯片的基本结构和特征以及主要引脚有比较详细的了解。 28P2.7/A1527P2.71、主要性能参数 P2.6/A142631P2.6P2.5/A13EA2530P2.5P2.4/A12ALE?与MCS-51产品指令系统完全兼容 2429P2.4P2.3/A11PSEN23P2.3P2.2/A10?4k字节在系统编程(ISP)Flash闪速存储器 P2.222P2.1/A9P2.121P2.0/A8?1000次擦写周期 P2.0329P0.7/AD7RSTP0.733?全静态工作模式:0Hz,24MHz P0.6/AD6P0.634P0.5/AD5P0.535AT89C51U1?三级程序存储器锁定 P0.4/AD4P0.43618net=P1.3P0.3/AD3XTAL2P0.337P0.2/AD2P0.238P0.1/AD1P0.139191 P0.0/AD0XTAL1P0.0 ?128×8字节内部RAM ?32个可编程I,O口线 ?2个16位定时,计数器 ?5个中断源 ?可编程串行UART通道 ?低功耗的闲置和掉电模式 ?片内振荡器和时钟电路 2、主要引脚 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。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的中断功能。采用手动开关实现,用单片机的P3.0-P3.2来实现三种情况,具体见程序。 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)、LED数码管 本系统采用8位的静态数码管显示。LED数码管显示器是由发光二 极管按一定的结构组合起来的显示器件。在单片机应用中通常使用的 是8段式LED数码管显示器。七段式数码管分为7段:a、b、c、d、 e、f、g。 dp为小数点。如右图所示。 从电路讲,数码管可以分为共阳极和共阴极两种。本次设计,我 们采用共阳极显示。 表2 常见的数字和字符的共阴极的字段码 显示字符 共阳极字段 显示字符 共阳极字段 0 0xc0 5 0x92 1 0xf9 6 0x82 2 0xa4 7 0xf8 3 0xb0 8 0x80 4 0x99 9 0x90 3.信号灯显示模块 设计电路中每个路口的控制信号灯应有四个,即绿灯两个、红灯、黄灯各一个。因此,本电路的设计中应用到绿灯八个,红灯四个,黄灯四个,将发光二极管作为16个信号灯的材料.东西两个方向的灯是同时亮的,为了简化电路可以让这两个灯接同一个引脚。这样我们能可以用P2口控制16盏信号灯。电源将采用5V的直流电源发光二极管与单片机的接法如下表3所示。 表3发光二极管的接法 P2.0 P2.2 P2.4 P2.6 P2.1 P2.3 P2.5 P2.7 东西直绿 东西左东西红 东西黄 南北直南北左南北红 南北绿 绿 绿 绿 3 四. 智能交通灯方案的实现 1) 控制器的系统框图如图2所示。 G RY G RY 开关 紧急情况处理 图2 交通灯控制器系统框图 2) PROTEUS电路图 图3 智能交通灯电路图 3、Keiluvision编程见附件1 4 五.仿真实验步骤 1.打开Keil uVision软件,点击project,选择new project(新建工程),将工程命名为jiaotongdengwangjie并保存在(交通灯王洁)文件夹里,在弹出的对话框里选择Atmel—AT89c51—点击确定。 2(点击file(文件),选择new file,在text1中输入程序,将text1保存并改名为jiaotongdengwangjie.c,点击target1,选择source group1,右击空白处,选择Add file to source。这时source group1下出现jiaotongdengwangjie.c文件,点击打开。点击option for target is output确认create hex文件已打钩.点击确定。编译连接运行,没有错误.生成jiaotongdengwangjie.hex等文件. 3.运行PROTEUS VSM 的ISIS,画出与Keil程序对应的PROTEUS仿真图,先右击后左击弹出编辑元件对话框,在program file中导入jiaotongdengwangjie.hex文件,确定。 5 4.点击按钮,运行成功,运行界面如下。实验中,六个状态转换没有问题,符合表一数据,在关闭SW1时,所有红灯亮,这时禁止东南西北通行,再打开SW1时,恢复初始状态,界面如下图。关闭SW2时,东西直行绿灯亮,如东西车流量增多时,东西向通行。再打开SW2时,恢复初始状态,界面亦如下图。关闭SW3时,南北直行绿灯亮,如南北车流量增多时,南北向先通行。再打开SW3时,恢复初始状态,界面亦如下图。以上三种情况也符合设想。 六. 智能交通灯电路板 原理图、布线图、三维图见附件2、3、4。 七、总结 在完成本次任务设计中,我学习和了解了交通灯控制的原理和实现方式。在设计过程中,我进一步学习了单片机控制系统的设计方法,学习了单片机的输入和显示等模块,学会了使用Keiluvision编程软件和PROTEUS仿真软件,并能够较为熟练的设计与应用。在整个系统的设计过程中,我深刻认识到,软硬件相结合的重要性。同时,这次实验也更锻炼了我的查找错误和分析问题的能力。 由于我之前没有选单片机这门课,所以在过程中遇到很多困难,也花费了大量的时间和精力,在这次的设计中,同学给了我很多的指导和帮助,我也在图书馆查阅了相关资料,但由于自身能力有限,本次设计还有许多地方做的不够完善,具体实物没有做出来,也没有估算整个设计需要的资金。希望以后有时间能够亲自动手实践,然后将本次设计进一步完善。 总之,本次设计的经历,让我收益颇多,培养了发现问题,分析问题和解决问题的能力。也反映了我在某些方面的不足,希望自己能够在今后的学习中,能够不断去完善自己。我相信此次设计对我今后的学习和工作具有很大的帮助。设计中的不足及缺漏,希望老师指正,谢谢~ 6 附件1 #include //预处理命令 unsigned int i=0,m=5025; //定义数码管初始显示,南北方向显示50,东西显示25 unsigned char flag1=0,flag2=0,flag3=0; flag4=0,flag5=0,flag6=0,flag_jinji=0; //定义六种状态及紧急情况状态 unsigned char const LED_7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳级LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" unsigned char const LED_2[4]={0x02,0x01,0x08,0x04}; //南北数码管十位个位,东西数码管十位个位 sbit P30=P3^0; //定义引脚P3,置1 sbit P31=P3^1; sbit P32=P3^2; void timer0_init() //定时器 { TMOD=0x01; TH0=0xd8; TL0=0xf0; TR0=0x01; ET0=0x01; EA=0x01; //开中断 } void delay_ms(unsigned int k) //延时程序 { unsigned int i,j; for(i=0;i for(j=0;j<1440;j++)>1440;j++)> ; } void show(unsigned char a,unsigned char b) //数码管程序 { P1=0x00; P1=LED_2[a]; //数码管位选 P0=LED_7[b]; //显示数字 } void display(unsigned int c) //数码管 { show(0,c%10); //南北数码管个位 show(1,(c%100)/10); //南北数码管十位 show(2,(c%1000)/100); //东西数码管个位 show(3,c/1000); //东西数码管十位 } 7 void main() //主程序 { unsigned int nb,dx; //定义东西方向 timer0_init(); //延时程序 P0=0x00; P1=0x00; while(i<6){}i=0; 初始状态所有信号灯灭,维持300ms="">6){}i=0;> flag1=1; while(1) { if(P30==0) //开关SW1闭合 { flag_jinji=1; m=5025; i=0; P1=0x00; P2=0xcf; // 紧急情况红灯都亮 } else if(P31==0) //开关SW2闭合 { flag_jinji=2; m=2550; //开关SW2断开 flag1=0; flag4=1; i=0; P1=0x00; P2=0xde; // 东西直行绿灯亮 } else if(P32==0) { flag_jinji=3; m=5025; //开关SW3断开 i=0; P1=0x00; P2=0xed; // 南北直行绿灯亮 } else //if(P30==1) { flag_jinji=0; } if(flag_jinji==0) //不是紧急情况时 8 { if(flag1) //状态1:东西方向允许直行,东西直行绿灯亮 { display(m); P2=0XDE; if(i==20) { dx=m%100; nb=m/100; nb--; dx--; m=nb*100+dx; if(dx<=0){flag1=0;flag2=1;m=2520;}>=0){flag1=0;flag2=1;m=2520;}> i=0; } } if(flag2) // 状态2:东西方向允许左转, 东西左转绿灯亮 { display(m);P2=0XDB; if(i==20) { dx=m%100; nb=m/100; nb--; dx--; m=nb*100+dx; if(dx<=0){flag2=0;flag3=1;m=505;}>=0){flag2=0;flag3=1;m=505;}> i=0; } } if(flag3) //状态3:东西方向行车到南北方向行车的转换阶段。黄灯闪烁 { display(m);if(i<10){p2=0x9f;}>10){p2=0x9f;}> if(i>=10){P2=0xdf;} if(i==20) { dx=m%100; nb=m/100; nb--; dx--; m=nb*100+dx; if(dx<=0){flag3=0;flag4=1;m=2550;};>=0){flag3=0;flag4=1;m=2550;};> i=0; } 9 } if(flag4) //状态4:将南北方向允许直行,南北直行绿灯亮 { display(m); P2=0XED; if(i==20) { dx=m%100; nb=m/100; nb--; dx--; m=nb*100+dx; if(nb<=0){flag4=0;flag5=1;m=2025;};>=0){flag4=0;flag5=1;m=2025;};> i=0; } } if(flag5) //状态5:南北方向允许左转, 南北左转绿灯亮 { display(m);P2=0XE7; if(i==20) { dx=m%100; nb=m/100; nb--; dx--; m=nb*100+dx; if(nb<=0){flag5=0;flag6=1;m=505;};>=0){flag5=0;flag6=1;m=505;};> i=0; } } if(flag6) //状态6:南北方向行车到东西方向方向行车,黄灯闪烁 display(m); if(i<10){p2=0x6f;}>10){p2=0x6f;}> if(i>=10){P2=0xef;} if(i==20) { dx=m%100; nb=m/100; nb--; dx--; m=nb*100+dx; if(nb<=0){flag6=0;flag1=1;m=5020;};>=0){flag6=0;flag1=1;m=5020;};> i=0; } } 10 } } } void timer0_int(void) interrupt 1 { TH0=(65535-50000)/256; //定时初值50毫秒 TL0=(65535-50000)%256; i++; } 11 附件2、原理图: C4P1_1VCCP1_3VCCVCCVCCR11R11aU3378L05VCCTR23Q2Q2aP1_0140UP1.0/TVcc2N39062N3906O2P1_12VP1.1/TDP1_2339P0_0P1_0VCCP1_2VCCNP1.2P0.0C3GP1_3438P0_1P1.3P0.1N1uR10R10a537P0_2IP1.4P0.2VDb636P0_3C5P1.5P0.3LED0Q1Q1aR25735P0_41P1.6P0.42N39062N390610K834P0_5P1.7P0.5AT89S5X33P0_6VCCP0.6key1P0_0P0_1P0_5932P0_7RST/VPDP0.7DaR4R3R2GND1031KEYP3.0/RXDEA/VPPVCCkey211P3.1/TXD1230P3.2/INT0ALE/PROGGND1231231329KEYP3.3/INT1PSEN00key3141987619876P3.4/T01528P2_7DPY(2)1DPY(2)a21P3.5/T1P2.7ff1627P2_6DPY2INDPY2INabab1212KEYP3.6/WRP2.6aaaaDDDDP11726P2_5P3.7/RDP2.5Header 225P2_4fbfbfbfbC1P2.4ggggGND1824P2_3D1D2D1D2XTAL2P2.31923P2_2ececececXTAL1P2.2ddddCap22P2_1dpdpdpdp1P2.1100pFX12021P2_0GndP2.0ppXTALC2eddcgeddcgAT89S5X21234512345Cap4567845678100pFR5R6R7R8R9 P0_4P0_3P0_7P0_2P0_6GND P2_0P2_1P2_2P2_3P2_4P2_5P2_6P2_7VCCVCCVCCVCCVCCVCCVCCVCCP2_0P2_1P2_2P2_3P2_4P2_5P2_6P2_7VCCVCCVCCVCCVCCVCCVCCVCCRaRbRcRdReRfRgRhRaaRbbRccRddReeRffRggRhhQaQbQcQdQeQfQgQhQaaQbbQccQddQeeQffQggQhh2N39062N39062N39062N39062N39062N39062N39062N39062N39062N39062N39062N39062N39062N39062N39062N3906 D0D1D2D3D4D5D6D7D0aD1bD2cD3dD4eD5fD6gD7hLED1LED1LED1LED1LED1LED1LED1LED1LED1LED1LED1LED1LED1LED1LED1LED1Ra1Ra2Ra3Ra4Ra5Ra6Ra7Ra8Ra1aRa2bRa3cRa4dRa5eRa6fRa7gRahRes1Res1Res1Res1Res1Res1Res1Res1Res1Res1Res1Res1Res1Res1Res1Res11K1K1K1K1K1K1K1K1K1K1K1K1K1K1K1K GNDGND 12 附件三、布线图 222201 1111 123123123123 1231231212122112121098762222 1111 123451401223912338124371223115362112212211221212635121211373412221833311121193222121222211210311132211302211229312213282121222112111142713152613116252212221221121217241113182312192222021 1111 1231231222221211222121212110987622 11 1231231231233211111112212345322222 13 附件4:三维图 14 计时器系统设计 1 单片机的简介 1.1 单片机发展历史 1.1.1 单片机发展的三大阶段 单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。 1、SCM即单片微型计算机(Single Chip Microcomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。 、MCU即微控制器(Micro Controller Unit)阶段,主要的技术发展方向是:不断扩2 展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。 Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。 3、单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。 单片机作为微型计算机的一个重要分支,应用面很广,发展很快。自单片机诞生至今,已发展为上百种系列的近千个机种。 1.1.2 单片机的发展趋势 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。 CMOS化 近年,由于CHMOS技术的进小,大大地促进了单片机的CMOS化。CMOS芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。这也是今后以80C51取代8051为标准MCU芯片的原因。因为单片机芯片多数是采用CMOS(金属栅氧化物)半导体工艺生产。CMOS电路的特点是低功耗、高密度、低速度、低价格。采用双极型半导体工艺的TTL电路速度快,但功耗和芯片面积较大。随着技术和工艺水平的提高,又出现了HMOS(高密度、高速度MOS)和CHMOS工艺。CHMOS和HMOS工艺的结合。目前生产的CHMOS电路已达到LSTTL的速度,传输延迟时间小于2ns,它的综合优势已在于TTL电路。因而,在单片机领域CMOS正在逐渐取代TTL电路。 低功耗化 单片机的功耗已从Ma级,甚至1uA以下;使用电压在3~6V之间,完全适 1 计时器系统设计 应电池工作。低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化。 低电压化 几乎所有的单片机都有WAIT、STOP等省电运行方式。允许使用的电压范围越来越宽,一般在3~6V范围内工作。低电压供电的单片机电源下限已可达1~2V。目前0.8V供电的单片机已经问世。 低噪声与高可靠性 为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施。 大容量化 以往单片机内的ROM为1KB~4KB,RAM为64~128B。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内ROM最大可达64KB,RAM最大为2KB。 高性能化 主要是指进一步改进CPU的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达100MIPS(Million Instruction Per Seconds,即兆指令每秒),并加强了位处理功能、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出10倍以上。由于这类单片机有极高的指令速度,就可以用软件模拟其I/O功能,由此引入了虚拟外设的新概念。 小容量、低价格化 与上述相反,以4位、8位机为中心的小容量、低价格化也是发展动向之一。这类单片机的用途是把以往用数字逻辑集成电路组成的控制电路单片化,可广泛用于家电产品。 外围电路内装化 这也是单片机发展的主要方向。随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内。除了一般必须具有的CPU、ROM、RAM、定时器/计数器等以外,片内集成的部件还有模/数转换器、DMA控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等。 串行扩展技术 在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位OTP(One Time Programble)及各种类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展。特别是 I C、SPI等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。 随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将列强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS –51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、 NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明, 2 计时器系统设计 80C51可能最终形成事实上的标准MCU芯片。 1.2 单片机的组成及特点 1.2.1 单片机的组成 单片微机(Single-Chip Microcomputer)简称为单片机。它在一块芯片上集中成了中央处理单元CPU、随机存储器RAM、只读存储器ROM、定时/计数和多功能输入/输出 ,如并行口I/O、串行口I/O和转换A/D等。就其组成而言,一块单片机就是一台I/O口 计算机。其典型结构如图所示。由于它具有体积小、功能强和价格便宜等优点,因而被广泛地应用于产品智能化和工业控制自动化上。 1. MCS-51系列单片机在我国得到了广泛的应用,是单片机的主流系列,软硬件应用设计资料丰富齐全。为了提高指令的执行速度和效率,采用了面向控制的结构和指令系统的独立CPU,即选择MSC-51系列中的8031单片机。 8031内部包括一个8位CPU、128个字节的RAM,21个特殊功能寄存器(SFR)、4个8位I/O口,一个全双工串行口,2个16位定时器/记数器,但片内无程序存储器,须外扩EPROM芯片。 MCS-51系列的引脚均为40只引脚双列直插封装(DIP)40只引脚按其功能来分,可分为3类: (1)电源及时钟引脚: Vcc、Vss;XTAL1、XTAL2。 (2)控制引脚: /PSEN、/EA、ALE、RESET (即RST)。 (3)I/O口引脚:P0、P1、P2、P3,为4个8位I/O口的外部引脚。 2. MCS-51存储器的结构采用了哈佛(Har-vard)结构。存储器空间可划分为如下5类: (1)程序存储器(8031无内部程序存储器。) (2)内部数据存储器 (3)特殊功能寄存器(SFR-Special Function Register) (4)位地址空间 ,211个可寻址位。 (5) 外部数据寄存器,片外可扩展64K字节RAM。 它由 CPU 、存储器(包括 RAM 和 ROM )、 I/O 接口、定时 / 计数器、中断控制功能等均集成在一块芯片上,片内各功能通过内部总线相互连接起来。 输入 / 输出引脚 P0 、 P1 、 P2 、 P3 的功能 :P0.0~P0 。 7 : P0 口是一个 8 位漏极开路型双向 I/O 端口。在访问片外存储器时,它分时作低 8 位地址和 8 位双向数据总线用。在EPROM 编程时,由 P0 输入指令字节,而在验证程序时,则输出指令字节。验证程序时,要求外接上拉电阻。 P0 能以吸收电流的方式驱动8个LSTTL 负载。 P1. 0 ~P1. 7 ( 1~8 脚): P1 是一上带内部上拉电阻的 8 位双向 I/O 口。在 EPROM 编程和验证程序时,由它输入低 8 位地址。 P1 能驱动 4 个 LSTTL 负载。 在 8051/8052 中, P1. 0 还相当于专用功能端 T2 ,即定时器的计数触发输入端; 3 计时器系统设计 P1. 1 还相当于专用功能端T2EX ,即定时器 T2 的外部控制端。P2.0~P2.7 ( 21~28 脚): P2 也是一上带内部上拉电阻的 8 位双向 I/O 口。在访问外部存储器时,由它输出高 8 位地址。在对 EPROM 编程和程序验证时,由它输入高 8 位地址。 P2 可以驱动 4 个 LSTTL 负载。P3. 0 ~P3. 7 ( 10~17 脚): P3 也是一上带内部上拉电阻的双向 I/O 口。在 MCS-51 中,这 8 个引脚还用于专门的第二功能。 P3 能驱动 4 个 LSTTL 负载。 P3. 0 RXD (串行口输入) P3. 1 TXD (串行口输出) P3. 2 INT0 (外部中断 0 输入) P3. 3 INT1 (外部中断 1 输入) 0 的外部输入) P3. 4 T0 (定时器 P3. 5 T1 (定时器 1 的外部输入) P3. 6 WR (片外数据存储器写选通) P3. 7 RD (片外数据存储器读选通) 单片机是通过内部总线把计算机的各主要部件接为一体,其内部总线包括地址总线、数据总线和控制总线。其中,地址总线的作用是在进行数据交换时提供地址,CPU通过它们将地址输出到存储器或I/O接口;/数据总线的作用是在CPU与存储器或I/O接口之间,或存储器与外设之间交换数据;控制总线包括CPU发出的控制信号线和外部送入CPU的应答信号线等。 1.2.2 单片机的特点 由于单片机的这种结构形式及它所采取的半导体工艺,使其具有很多显著的特点,因而在各个领域都得到了迅猛的发展。单片机主要发如下特点: 单片机特点: 1. 单片机体积小巧、使用灵活、成本低,易于真正产品化。组装各种智能式控制设备和仪器,能做到机电仪一体化。 2.面向控制。能有针对性地解决各种从简单到复杂的各类控制任务,因而能获得最佳的性能价格比。 3.抗干扰能力强,适应温度范围宽,在各种恶劣的环境下都能可靠的工作。这是其它微机集中无法比拟的。 4.可以方便的实现多机、分布式的集散控制,使整个控制系统的效率大大地提高。 5. 单片机应用产品的研制周期短,所开发出来的样机就是以后批量生产的产品,可以避免不必要的二次开发过程。 6.工业方面:电机控制,工业机器人,过程控制,智能传感器,机电仪一体化等。 7.仪器仪表方面:智能仪器,医疗仪器,色谱仪,示波器等。 8.家用电器:高级电子玩具,微波灶,洗衣机,录像机等。 4 计时器系统设计 9.电讯方面:调制解调器,智能通讯设备等。 10.导航与控制方面:导弹控制,鱼雷制导控制,智能武器装置,航天导航系统等 。 11. 数据处理方面:图形终端,彩色与黑白复印机,温式硬盘驱动器,磁带机,打印机等。 12. 汽车方面:点火控制,变速器控制,防滑刹车,排气控制等。 1.2.3 单片机的分类 单片机作为计算机发展的一个重要领域,应用一个较科学的分类方法。根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。 1、通用型/专用型 这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电 子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。 2、总线型/非总线型 这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。 3、控制型/家电型 这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。 1.3单片机的寻址方式 单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU执行该程序。程序是由指令组成的,指令的基本组成是操作码和操作数。单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有指令代码也各不相同,因此,必须对所选单片机的全部指令,也就是所谓“指令系统”,有足够的了解。各个系列的单片机虽然有不同的指令系统,但也有其共同性。掌握一种单片机的指令系统,对其它系列单片机可以起到触类旁通的作用。MCS,51单片机应用广泛,派生品种多,具有代表性,所以,这里以MCS,51系列的指令系统为例说明“指令”的组成和应用。 1、MOV A,,20H 这条指令表示把20H这个数送入累加器A中(一个特殊功能寄存器)。 5 计时器系统设计 2、ADD A,70H 这条指令表示把累加器A中的内容(在上例中送入的,20H)和存贮器中地址为70H单元中的内容(也是一个数字),通过算术逻辑单元(英文缩写为ALU)相加,并将结果保留在A中。这里MOV、ADD等称为操作码,而A、,20H、70H等均称为操作数。在汇编语言程序中,操作码通常由英文单词缩写而成,这样有助于记忆,所以又称助记符。如MOV就是英文单词MOVE的缩写,含有搬移的意思;而ADD即为英文单词,其意为相加。因此,对于略懂英语的用户,掌握单片机指令的含意是较为方便的。操作数有多种表示法,如以上的,20H称为立即数,即20H就是真正的操作数。而70H是存贮器中某个单元的地址,在该单元中,放着操作数(比如说是3AH),ADD A,70H不是将70H和A中的内容相加,而是从存贮器70H单元中将3AH取出和A中的内容相加。由上可知,要找到实际操作数,有时就要转个弯,甚至转几个弯,这个过程称为寻址,MCS,51共有7种寻址方式,现介绍如下: (1)立即寻址:操作数就写在指令中,和操作码一起放在程序存贮器中。把“,”号放在立即数前面,以表示该寻址方式为立即寻址,如,20H。 (2)寄存器寻址:操作数放在寄存器中,在指令中直接以寄存器的名字来表示操作数的地址。例如MOV A,R0就属于寄存器寻址,即将R0寄存器的内容送到累加器A中。 (3)直接寻址:操作数放在单片机的内部RAM某单元中,在指令中直接写出该单元的地址。如前例的ADD A,70H中的70H (4)寄存器间接寻址:操作数放在RAM某个单元中,该单元的地址又放在寄存器R0或R1中。 如果RAM的地址大于256,则该地址存放在16位寄存器DPTR(数据指针)中,此时在寄存器名前加@符号来表示这种间接寻址。如MOV A,@ R0。其它还有变址寻址、相对寻址、位寻址等,待以后再详细介绍。可能有人会问,在指令中直接给出实际操作数,不是简单、明了吗,为什么还要用其它几种寻址方式呢,这是因为在编制程序时很难一下子就给出操作数。如用单片机控制温度时,时时需要将给定的控制温度(如20?)减去环境温度,而环境温度时时有变化,显然无法在程序指令中给出,只有通过一定方式,将其送入某个输入/输出口,再存放在某个寄存器中,这就必须用到寄存器寻址。又如要进行算术运算,要计算每班学员各科成绩的平均值,如果把每个学员的各科都编一个程序,在程序中直接给出该学员各科成绩,再求平均值,显然太麻烦。这里可以编一个求平均成绩的通用程序,把每位学员的成绩送入存贮器的各个单元中,这时可采取直接寻址,一个程序可供每个学员用,不是更方便吗,所以,寻址方式越多,编制程序就越方便、灵活,适用范围就越广。 寻址有如找人,如被找的人有手机、BP机、座机电话等多种联系方式则就容易找到他,单片机也是如此,寻址方式越多,找操作数越方便,单片机的功能就越强。前面介绍51系列单片机的寻址方式时,常遇到单片机内部的一些寄存器、累加器A、通用寄存 6 计时器系统设计 器R0,R7、数据指针DPTR和存贮器等。在以后介绍指令时,数据就要在这些寄存器、存贮器之间传送,或者进行运算。因此,编制程序就需熟悉单片机的内部结构。 1.4 单片机的指令系统和汇编语言程序 前面已经讲述了单片机的几个主要组成部分,这些部分构成了单片机的硬件。所谓硬件(Hardware),就是看得到,摸得到的实体。但是,光有这样的硬件,还只是有了实现计算和控制功能的可能性。单片机要真正地能进行计算和控制,还必须有软件(Software)的配合。软件主要指的是各种程序。只有将各种正确的程序“灌入”(存入)单片机,它才能有效地工作。单片机所以能自动地进行运算和控制,正是由于人把实现计算和控制的步骤一步步地用命令的形式,即一条条指令(Instruction)预先存入到存贮器中,单片机在CPU的控制下,将指令一条条地取出来,并加以翻译和执行。就以两个数相加这一简单的运算来说,当需要运算的数已存入存贮器后,还需要进行以下几步: 第一步:把第一个数从它的存贮单元(Location)中取出来,送至运算器。 第二步:把第二个数从它所在的存贮单元中取出来,送至运算器; 第三步:相加; 第四步:把相加完的结果,送至存贮器中指定的单元。 所有这些取数、送数、相加、存数等等都是一种操作(Operation),我们把要求计算机执行的各种操作用命令的形式写下来,这就是指令。但是怎样才能辨别和执行这些操作呢,这是在设计单片机时由设计人员赋予它的指令系统所决定的。一条指令,对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统(Iustruction Set),不同种类的单片机,其指令系统亦不同。 使用单片机时,事先应当把要解决的问题编成一系列指令。这些指令必须是选定的单片机能识别和执行的指令。单片机用户为解决自己的问题所编的指令程序,称为源程序(Source Program)。指令通常分为操作码(Opcode)和操作数(Operand)两大部分。操作码表示计算机执行什么操作,即指令的功能;操作数表示参加操作的数或操作数所在的地址(即操作数所存放的地方编号)。因为单片机是一种可编程器件,只“认得”二进码(0、1)。要单片机运作,单片机系统中的所有指令,都必须以二进制编码的形式来表示。例如,在Intel公司的MCS,51系列单片机中,从存贮器中取出一数到CPU中的累加器(在运算器中,参与运算、存放运算结果的专用寄存器)的指令代码为74H,累加器内容加立即数的代码为24H,再加上立即数代码,累加器送数到内部RAM存贮器的代码为F6H,F7H等。这些指令是用十六进制表示二进制的机器码。MCS,51单片机的字长为8位,有时,要完成某些操作用一个字节尚不能充分表达。所以,在指令系统中有单字节指令,也有多字节指令。机器码是由一连串的0和1组成,没有明显的特征,不好记忆,不易理解,易出错。所以,直接用它来编写程序十分困难。因而,人们就用一些助记符(Muemonic)——通常是指令功能的英文缩写来代替操作码,如MCS,51中 7 计时器系统设计 数的传送常用MOV(Move的缩写)、加法用Add(Addition的缩写)来作为助记符。这样,每条指令有明显的动作特征,易于记忆和理解,也不容易出错。用助记符来编写的程序称为汇编语言程序。但是,助记符编写的程序便于人理解,可单片机却只认识二进制机器代码,因此,为了让单片机能“读懂”汇编语言程序必须再转换成由二进制机器码构成的程序,这种转换过程,就称为“汇编”。汇编可借助于人工查表法来实现,也可借助PC机通过所谓“交叉汇编程序”来完成。由机器码构成的用户程序一旦“进入”了单片机,再“启动”单片机,就可让它执行输入程序所规定的任务。 1.5存储器的扩展 MCS-51单片机片内集成了各种存储器和I/O功能部件,但有时候根据应用系统的功能需求,片内的资源还不能满足需要。8031单片机片内缺少程序存储器(ROM)。 存储器的扩展:MCS-51单片机外部存储器结构,采用的是哈佛结构。即程序存储妻的空间和数据存储器的空间是截然分开,分别寻址的结构。系统扩展的首要问题是构造三大系统总线,然后再往系统总线上“挂”存储器芯片或I/O接口芯片,“挂”存储器芯片就是存储器扩展,“挂”I/O接口芯片就是I/O扩展。受引脚数目的限制,数据线和低8位地址线复用。由P0口线兼用。为了将它们分离出来,需要外加地址锁存器,从而构成与一般CPU相类似的片外三总线。如图所示: 8031 P2 APE P0 PSEN WE RD 地址 锁存器 A8~A15 A0~A7 D0~D7 地址总 线 数据总 线 控制总 线 图1.1构成图 地址锁存器一般采用74LS373。锁存器74LS373带有三态门的8D锁存器,引脚说明: D7,D0: 8位数据输入线。 8 计时器系统设计 Q7,Q0: 8位数据输出线。 G:数据输入锁存选通信号,。 OE: 数据输出允许信号。 采用74LS373的地址总线的扩展电路如下。 数据总线。 1.以P0口作为低8位地址/ 2.以P2口的口线作高位地址线。 3.控制信号线。 使用ALE信号作为低8位地址的锁存控制信号。 以PSEN*信号作为扩展程序存储器的读选通信号。 以EA*信号作为内外程序存储器的选择控制信号。 由RD*和WR*信号作为扩展数据存储器和I/O口的读选通、写选通信号。 尽管MCS-51有4个并行I/O口,共32条口线,但由于系统扩展需要,真正作为数据I/O使用的,就剩下P1口和P3口的部分口线。 优点:串行接口器件体积小,与单片机接口时需要的I/O口线很少(仅需3-4根),提高可靠性。 常用的存储器地址分配的方法有两种:线性选择法(简称线选法)和地址译码法(简称译码法)。 (1)线选法 直接利用系统的高位地址线作为存储器芯片(或I/O接口芯片)的片选信号。 优点:电路简单,不需要地址译码器硬件,体积小,成本低。 缺点:可寻址的器件数目受到限制,地址空间不连续,地址不唯一。 (2)译码法 最常用的译码器芯片:74LS138(3-8译码器)74LS139(双2-4译码器)74LS154(4-16译码器)。完全可根据设计者的要求,产生片选信号。 全译码:全部高位地址线都参加译码; 部分译码:仅部分高位地址线参加译码。 由于线选法具有简单明了,不需另外增加硬件电路的特点。适于外扩芯片不多,规模不大的单片机系统。所以选择线选法扩展存储器。 1.6单片机的应用 1.6.1单片机的应用分类 由于单片机具有显著的优点,它已成为科技领域的有力工具,人类生活的得力助手。它的应用遍及各个领域,主要表现在以下几个方面: 1、 单片机在智能仪表中的应用 单片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。 9 计时器系统设计 2、单片机在机电一体化中的应用 机电一体化是械工业发展的方向。机电一体化产品是指集成机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功能强等优点,可大大提高机器的自动化、智能化程度。 3、 单片机在实时控制中的应用 单片机广泛地用于各种实时控制系统中。例如,在工业测控、航空航天、尖端武器、机器人等各种实时控制系统中,都可以用单片机作为控制器。单片机的实时数据处理能力和控制功能,可使系统保持在最佳工作状态,提高系统的工作效率和产品质量。 4、 单片机在人类生活中的应用 自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、电子玩具、收录机等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们喜爱。单片机将使 人类生活更加方便、舒适、丰富多彩。 综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。 10 计时器系统设计 2 计时器系统设计 2.1 设计内容 2.1.1 设计题目:设计要求计时器系统设计 2.1.2设计要求 : 利用单片机的定时器/计数器的定时和计数,用 LED数码显示计时的时间,某键按下去时;再按一下停止计时;另一键按下去时间清零。 2.1.3技术指标 1. 有复位的功能。 2. 有设置的功能。 3. 有定时和计时切换的功能。 4. 计时范围0~99.99秒。 5. 定时范围0~99分。 2.1.4 芯片简介 1、 8051芯片简介 目前,8051单片机在工业检测领域中得到了广泛的应用,因此我们可以在许多单片机应用领域中,配接各种类型的语音接口,构成具有合成语音输出能力的综合应用系统,以增强人机对话的功能。89C51是Intel公司生产的一种单片机,在一小块芯片上集成了一个微型计算机的各个组成部分。每一个单片机包括:一个8位的微型处理器CPU;一个256K的片内数据存储器RAM;片内程序存储器ROM;四个8位并行的I/O接口P0-P3,每个接口既可以输入,也可以输出;两个定时器/记数器;五个中断源的中断控制系统;一个全双工UART的串行I/O口;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率是12MHZ。以上各个部分通过内部总线相连接。下面简单介绍下其各个部分的功能。中央处理器CPU是单片微型计算机的指挥、执行中心,由它读人用户程序,并逐条执行指令,它是由8位算术,逻辑运算部件(简称ALu)、定时,控制部件,若干寄存器A、B、B5w、5P以及16位程序计数器(Pc)和数据指针寄存器(DM)等主要部件组成。算术逻辑单元的硬件结构与典型微型机相似。它具有对8位信息进行+、-、x、/ 四则运算和逻辑与、或、异或、取反、清“0”等运算,并具有判跳、转移、数据传送等功能,此外还提供存放中间结果及常用数据寄存器。控制器部件是由指令寄存器、程序计数器Pc、定时与控制电路等组成的。指令寄存器中存放指令代码。枷执行指令时,从程序存储器中取来经译码器译码后,根据不同指令由定时与控制电路发出相应的控制信号,送到存储器、运算器或I,o接口电路,完成指令功能。程序计数器Pc 程序计数器Pc用来存放下一条将要执行的指令,共16位(可对以K字节的程序存储器直接寻址c指令执行结束后,Pc计数器自动增加,指向下一条要执行的指令地址。 CPU功能,总的来说是以不同的方式,执行各种指令。不同的指令其功自略异。有的指令涉及到枷各寄存器之间的关系;有的指令涉及到单片机核心电路内部各功能部件的关系;有的则与外部器件如外部程序存储器发生联系。事实上,cRJ是通过复杂的时序电路完 11 计时器系统设计 成不同的指令功能。所谓cRJ的时序是指控制器控照指今功能发出一系列在时间上有一定次序的信号,控制和启动一部分逻辑电路,完成某种操作。 MCS-51单片机内部结构图:8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。 图2.1 8051单片机内部结构图 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总 线和控制总线等三大总线如上图2.1,现在我们分别加以说明: ?中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 ?数据存储器(RAM) 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 ?程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 ?定时/计数器(ROM): 12 计时器系统设计 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 ?并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。 ?全双工串行口: 8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 ?中断系统: 8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。 时钟电路: ? 8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。 单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。 下图是MCS-51系列单片机的内部结构示意图2.2 图2.2 MCS-51系列单片机的内部结构 13 计时器系统设计 MCS-51的引脚说明: MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明: MCS-51的引脚说明: MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:如图3 Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向 P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。0000H, RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。 8051的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。 ?Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。如果单片机是EPROM,在编程其间, 将用于输入编程脉冲。 ?Pin29: 当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。 ?Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。 (1)时钟电路 M田—51片内设有一个由反向放大器所构成的振荡电路,XTALI和XTAL2分别为振荡电路的输入端和输出端。时钟可以由内部方式产生或外部方式产生。采用内部方式时,在C1和C2引脚上接石英晶体和微调电容可以构成振荡器, 振荡频率的选择范围为1(2—12MHZ在使用外部时钟时,XTAL2用来输入外部时钟信号,而XTALI接地。 (2)时序 MGL5l单片机的一个执器周期由6个状态(s1—s6)组成,每个状态又持续2 14 计时器系统设计 个接荡周期,分为P1和P2两个节拍。这样,一个机器周期由12个振荡周期组成。若采用 12MHz的晶体振荡器,则每个机器周期为1us,每个状态周期为1,6us;在一数情况下,算术和逻辑操作发生在N期间,而内部寄存器到寄存器的传输发生在P2期间。对于单周期指令,当指令操作码读人指令寄存器时,使从S1P2开始执行指令。如果是双字节指令,则在同一机器周期的s4读人第二字节。若为单字节指令,则在51期间仍进行读,但所读入的字节操作码被忽略,且程序计数据也不加1。在加结束时完成指令操作。多数Mcs—51指令周期为1—2个机器周期,只有乘法和除法指令需要两个以上机器周期的指令,它们需4个机器周期。 对于双字节单机器指令,通常是在一个机器周期内从程序存储器中读人两个字节,但Movx指令例外,Movx指令是访问外部数据存储器的单字节双机器周期指令,在执行Movx指令期间,外部数据存储器被访问且被选通时跳过两次取指操作。下面是51单片机的振荡电路图: 图2.3 (3)引脚极其功能 MCS—51系列单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。 下面按引脚功能分为4个部分叙述个引脚的功能。 a.电源引脚Vcc和Vss Vcc(40脚):接+5V电源正端; Vss(20脚):接+5V电源正端。 b.外接晶振引脚XTAL1和XTAL2 XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHOMS单片机,该引脚作为外部振荡信号的输入端。 XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入 15 计时器系统设计 端。对于CHMOS芯片,该引脚悬空不接。 c.控制信号或与其它电源复用引脚 控制信号或与其它电源复用引脚有RST/V、ALE/P、PSEN和EA/V等4种形式。 PDPP RST/V(9脚):RST即为RESET,V为备用电源,所以该引脚为单片机的上电复位PDPD 或掉电保护端。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机复位到初始状态。 当V发生故障,降低到低电平规定值或掉电时,该引脚可接上备用电源V(+5V)CCPD为内部RAM供电,以保证RAM中的数据不丢失。 ALE/ P (30脚):当访问外部存储器时,ALE(允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在P口的低 0 PSEN(29脚):片外程序存储器读选通输出端,低电平有效。当从外部程序存储器读取指令或常数期间,每个机器周期PESN两次有效,以通过数据总线口读回指令或常数。当访问外部数据存储器期间,PESN信号将不出现。 EA/Vpp(31脚):EA为访问外部程序储器控制信号,低电平有效。当EA端保持高 电平时,单片机访问片内程序存储器4KB(MS—52子系列为8KB)。若超出该范围时,自动转去执行外部程序存储器的程序。当EA端保持低电平时,无论片内有无程序存储器,均只访问外部程序存储器。对于片内含有EPROM的单片机,在EPROM编程期间,该引脚用于接21V的编程电源Vpp。 (4)输入/输出(I/O)引脚P0口、P1口、P2口及P3口 a.P口(39脚,22脚):P,P统称为P口。当不接外部存储器与不扩展I/O接00.00.70 口时,它可作为准双向8位输入/输出接口。当接有外部程序存储器或扩展I/O口时,P口为地址/数据分时复用口。它分时提供8位双向数据总线。 0 对于片内含有EPROM的单片机,当EPROM编程时,从P口输入指令字节,而当检验程0 序时,则输出指令字节。 b.P口(1脚,8脚):P.,P.统称为P口,可作为准双向I/O接口使用。对于110171 MCS—52子系列单片机,P和P1.1还有第2功能:P口用作定时器/计数器2的计数1.01.0 脉冲输入端T2;P用作定时器/计数器2的外部控制端T2EX。对于EPROM编程和进行1.1 程序校验时,P口接收输入的低8位地址。 0 c.P口(21脚,28脚):P.,P统称为P口,一般可作为准双向I/O接口。当接2202.72 有外部程序存储器或扩展I/O接口且寻址范围超过256个字节时,P口用于高8位地址2 总线送出高8位地址。对于EPROM编程和进行程序校验时,P口接收输入的8位地址。 2 d.P口(10脚,17脚):P,P统称为P口。它为双功能口,可以作为一般的准33.03.73 双向I/O接口,也可以将每1位用于第2功能,而且P口的每一条引脚均可独立定义为3 第1功能的输入输出或第2功能。P口的第2功能见下表 3 16 计时器系统设计 表2.1 单片机P3.0管脚含义 引脚 第2功能 P3.0 RXD(串行口输入端0) 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(部数据存储器读选通信号输出端,低电平有效) 51系列单片机的引脚作用可归纳为以下两点: 综上所述,MCS— 1).单片机功能多,引脚数少,因而许多引脚具有第2功能; 2).单片机对外呈3总线形式,由P、P口组成16位地址总线;由P口分时复用作200为数据总线。 附:89C51的管脚如图 图2.4 17 计时器系统设计 2.数码管显示管 (1)数码管显示管的原理 数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为A,B,C,D,E,F,G,H。 图2.5 数码管内部结构图 假设我们要显示一个数字2, 那么 A、B、G、E、D这5个段的发光管亮就可以了,C、F、H不亮,同时由于接法为共阳接法,那么为低电平是亮,为高电平是灭。从高往低排列, P1.7-P1.0写成二进制为01111110, 把他转化为16进制则为A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格,见下表,以后直接调用就行了。 表2.2 共阳极数码管显示 显示 P1.7 P1.6 P1.5小P1.4 P1.3 P1.2 P1.1 P1.0 HE代码 小数点 G F E D C B A 0 1 1 0 0 0 0 0 0 C0H 1 1 1 1 1 1 0 0 1 F9H 2 1 0 1 0 0 1 0 0 A4H 3 1 0 1 1 0 0 1 0 B0H 4 1 0 0 1 1 0 0 1 99H 5 1 0 0 1 0 0 1 0 92H 6 1 0 0 0 0 0 1 0 82H 7 1 1 1 1 1 0 0 0 F8H 8 1 0 0 0 0 0 0 0 80H 9 1 0 0 1 0 0 0 0 90H (2) LED数码显示器有两种连接方法 a.共阳极接法。把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。当阴极端输入低电平时,段发光二极管就导通点亮,而输入高电平时则不点亮。 b.共阴极接法。把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。每个发光二极管的阳极通过电阻与输入端相连。当阳极端输入高电平时,段发光二极管就导通点亮,而输入低电平时则不点亮。 18 计时器系统设计 在本设计中所采用的是共阴极LED数码显示器,其引脚排列如下图所示: 图2.6 共阴极LED数码显示器引脚排列图 数码管的接口有静态接口和动态接口两种。静态接口为固定显示方式,无闪烁,其电路可采用一个并行口接一个数码管,数码管的公共端按共阳接VCC,本次课程设计由于所需数码管较少,故可用些种方法接线。这种接法占用接口多,仅能接少量数码管。 动态接口采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出,另一接口完成各数码管的轮流点亮。 2.2 设计原理分析 2.2.1设计原理图 计时器系统设计原理图如下: 19 计时器系统设计 K4C422u139470P10B1P00Y1R12R1238470200P11B2P01Y2R2+5v337470P12B3P02Y3R3436470P13B4P03Y4R4535470P14B5P04Y5R522uC1634470P15B6P05Y6R67740733470P16P06R10R7K183210KP17P0722uC2R81111K2921DPYDPYDPYDPY10kaaaaRESETB1P20Y12a2a2a2a1022R9bbbbRXD/P3.1B2P21Y210K3333K311805123ccccfbfbfbfbTXD/P3.2B3P22Y3gggg22u4444C31224ddddINT0/P3.3B4P23Y455551325eeeeececececINT1/P3.4B5P24Y5dddd6666C422uK51426ffffT0/P3.5B6P25Y6777715740727[LEDgn][LEDgn][LEDgn][LEDgn]ggggT1/P3.6P26R13VE1VE2 VE41728VE3220RD/P3.7P2712 U1A31EA/VP+5VC71912X1C91830U2AX2ALE/P22u29PSEN1612WRLEDC8360uT1U3AA 22u12 U4A +5V T2 +5V 1D1D3VTLM7915CTU131~VoutVin42+5VC10C11220VGNDC9C13R132IC18V0.01u1K10u10uC12IN540210u30.01u 图2.7 2.2.2设计程序 初始化为何种状态,开关是否按下,显示是定时状态还是计时状态。若为定时状态,。 用四个共阴数码管LED显示起显示时间,采用动态显示的方法,P2.4、P2.5、P2.6、P2.7 作为位选信号,P0口输出选段码。键盘为独立式按键,分别接在P3.2、P3.3、P3.4、 P3.5上。K1为设置/启动功能键。按下时,系统进入时间设置;再按下,系统启动。K2 为倒计时时间十位数设定键,按下时十位数字在0到9的范围。K3倒计时个位数设定键, 按下时,个位数字在0到9的范围。K4为复位键。K5为定时与计时的切换键,按下切 20 计时器系统设计 换到计时状态,不按为定时状态。P3.5连接发光二极管状态指示,系统时间设为定时状 态熄灭,倒计时状态闪烁。P3.6输出控制信号驱动蜂鸣器,倒计时时间到,蜂鸣器响。 开始正计时,正计时结束,蜂鸣器再响,程序结束。 主程序流程图: 初始化 HUSHU N N Y K4是否按 下按下 Y 是工作状 态, 等待设置 启动计数器 计数 调用显示程序 计数结 束, Y N 定时结 输出 束, Y 输出控制信号 图2.8 倒计时外部中断流程图: 21 计时器系统设计 关中断 Y K2键按下, 十位数缓冲加1 K3键按下, 调显示程序 个位数缓冲器加1 K1键按下, 调显示程序 置工作状态标志 中断返回 图2.9 正计时外部中断流程图: 中断 TMS1记满 N Y TMS2记满 N Y TM1记满 N Y TM2记满 N Y 返回 图2.10 22 计时器系统设计 2.2.3计时器系统设计程序 用8051芯片制作一个具用倒计时和秒表功能的器件,外接晶振。当倒计时时,送 一个数,从这个数一直计到0蜂鸣器响。正计时,0.01秒计满9向0.1秒进一,0.1秒 计满9向秒个位进一,秒个位计满9向秒十位进一,秒十位计满9结束运行。 程序清单: ORG 0000H TMS1 EQU 33H TMS2 EQU 32H TM1 EQU 31H TM2 EQU 30H MOV 30H , #00H MOV 31H , #00H MOV 32H , #00H MOV 33H , #00H AJMP MAIN ;主程序 ORG 0003H AJMP NT0 ;外部中断0 AJMP NT1 ORG 000BH AJMP TCT0 ; 定时器T0 ORG 0030H MAIN: MOV SP, #60H ;设置堆栈 CLR 00H ;工作状态标志位,0为设置,1为工作 CLR 01H ;指示灯状态标志位,0为LED不亮,1为灯 亮 CLR 02H ;控制信号标志,0为P3.6 低,1为P3.6高 JNC P3.7, LOOP1 MOV 22H, #00H ;100ms计数器清零 MOV 23H, #00H ; 秒计数器清零 MOV 24H, #10 ;分计数器预置10分钟 MOV TH0, #3CH ;100毫秒计数器初值 MOV TL0, #0B0H; MOV TMOD, #02H SETB EA SETB ET0 ;允许定时器T0中断 SETB EX0 ;允许外部中断0中断 SETB IT0 SETB TR0 MOV 34H, #01H ;显示缓冲器预置数(十位) MOV 35H, #00H ;显示缓冲器预置数(个位) MOV TH0, #3CH MOV TL0, #0B0H MOV TMOD, #06H SETB EA SETB ET0 23 计时器系统设计 SETB EX0 SETB IT0 SETB TR0 CLR TR0 ACALL LED JNB 00, L ACALL TMZ1 ACALL DIS1 L: ACALL LED ;调指示灯状态控制程序 JNB 00H, L ; 查询工作状态指示,0为等待“设置” ACALL BINBCD ; 二进制转十进制 ACALL DIS ;显示倒计时器中的值 JB 02H,OUT ;查询控制输出位,1为P3.6的高,报警 AJMP L OUT: CLR EX0 CLR TR0 SETB P3.6 ;P3.6的高,报警 JNB P3.4, OUT1 ;按P3.4清除输出 AJMP OUT OUT1: JNB P3.4, $ ;消抖 CLR P3.6 ;P3.6低,清除报警输出 CLR 02H SETB EX0 CLR 00H ;设置状态 AJMP L 状态灯指示程序: LED: JB 01H,LED0 CLR P3.5 RET LED0: SETB P3.5 RET 二进制转十进制程序: 入口:24H单元二进制数。 出口:30H单元BCD码十位数,31H单元BCD码个位数 BINBCD: MOV A, 24H 取二进制数 MOV B, #10 DIV AB ; A中存十位数,B中存个位数 MOV 30H,A ;存十位数 MOV 31H,B ; B中存个位数 RET ;显示倒计时程序: 24 计时器系统设计 入口:30H单元BCD码十位数,31H单元BCD码个数 DIS: MOV R0, #30H MOV DPTR, #TAB MOV A, @R0 MOVC A, @A+DPTR MOV P0 ,A;显示十位 CLR P2.4 ACALL DELAY10 ;延时10ms INC R0 SETB P2.4 MOV A, @R0 MOVC A, @A+DPTR MOV P0, A ;显示个位 CLR P2.5 ACALL ELLY10 SETB P2.5 RET DIS1: MOV R0, #30H MOV DPTR, #TAB MOV A, @R0 MOVC A, @R0+DPTR MOV P0, A CLR P2.7 ACALL DELAY10 INC R0 SETB P2.7 MOV A, @R0 MOVC A, @A+DPTR MOV R0, A CLR P2.6 ACALL DELAY10 INC R0 SETB P2.6 CLR P2.5 ACALL DELAY10 INC R0 SETB P2.5 CLR P2.4 ACALL DELAY10 INC R0 SETB P2.4 RET 25 计时器系统设计 ;延时10ms子程序: DELAY10: MOV R7, #0AH DL: MOV R6, #0F9H DL1:DJNZ R6, DEL1 DJNZ R7, DL RET ;外部中断0程序: NT0: CLR EX0 ;关中断 PUSH ACC PUSH PSW CLR P3.5 ;工作状态LED灭 ACALL DIS1 ;调设定值显示 KEY: JB P3.2, RETURN KEY0: ACALL DIS1 JNB P3.2, KEY0 ;等待键释放 KEY2: JB P3.3, KEY3 ;判K2按下,未按下,转判K3 ACALL DIS1 INC 34H ;K2键按下,十位加1 MOV A, 34H CJNE A, #0AH, KEY22 MOV 34H, #00H KEY22: ACALL DIS1 JNB P3.3, KEY22 AJMP KEY2 KEY3: ACALL DIS1 JB P3.4, KEY1 ;判K3键按下,未按下,转判断K1 INC 35H ;K3键按下,个位加1 MOV A, 35H CJNE A, #0AH,KEY33 MOV 35H, #00H KEY33: ACALL DIS1 JNB P3.4, KEY33 AJMP KEY3 KEY1: ACALL DIS1 JB P3.2,KEY2 ; K1键未按下,转去判断K2,K3 KEY10: ACALL DIS1 ; 等待键释放 JB P3.2, KEY10 ;K1键未按下,进入工作状态 ACALL BCDBIN ; 调十进制转换成二进制程序 SETB 00H ;置位进入“工作状态”标志 RETUTN: SETB EX0 SETB TR0 POP PSW 26 计时器系统设计 POP ACC RET1 TAB:DB 40H,79H,24H,30H,19H,12H,00H,78H,00H,10H, ;十进制转换成二进制: 入口:34H单元BCD码,35H单元BCD码个位数。 出口:24H单元二进制数。 BCDBIN: MOV B, #10 MOV A, 34H MUL AB ADD A, 35H MOV 24H, A RET ;定时器T0中断服务程序: TCT0: PUSH ACC PUSH PSW INC 22H MOV A, 22H CJNE A, #10, EXIT MOV 22H, #00H INC 23H ;秒单元加1 CPL 01H MOV A, 23H CJNE A, #60,EXIT MOV 23H, 00H DEC 24H ;分单元减1 MOV A, 23H CJNE A, #00H,EXIT ;分计数单元不为“0”,继续 CLR TR0 ;关定时器 SETB 02H ;置位蜂鸣器控制信号 SETB 01H ;置位LED状态灯 CLR 00H ;“设置”状态 EXIT: POP PSW POP ACC RETI ;秒表中断NT1: ORG 0001H INC TMS1 MOV TMS1, #0 CJNE TMS1, #9, RETI CLR TMS1 INC TMS2 CJNE TMS2, #9, RETI CLR TMS2 27 计时器系统设计 INC TM1 CJNE TM1, #9,RETI INC TM2 CLR TM1 CJNE TM2, #9, RETI END 28 计时器系统设计 总结 这次设计根据课题要求,复习了这学期所学的单片机内容,通过查询相关的资料,简要知道了虽然老师上课讲过,但并非听懂了的8155芯片的有关知识。根据课程设计的要求和自己通过参考有关资料拟的方案,写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。 在写程序时,在每条指令后都写好注释,以便在程序出错的检查过程中可以更容易查找得到。 这次的单片机课程设计重点是理论与实际的相结合,不单单只是书上的一条条分离的指令。通过这次设计让我更系统的了解了个个指令以及单片机的扩展内容。 致谢 29 计时器系统设计 单片机设计已经接近尾声,在这次的设计过程中老师和同学们给了我很大的帮助和指导,让我顺利的完成了这次单片机设计。 这次单片机设计能够顺利的完成,要感谢很多人无私的帮助。首先是我的马老师,每当我遇到难题时,他都能给我解答,而且在精神上不断地给我支持。这次的单片机设计得以顺利完成,得益于我的老师。另外还有我的同学,正是由于他们的帮助,很多很难解决的难题都得到了很好的解决,并且设计期间也给了我许多的建议和看法;在调试期间也帮我一起测试。还有在单位中我的专工师傅们,给与我的支持~ 在此,我再一次地衷心地感谢我的指导老师,为我的指导老师对工作对学生耐心表示敬佩。最后我祝我们的马老师工作顺利、身体健康! 参考文献 [1]肖洪兵. 《跟我学用单片机》. 北京:北京航空航天大学出版社,2002.8 30 计时器系统设计 [2]何立民. 《单片机高级教程》( 北京:北京航空航天大学出版社,2001 [3]赵晓安. 《MCS-51单片机原理及应用》. 天津:天津大学出版社,2001.3 [4]李广第( 《单片机基础》( 北京:北京航空航天大学出版社,1999 [5]徐惠民( 《单片微型计算机原理接口与应用》( 北京:北京邮电大学出版社,1996 31范文二:单片机设计报告
范文三:单片机设计报告
范文四:单片机设计报告
范文五:单片机设计报告