《2022年单片机课程设计实验报告...docx》由会员分享,可在线阅读,更多相关《2022年单片机课程设计实验报告...docx(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 基于单片机的电子钟设计目录第一章 电子时钟设计 -21.1 设计原理简介 -21.2 设计功能 -3其次章主要电路元器件介绍-32.1 STC89C52 单片机简介 -32.1.1 单片机简介 -32.1.2 主要特性 -32.1.3 管脚功能说明 -4 2.1.4 LCD1602-5第三章 单元电路的硬件设计-63.1 硬件原理框图 -63.2 单片机 STC89C52 系统的设计 -6 3.3 时钟电路 -7 3.4 复位电路 -7 3.5 键盘接口电路 -8 3.6 LCD1602 显示-8 第四章 设计总原理图 -9 第五章 心得体会
2、-9 第六章 源程序 -10 1 名师归纳总结 - - - - - - -第 1 页,共 28 页精选学习资料 - - - - - - - - - 前言:课 程 设 计 题 目 电 子 时 钟 、 日 历2022 年 6 月 17任 务 下 达 日 期 设 计 提 交 期 限 2022 年 7 月 5 日日设 计 主 要 使 用 89C51 、 LCD1602 , 设 计 一 个 能 同 时 显 示 “年 月 日 ”内 容“时 分 秒 ”和 “星 期 ”的 电 子 作 品基 本 要 求 :主 要 技 术 要 求 及 参 数成 果 提 交 形 式1 时 钟 走 一 天 的 误 差 小 于 1 秒
3、 钟 2 时 间 、 星 期 、 日 历 均 可 以 通 过 按 键 调 节 设 置技 术 报 告 一 份 , 制 作 实 物 一 件 ;设 计 进 度 安 排第 1 周 查 资 料 ,研 究 设 计 题 目 、内 容 及 要 求 并 进 行 初 步 设 计 ;第 2 周 设 计 、 安 装 及 调 试 , 并 撰 写 设 计 报 告 ;第 2 周 周 五 上 午 提 交 设 计 报 告 并 现 场 答 辩 ;2 名师归纳总结 - - - - - - -第 2 页,共 28 页精选学习资料 - - - - - - - - - 摘要数字钟已成为人们日常生活中必不行少的必需品,广泛用于个人家庭以及
4、办公室等公共场所,给人们的生活、学习、工作、消遣带来极大的便利;由于数字集成电路技术的进展和采纳了先进的石英技术,使数字钟具有走时精确、 性能稳定、携带便利等优点,它仍用于计时、自动报时及自动掌握等各个领域;尽管目 前市场上已有现成的数字钟集成电路芯片出售,价格廉价、使用也便利,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的;在这里我们将已学过的比较零散的数字电路的学问有机的、系统的联系来用于实际,来培育我们的综合分析和设计电路,写程序、调试电路的才能;单片机具有体积小、功能强牢靠性高、价格低廉等一系列优点, 不仅已成为工业控领域普遍采纳的智能化掌握工具,而且
5、已渗入到人们工作和和生活的各个角落,有力地推动了各行的技术改造和产品的更新换代,应用前景宽阔;一、作品介绍 该电子钟使用 AT89S51为核心,采纳 LCD1602液晶屏显示,动态显示技术; 产用 外部接 5V电源供电,内部添加了一个 4.8V 左右的电池以防突然断电后仍能保持 原先数据不变;该产品简洁易于操作,可以实现以下功能:1、显示年份,格式“ 年、月、日”2、时间显示为 24 小时制,格式“ 时时”“ 分分” “ 妙妙”3、显示星期 , 用英文字符表示如星期一“MON”二、设计目的 1、巩固、加深和扩大 51 系列单片机应用的学问面, 提高综合及敏捷运用所学知 识解决工业掌握的才能;2
6、、学会怎么使用 LCM602,并且要知道它的组成与构造;3、学会查阅书籍,并且要能够娴熟编写程序、图;4、对课题设计方案的分析、挑选、比较、熟识用 过程,软硬件设计的方法、内容及步骤;三、设计要求 1 上电以后自动进入计时状态;仿真、绘画流程图、 原理图及 BCP 51 单片机做系统开发、研制的2、设计键盘调整时间,完成年月日、星期、时间的设计;3、采纳 AT89S51为核心掌握芯片,用LCD1602作为显示屏;3 名师归纳总结 - - - - - - -第 3 页,共 28 页精选学习资料 - - - - - - - - - 第一章1.1 设计原理简介该设计设计一个电子时钟,我们采纳的是 该
7、单片机是一个微型运算机,包括中心处理器STC89C52 单片机用软件实现计数和显示;CPU,RAM ,ROM 、I/O 接口电路、定时计数器、串行通讯等,是时钟计数设计的核心;该时钟原理框图如图 1.1,总体原理为:利用STC89C52 单片机构造电子时钟,可显示年、月、日、星期、时、分、秒,通过 C 语言对单片机的编程即可产生相应的计时功能,并可以通过键盘进行时间的调整的掌握;图 2.1 信号发生器原理框图本方案其主要模块包括复位电路、时钟信号、键盘掌握、的作原理如下:(1)复位电路是为单片机复位使用,使单片机接口初始化;LCD1602 显示;其各个模块89C52 等 CMOS51 系列单片
8、机的复位引脚 RET 是施密特触发输入脚, 内部有一个上拉低电阻,当振荡器起振以后,在 RST 引脚上输出 2 个机械周期以上的高电平,器件变进入复位状态开头,此时 ALE 、PSEN、P0、 P1、P2、P3 输出高电平, RST 上输入返回低电平以后,变退出复位状态开头工作;该方案采纳的是人工开关复位,在系统运行时,按一下开关,就在 RST 断显现一段高电平,使器件复位;(2)时钟信号是产生单片机工作的时钟信号,掌握着运算机的工作节奏,可以通过提高时钟频率来提高 CPU 的速度; 89C52 内部有一个可控的反相放大器,引脚 XTAL1 、XTAL2 为反相放大器输入端和输出端,在 XTA
9、L1 、 XTAL2 上外接 12MHZ 晶振和 30pF 电容便组成振荡器;时钟信号常用于 CPU 定时和计数;(3)键盘模块是是用于掌握信号输入的类型,当按键按下时, 可以通过单片机编 STC89C52单片机数接口电路键盘输入程读取闭合的键号,实现相应的时间调整;其步骤主要是 a、断是否有键按下;b、去抖动,延时 20ms 左右; c、识别被按下的键号;d、处理,实现功能;4 名师归纳总结 - - - - - - -第 4 页,共 28 页精选学习资料 - - - - - - - - - (4)LCD1602 显示,通过单片机掌握把数据送到1.2 设计功能LCD1602 上显示;(1)本设
10、计利用 3 位( P3.0 、P3.1、P3.2)掌握时间的调整,其中当 P3.0=0 对要调整的年、月、日、星期、时、分、秒的切换;当 P3.1=0 进行加 1 设置;当 P3.2=0 进行减 1设置;(2)本设计利用 LCD1602 液晶显示进行时间的显示,由单片机的 P0 端口进行数据的传输; LCD 的 4(RS)接 P2.5, 5(RW)接 P2.6, 6( E)接 P2.7;其次章 主要电路元器件介绍2.1 STC89C52 单片机简介2.1.1 单片机简介AT89C51 是一种带 4K 字节 FLASH储备器的低电压、高性能 CMOS 8 位微处理器,俗称单片机;该芯片具有优异的
11、性价比, 集成度高, 体积小,牢靠性强,掌握功能强等优点;其外形及引脚排列如图2.1 所示;图2.1 2.1.2 主要特性(1)兼容性能强(2)4K 字节可编程 FLASH 储备器(3)全静态工作:0Hz-24MHz (4)128 8 位内部 RAM 5 名师归纳总结 - - - - - - -第 5 页,共 28 页精选学习资料 - - - - - - - - - (5)32 可编程 I/O 线(6)两个 16 位定时器 /计数器(7)5 个中断源(8)可编程串行通道(9)低功耗的闲置和掉电模式(10)片内振荡器和时钟电路2.1.3 管脚功能说明VCC:供电电压;GND:接地;P0口: P0
12、口为一个 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
13、口: P2口为一个内部上拉电阻的 8位双向 I/O 口, P2口缓冲器可接收,输出 4个 TTL门电流,当 P2口被写“1” 时,其管脚被内部上拉电阻拉高,且作为输入;并因此作为输入时,P2口的管脚被外部拉低,将输出电流;这是由于内部上拉的缘故;P2口当用于外部程序储备器或 16位地址外部数据储备器进行存取时,P2口输出地址的高八位;在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据储备器进行读写时,P2口输出其特别功能寄存器的内容;P2口在 FLASH编程和校验时接收高八位地址信号和掌握信号;P3口: P3口管脚是 8个带内部上拉电阻的双向 I/O 口,可接收输出 4个 TTL 门
14、电流;当P3口写入“1” 后,它们被内部上拉为高电平,并用作输入;作为输入,由于外部下拉为低电平, P3口将输出电流( ILL )这是由于上拉的缘故;管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断 0)6 P3口作为 AT89C51的一些特别功能口,名师归纳总结 - - - - - - -第 6 页,共 28 页精选学习资料 - - - - - - - - - P3.3 /INT1(外部中断 1)P3.4 T0 (计时器 0外部输入)P3.5 T1 (计时器 1外部输入)P3.6 /WR (外部数据储备器写选通)P3.7 /RD (外部
15、数据储备器读选通)RST:复位输入;当振荡器复位器件时,要保持RST脚两个机器周期的高电平常间;ALE/PROG:当拜访外部储备器时,地址锁存答应的输出电平用于锁存地址的位置字节;在 FLASH编程期间,此引脚用于输入编程脉冲;在平常,ALE端以不变的频率周期输出正脉冲信号, 此频率为振荡器频率的 1/6 ;因此它可用作对外部输出的脉冲或用于定时目的;然而要留意的是:每当用作外部数据储备器时,将跳过一个 ALE脉冲; 如想禁止 ALE的输出可在 SFR8EH地址上置 0;此时, ALE 只有在执行 引脚被略微拉高;假如微处理器在外部执行状态MOVX,MOVC指令是 ALE才起用;另外,该 AL
16、E禁止,置位无效;/PSEN:外部程序储备器的选通信号;在由外部程序储备器取指期间,每个机器周期两/PSEN有效;但在拜访外部数据储备器时,这两次有效的/PSEN信号将不显现;/EA / VPP :当/EA 保持低电平常,就在此期间外部程序储备器(0000H-FFFFH),不管是否有内部程序存储器;留意加密方式 1时, /EA 将内部锁定为 RESET;当 /EA 端保持高电平常,此间内部程序储备器;在 FLASH编程期间,此引脚也用于施加 12V 编程电源( VPP);XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入;XTAL2:来自反向振荡器的输出;2.1.4 LCD1602 这里
17、介绍的字符型液晶模块是一种用 5x7 点阵图形来显示字符的液晶显示器,依据显示的容量可以分为 1 行 16 个字、2 行 16 个字、2 行 20 个字等等,这里以常用的 2 行 16 个字的 1602 液晶模块来介绍它的编程方法;第 1 脚: VSS 为地电源 第 2 脚: VDD 接 5V 正电源1602 采纳标准的 16 脚接口,其中 : 第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“ 鬼影”,使用时可以通过一个 10K 的电位器调整对比度第 4 脚: RS 为寄存器挑选,高电平常挑选数据寄存器、低电平常挑选指令寄存器;7 名
18、师归纳总结 - - - - - - -第 7 页,共 28 页精选学习资料 - - - - - - - - - 第 5 脚:RW 为读写信号线,高电平常进行读操作,低电平常进行写操作;当 RS 和 RW 共同为低电平常可以写入指令或者显示地址,当 RS 为低电平 RW 为高电平常可以读忙信号,当 RS 为高电平 RW 为低电平常可以写入数据;第 6 脚: E 端为使能端,当 E 端由高电平跳变成低电平常,液晶模块执行命令;第 7 14 脚: D0D7 为 8 位双向数据线;第15脚:背光电源正极第16脚:背光电源负极第三章 单元电路的硬件设计硬件原理硬件电路的设计打算一个系统的的功能,是设计的
19、基础所在, 而一般设计的标:牢靠,简洁,高效,优化,好的硬件电路可以给程序的编写带来极大的优势,同时使可以很 好的提高该信号设计的精度和灵敏度,使整个系统工作和谐有序;3.1 硬件原理框图 对于该电子时钟的设计,我们采纳了以 STC89C52单片机芯片作为核心处理器,编程实 现时间的计时, 最终通过 LCD1602 的显示; 结 构简洁, 思路仅仅有条, 而依据设计的基本要 求,我们又把其细分为不同的功能模块,各个 功能模块相互联系,相互和谐,通过单片机程 序构成一个统一的整体,其整体电路原理框 如图 3.1 所示:图 3.1 3.2 单片机 STC89C52 系统的设计89C52 单片机是该
20、信号发生器的核心,具有2 个定时器, 32 个并行I/O 口, 1 个串行 I/O 口, 5 个中断源;由于本设计功能简洁,数据处理简洁,数据储备空间也足够,因 为我们采纳了片选法挑选芯片,进行芯片的挑选和地址的译码;8 名师归纳总结 - - - - - - -第 8 页,共 28 页精选学习资料 - - - - - - - - - 单片机引脚安排如下:XTAL1 ,XTAL2 :外接晶振,产生时钟信号;RES:复位电路;P0 口:接 LCD1602 的第 714 脚进行数据的传输;P2 口: LCD 的 4(RS)接 P2.5, 5( RW)接 P2.6, 6(E)接 P2.7;P3 口:接
21、按键开关,对时间进行设置;3.3 时钟电路 单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式;在引脚 XTAL1 和 XTAL2 外接晶体振荡器,构成了内部振荡方式;由于单片机内部有一个高增益的反相放 器,当外接晶振后, 就构成了自激振荡, 并产生振动时钟脉冲; 晶振通常选用 6MHZ 、12MHZ 、24MHZ ;本设计中时钟电路图如图 3.2,我们挑选了 12MHZ 和晶振分别接引脚 XTAL1 和 XTAL2 ,电容 C1,C2 均挑选为 30pF,对振荡器的频率有稳 定作用;图 3.2 3.4 复位电路复位引脚RST 通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑
22、制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号;复位电路通常采纳上电自动复位和按钮复位两种方式;本设计挑选了按键复位如图 4.3,在系统运行时, 按一下开关, 就在 RST 断显现一段高电平,使器件复位; 此时 ALE 、PSEN、P0、P1、P2、P4 输出高电平, RST 上输入返回低电平以后,变退出复位状态开头工作;3.5 键盘接口电路P3.0 、P3.1、 P3.2 掌握时间的调整,其中当P3.0=0 对要调整的年、月、日、星期、时、分、秒的切换;当P3.1=0 进行加 1 设置;当P3.2=0 进行减9 名师归纳总结
23、- - - - - - -第 9 页,共 28 页精选学习资料 - - - - - - - - - 1 设置;图 3.43.6 LCD1602 显示对于 1602 与单片机的连接方法如图 3.5 所示:图 3.5 第四章 设计总原理图10 名师归纳总结 - - - - - - -第 10 页,共 28 页精选学习资料 - - - - - - - - - 五、试验心得体会该电子时钟在调试时,总是显现很多的错误,软件上出了很多的问题,之后订正,和组员渐渐调试修改了好多次;可是在仿真时依旧存在很多的问题,开头的时候是仿真没有时间显示,之后改了改电路的 P0 数据传输线后时间就显示出来了;在时间的调整
24、上问题更多,刚开头时按键没有反应,然后加上了消抖延时后才有反应,但是设的延时时间太长就显现按键不灵,再改后就正常了;在开发板上调试时,背光是亮着, 但是没有数字显现,经过查看 1602 的资料才发觉仿真不需要调剂 3 脚的变位器,而在电路板上时就需要调剂变位器才能使它正常显示;11 名师归纳总结 - - - - - - -第 11 页,共 28 页精选学习资料 - - - - - - - - - 第六章 源程序#include #define uchar unsigned char #define uint unsigned int uchar ds1302_readbyte; void ds
25、1302_writebyteuchar dat; uchar ds1302_readdatauchar addr; void ds1302_writedatauchar addr,uchar dat; void ds1302_settimeuchar *p; void ds1302_gettimeuchar *p; void ds1302_initial; sbit dssclk=P16; sbit dsIO=P17; sbit dsrs=P15; sbit lcd_rs=P25; sbit lcd_write=P26; sbit lcd_en=P27; sbit key1=P30; /设置
26、sbit key2=P31; /加 sbit key3=P32; /减 uchar table_r= 2022-01-01 MON ; uchar table_s= 00:00:00; uchar table_week3=M,O,N, T,U,E, W,E,D, T,H,U, F,R,I, S,A,T, S,U,N ; uchar i,t,keynum1; char sec,min,hour,week,day=1,mon=1; uint year=2022; uchar Convertuchar In_Date uchar i, Out_Date = 0, temp = 0; fori=0;
27、i i & 0x01; Out_Date |= temp 7 - i; 12 名师归纳总结 - - - - - - -第 12 页,共 28 页精选学习资料 - - - - - - - - - return Out_Date; void delayuchar z /延时程序 uchar x,y; forx=0;x148;x+ fory=0;yz;y+; void write_comuchar com/ 往液晶中写指令 lcd_rs=0; lcd_en=0; P0=Convertcom; delay2; lcd_en=1; delay2; lcd_en=0; void write_datauch
28、ar date/ 往液晶中写数据 lcd_rs=1; lcd_en=0; P0=Convertdate; delay2; lcd_en=1; delay2; lcd_en=0; void data_refresh_0uchar add,uchar date/ 第一行二位数调整 uchar shi,ge; shi=date/10; ge=date%10; write_com0x80+add; write_data0x30+shi; write_data0x30+ge; void data_refresh_1uchar add,uchar date/ 其次行二位数调整 uchar shi,ge;
29、shi=date/10; ge=date%10; write_com0x80+0x40+add; 13 名师归纳总结 - - - - - - -第 13 页,共 28 页精选学习资料 - - - - - - - - - write_data0x30+shi; write_data0x30+ge; void data_refresh_2uchar add,uchar date /星期调整 switchdate case 0:write_com0x80+add; write_datatable_week00; write_datatable_week01; write_datatable_week
30、02; break; case 1:write_com0x80+add; write_datatable_week10; write_datatable_week11; write_datatable_week12; break; case 2:write_com0x80+add; write_datatable_week20; write_datatable_week21; write_datatable_week22; break; case 3:write_com0x80+add; write_datatable_week30; write_datatable_week31; write
31、_datatable_week32; break; case 4:write_com0x80+add; write_datatable_week40; write_datatable_week41; write_datatable_week42; break; case 5:write_com0x80+add; write_datatable_week50; write_datatable_week51; write_datatable_week52; break; case 6:write_com0x80+add; write_datatable_week60; write_datatabl
32、e_week61; write_datatable_week62; break; 14 名师归纳总结 - - - - - - -第 14 页,共 28 页精选学习资料 - - - - - - - - - void data_refresh_4uchar add,uint date /四位数调整 uchar qian,bai,shi,ge; qian=date/1000; bai=date%1000/100; shi=date%1000%100/10; ge=date%1000%100%10; write_com0x80+add; write_data0x30+qian; write_data0
33、x30+bai; write_data0x30+shi; write_data0x30+ge; void lcd_init /液晶显示初始化 lcd_write=0; lcd_rs=0; lcd_en=0; write_com0x38; write_com0x0c; write_com0x06; write_com0x01; write_com0x80; fori=0;i15;i+ write_datatable_ri; delay10; write_com0x80+0x40; fori=0;i11;i+ write_datatable_si; delay10; timer0_init /定时
34、器 0 初始化 TMOD=1; TH0=65536-50000/256; TL0=65536-50000%256; 15 名师归纳总结 - - - - - - -第 15 页,共 28 页精选学习资料 - - - - - - - - - EA=1; ET0=1; TR0=1; void keyscan /按键扫描 ifkey1=0 delay5; ifkey1=0 TR0=0; keynum1+; delay10; while.key1; write_com0x80+0x40+10; write_com0x0f; ifkeynum1=2/ 分 write_com0x80+0x40+7; ifk
35、eynum1=3/ 时 write_com0x80+0x40+4; ifkeynum1=4/ 年 write_com0x80+4; ifkeynum1=5/ 月 write_com0x80+7; ifkeynum1=6/ 日 write_com0x80+10; ifkeynum1=7/ 星期 write_com0x80+14; ifkeynum1=8 keynum1=0; 16 名师归纳总结 - - - - - - -第 16 页,共 28 页精选学习资料 - - - - - - - - - TR0=1; write_com0x0c; ifkeynum1.=0 ifkeynum1=1 ifke
36、y2=0 delay5; ifkey2=0 sec+; ifsec=60 sec=0; delay10; while.key2; data_refresh_19,sec; write_com0x80+0x40+10; ifkey3=0 delay5; ifkey3=0 sec-; ifsec=-1 sec=59; delay10; while.key3; data_refresh_19,sec; write_com0x80+0x40+10; ifkeynum1=2 ifkey2=0 delay5; ifkey2=0 17 名师归纳总结 - - - - - - -第 17 页,共 28 页精选学
37、习资料 - - - - - - - - - min+; ifmin=60 min=0; delay10; while.key2; data_refresh_16,min; write_com0x80+0x40+7; ifkey3=0 delay5; ifkey3=0 min-; ifmin=-1 min=59; delay10; while.key3; data_refresh_16,min; write_com0x80+0x40+7; ifkeynum1=3 ifkey2=0 delay5; ifkey2=0 hour+; ifhour=24 hour=0; delay10; while.key2; data_refresh_13,hour; write_com0x80+0x40+4; ifkey3=0 delay5; 18 名师归纳总结 - - - - - - -第 18 页,共 28 页精选学习资料 - - - - - - - - - ifkey3=0 hour-; ifhour=-1 hour=23; delay10; while.key3; data_refresh_13,hour; write_com0x80+0x40+4; ifkeynum1=7 ifkey2=
限制150内