1、单片机时钟芯片DS1302在LCD1602上显示年月日时分秒单片机设计实验内容摘要:单片机实验是通过 Proteus 仿真并且与 Keil 相结合使用控制单片机使其在仿真 中完成一系列所设计的程序。 我们这个小组所做的实验是仿真一个数字时钟, 通 过 DS1302 这个芯片从计算机上读取时间信息,再由 51 单片机对数据进行处理、 分配,将其输出在 LCD1602 上,实现简单的数字时钟的功能。设计内容及要求:(1)根据设计课题的技术指标和给定条件,在教师指导下,能够独立而正确地 进行方案论证和设计计算,要求概念清楚、方案合理、方法正确、步骤完整;(2)要求学生掌握单片机的设计内容、方法和步骤
2、;(3)要求会查阅有关参考资料和手册等;(4)要求学会选择有关元件和参数;(5)要求学会绘制有关电路图和设计流程图;(6)要求学会编写设计说明书。系统框图:硬件选择:1、AT89C51AT89C51 是一种带 4K 字节 FLASH 存储器(FPEROM Flash Programmable and Erasable Read Only Memory )的低电压、高性能 CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片 机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密 度非易失存储器制造技术制造,与工业标准的 M
3、CS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51 是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很 多嵌入式控制系统提供了一种灵活性高且价廉的方案。V * 卜*AT89C51外形及引脚排列主要特性:与MCS-51 兼容4K字节可编程FLASH存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0HZ-24MHZ三级程序存储器锁定 28 X8位内部RAM32可编程I/O线两个6位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式-片内振荡器和时钟电路特性概述 :AT89C51 提
4、供以下标准功能: 4k 字节 Flash 闪速存储器, 128 字节内部RAM , 32个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一 个全双工串行通信口,片内振荡器及时钟电路。同时, AT89C51 可降至 0Hz 的 静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工 作,但允许 RAM ,定时/计数器,串行通信口及中断系统继续工作。掉电方式保 存 RAM 中的内容, 但振荡器停止工作并禁止其它所有部件工作直到下一个硬件 复位。管脚说明:VCC :供电电压。GND :接地。P0口: P0 口为一个8位漏级开路双向I/O 口,每脚可吸收8TTL门电
5、流。当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 口缓冲器可接收, 输
6、出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作 为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于 内部上拉的缘故。P2 口当用于外部程序存储器或16位地址外部数据存储器进行 存取时,P2 口输出地址的高八位。在给出地址“ 1 ”时,它利用内部上拉优势, 当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。 P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口: P3 口管脚是8个带内部上拉电阻的双向I/O 口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输 入,
7、由于外部下拉为低电平,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 (外部数据存储器读选通)P3 口同时为闪烁编程和编程校验接收一些控制信号RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电 平时间。ALE/PROG :当访问外部存储器时,
8、 地址锁存允许的输出电平用于锁存地址 的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时, ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6 。因此它可用作 对外部输出的脉冲或用于定时目的。 然而要注意的是: 每当用作外部数据存储器 时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此 时, ALE 只有在执行 MOVX , MOVC 指令是 ALE 才起作用。另外,该引脚被 略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器 周期两次 /PSEN 有效
9、。但在访问外部数据存储器时,这两次有效的 /PSEN 信号 将不出现。EA/VPP :当 /EA 保持低电平时,则在此期间外部程序存储器 (0000H-FFFFH ),不管是否有内部程序存储器。注意加密方式 1时, /EA 将内 部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在 FLASH编 程期间,此引脚也用于施加 12V 编程电源( VPP)。XTAL1 :反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 :来自反向振荡器的输出。振荡器特性:XTAL1和XTAL2分别为反向 放大器的输入和输出。 该反向放大器可以配置为片内振荡器。 石晶振荡和陶瓷振 荡均可采用。如
10、采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟 信号要通过一个二分频触发器, 因此对外部时钟信号的脉宽无任何要求, 但必须 保证脉冲的高低电平要求的宽度。2、DS1302DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实 时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿 功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用 突发方式一次传送多个字节的时钟信号或 RAM数据0 DS1302内部有一个 31 X8的用于临时性存放数据的 RAM寄存器。DS1302是DS1202的升级产品,与 D S 1 2
11、02兼容,但增加了主电源 /后备电源双电源引脚,同时提供了对后备电源 进行涓细电流充电的能力。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输入有两种功能:首先,RST接通控制逻辑,允许地址/命令
12、序列送入移位寄存器;其次,RST提 供终止单字节或多字节数据的传送手段。当 RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中 RST置为低电平,则 会终止此次数据传送, I/O 引脚变为高阻态0上电运行时,在 Vcc2.0V 之前,RST必须保持低电平。只有在 SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。 下图为DS1302的引脚功能图:VCC2 匚2节b Vcdxin SCLKX2 口3 6 IJ IQGND匸4 5 IP聞2.2 DS1302封装图DS1302的控制字节DS130
13、2的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1, 如果它为0,贝U不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟 数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0) 如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输;44A3刪卜1Ma IS13O22.3数据输入输出(I/O)在控制指令字输入后的下一个 SCLK时钟的上升沿时,数据被写入 DS1302,数 据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个 SCLK脉冲 的下降沿读出DS1302的数据,读出数据时从低位0位到高位72.4 DS1302的
14、寄存器DS1302 有12 个寄存器,其中有 7个寄存器与日历、时钟相关,存放的数据位为BCD 码形式,其日历、时间寄存器及其控制字见表 1。此外, DS1302 还有年份 寄存器、控制寄存器、 充电寄存器、时钟突发寄存器及与 RAM 相关的寄存器等。 时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302 与 RAM 相关的寄存器分为两类:一类是单个 RAM 单元,共 31 个,每 个单元组态为一个8位的字节,其命令控制字为COHFDH,其中奇数为读操作, 偶数为写操作;另一类为突发方式下的 RAM 寄存器,此方式下可一次性读写所 有的RAM的31个字节,命令控制字为 F
15、EH(写)、FFH(读)。3、1602液晶16O2 液晶也叫 16O2 字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符 位都可以显示一个字符, 每位之间有一个点距的间隔, 每行之间也有间隔, 起到 了字符间距和行间距的作用, 正因为如此所以它不能很好地显示图形 (用自定义 CGRAM ,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显 示字符和数字)。目前市面上字符液晶绝大多数是基于 HD44780 液晶芯片的, 控制原理是完全相同的,因此基于 HD44780 写
16、的控制程序可以很方便地应用于 市面上大部分的字符型液晶。管脚功能LCD1602引脚图1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调 整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄 存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电
17、源。15脚背光正极,16脚背光负极电路总图:所用仪器名称清单:DS1302芯片,单片机AT89C51 ,液晶显示屏LCD1602 ,晶振,电解电容等。C语言程序:#in elude #in elude vintrin s.h#in elude #define uint unsigned int#define uchar unsigned char/ 定义 DS1302 与MCU 接口sbit IO = P1A0;/IO接口sbit SCLK = P1A1;时钟线引脚sbit RST = P1A2;/复位线引脚/ 定义 1602 与单片机的接口sbit RS =P2A0;/指令数据选择sbit
18、RW= P2A1;/接地,执行写操作sbit EN =P2A2;/信号使能uchar *WEEK=SUN,MON,TUS,WEN,THU,FRI,SAT;uchar LCD_DSY_BUFFER1=DATE 00-00-00 ;uchar LCD_DSY_BUFFER2=TIME 00:00:00 ;uchar DateTime7;/*延时 i 毫秒函数 */void DelayMS(uint ms)uchar i;while(ms-)for(i=0;i120;i+);/* 向 DS1302 写入 1字节数据 */void Write_A_Byte_TO_DS1302(uchar x)ucha
19、r i;for(i=0;i=1;/x 右移 1 位,高位补 0/* 从 DS1302 中读出 1 字节数据 */uchar Get_A_Byte_FROM_DS1302()uchar i,b=0x00;for(i=0;i8;i+)b=b|_crol_(uchar)IO,i);return b/16*10+b%16;/* 读取 DS1302 某地址的数据,先写命令字,后读数据 */ uchar Read_Data(uchar addr)uchar dat;RST = 0;/ 复位SCLK=0;/ 时钟脉冲置 0RST=1;/ 启动数据传送Write_A_Byte_TO_DS1302(addr);
20、/ 写入地址命令字dat = Get_A_Byte_FROM_DS1302();/ 读出一个字节的数据SCLK=1;RST=0;return dat;void GetTime()uchar i,addr=0x81;for(i=0;i7;i+)DateTimei=Read_Data(addr);addr+=2;*读出 LCD 状态 */uchar Read_LCD_State()uchar state;RS=0;RW=1;EN=1;DelayMS(1);state=P0;EN = 0;DelayMS(1);return state;* *LCD忙检测 *void LCD_Busy_Wait()w
21、hile(Read_LCD_State()&0x80)=0x80);/ 读取忙标志位 BF,BF=1 则一直等待DelayMS(5);*向 LCD 写数据 */void Write_LCD_Data(uchar dat)LCD_Busy_Wait();/ 忙检测确保上一指令完成,也可用适当的延时替换此行RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;void Write_LCD_Command(uchar cmd)LCD_Busy_Wait();RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;*初始化 LCD 函数*v
22、oid Init_LCD()DelayMS(1);Write_LCD_Command(0x06);/Write_LCD_Command(0x0c);/DelayMS(1);void Set_LCD_POS(uchar p)Write_LCD_Command(p|0x80);void Display_LCD_String(uchar p,uchar *s)uchar i;Set_LCD_POS(p);for(i=0;i16;i+)Write_LCD_Data(si);DelayMS(1);*格式化日期时间函数 */void Format_DateTime(uchar d,uchar *a)a0=
23、d/10+0;a1=d%10+0;/*主函数 */void main()Init_LCD();/ 初始化液晶while(1)GetTime();/ 获得当前时间Format_DateTime(DateTime6,LCD_DSY_BUFFER1+5);/ 通道号显示Format_DateTime(DateTime4,LCD_DSY_BUFFER1+8);Format_DateTime(DateTime3,LCD_DSY_BUFFER1+11);strcpy(LCD_DSY_BUFFER1+13,WEEKDateTime5);Format_DateTime(DateTime2,LCD_DSY_BU
24、FFER2+5);Format_DateTime(DateTime1,LCD_DSY_BUFFER2+8);Format_DateTime(DateTime0,LCD_DSY_BUFFER2+11);Display_LCD_String(0x00,LCD_DSY_BUFFER1);/ 液晶显示Display_LCD_String(0x40,LCD_DSY_BUFFER2);组装调试电路的过程及特点:任何一个科研成果的出现 , 都离不开实验及研究记录 , 切不可低估记录的重要作用。在单片机开发过程中, 单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。 但通常
25、是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。 可见硬件的调试是基础, 如果硬件调试不通过,软件设计则是无从做起 利用仿真器调试与软件调试的方法基本相同,同样可以利用“单步” 、“跟踪”、 “断点”等手段, 对程序进行分段调试或统一调试。 不同的是仿真器把软件和硬 件结合了起来,使程序在比较真实的系统中运行。 需要指出的是,通过仿真器 调试的程序并不是最后使用的程序, 它只是更接近了真实运行的程序, 要想在真 实系统中让程序可靠运行,往往还需要结合真实系统反复进行调试。合理设置和利用外部中断能充分开发和利用单片机的资源, 调试程序是单片 机外部中断程序开发系统中最关键的环节
26、, 如果单从理论上讲并不困难, 但操作 起来要麻烦得多, 往往会耗费大量的时间, 这只能靠多实践、 多操作,积累经验, 不断提高分析问题和解决问题的综合能力来解决。 借助简单工具对单片机硬件调 试的方法,这些方法如果利用得好,就可以大大缩短单片机的开发周期。总而言之,对于脉冲触发类的信号我们要用软件来配合, 并要把程序编为死 循环,再利用示波器观察 ;对于电平类触发信号,可以直接用示波器观察。心得体会:随着电子技术的发展, 特别是随着大规模集成电路的产生, 给人们的生活带 来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞 跃,那么可编程控制器的出现则是给现代工业控制测控领域
27、带来了一次新的革 命。本学期我们花了两个星期进行了单片机设计实验。 俗话说“好的开始是成功 的一半”。说这次实习,我认为最重要的就是做好程序调试,认真的研究老师给 的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了, 做起产品就会事半功倍。最后,要重视程序的模块化,修改的方便,也要注重程 序的调试,掌握其方法。通过这次单片机实习, 我不仅加深了对单片机理论的理解, 将理论很好地应 用到实际当中去, 而且我还学会了如何去培养我们的创新精神, 从而不断地战胜 自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成 为真己的东西。其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如: C 语 言、模拟和数字电路知识等。 虽然过去从未独立应用过它们, 但在学习的过程中 带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。通过这几天的单片机的实训, 我在理论的基础上更深刻的掌握了单片机的深 层内容及实际生活中的应用, 实训锻炼了自己动手能力和思维能力, 还有在软件 方面的编程能力, 让我受益匪浅, 同时也暴露出一些平时学习上的问题, 让我深 刻反思。这些问题的发现将为我以后的学习和工作找明道路, 查漏补缺为进一步 学习作好准备。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1