51单片机时钟实训报告
- 格式:doc
- 大小:105.00 KB
- 文档页数:7
关于单片机实训报告万能【六篇】【篇1】单片机实训报告万能通过今次单片机实训,使我对单片机的认识有了更深刻的理解。
系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。
例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。
当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。
这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。
这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。
希望这次的经历能让我在以后学习中激励我继续进步。
【篇2】单片机实训报告万能通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。
了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。
LED显示器:LED显示器是由发光二管组成显示字段的器件。
通常的8段LED显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。
有段选码和和位选码。
当LED显示器每段的平均电流位5MA时,就有较满意的亮度,一般选择断码5-10MA 电流;位线的电流应选择40-80MA。
LED显示器的显示方式有动态和静态两种。
7289A芯片是具有SPI串行接口功能的显示键盘控制芯片,它可同时取得8位共阴极数码管和64个键的键盘矩阵。
一、实训背景随着科技的不断发展,单片机技术得到了广泛应用。
单片机具有体积小、成本低、功能强大等特点,因此在电子设备中得到了广泛的应用。
本实训旨在通过设计一个基于单片机的时钟显示系统,让学生了解单片机的原理、编程方法和接口电路设计,提高学生的实践能力和创新意识。
二、实训目的1. 掌握单片机的原理和编程方法;2. 熟悉单片机的接口电路设计;3. 学会使用LCD液晶显示器和按键进行人机交互;4. 提高学生的实践能力和创新意识。
三、实训内容1. 硬件设计(1)硬件组成:本实训采用AT89C51单片机作为核心控制单元,使用LCD1602液晶显示器进行时间显示,并使用DS1302实时时钟芯片提供准确的时间。
(2)电路设计:① AT89C51单片机电路:包括电源电路、晶振电路、复位电路等;② DS1302实时时钟芯片电路:包括电源电路、时钟晶振电路、数据通信电路等;③ LCD1602液晶显示器电路:包括电源电路、数据通信电路等;④ 键盘电路:包括按键输入电路和单片机接口电路。
2. 软件设计(1)软件组成:本实训的软件设计包括主程序、按键扫描程序、时间显示程序和DS1302时钟读取程序。
(2)程序设计:① 主程序:负责系统初始化、按键扫描、时间显示和DS1302时钟读取等功能;② 按键扫描程序:负责检测按键是否被按下,并根据按键输入进行相应操作;③ 时间显示程序:负责将DS1302实时时钟芯片读取的时间显示在LCD1602液晶显示器上;④ DS1302时钟读取程序:负责从DS1302实时时钟芯片读取当前时间。
3. 系统调试(1)硬件调试:连接好硬件电路,检查各个模块的连接是否正确,并进行必要的调试;(2)软件调试:使用Proteus软件进行仿真调试,确保程序能够正常运行。
四、实训过程1. 硬件制作(1)根据电路原理图,焊接好各个模块的电路板;(2)将各个模块连接到单片机上,并检查连接是否正确。
2. 软件编写(1)使用Keil C51软件编写程序;(2)将编写好的程序烧录到单片机中。
单片机实训报告总结篇一:51单片机实训报告“51单片机”精简开发板的组装及调试实训报告为期一周的单片机实习已经结束了。
通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。
同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。
此次实训主要有以下几个方面:一、实训目的1.了解“51”精简开发板的工作原理及其结构。
2.了解复杂电子产品生产制造的全过程。
3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。
4.能运用51单片机进行简单的单片机应用系统的硬件设计。
5.掌握单片机应用系统的硬件、软件调试方法二、实验原理流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。
它的电气性能指标:输入电压:~6V,典型值为5V。
可用干电池组供电,也可用直流稳压电源供电。
如图所示:本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。
三、硬件组成1、晶振电路部分单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。
他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。
2、复位端、复位电路给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。
单片机实验报告数字时钟设计报告一、实验目的本次单片机实验的目的是设计并实现一个基于单片机的数字时钟。
通过该实验,深入了解单片机的工作原理和编程方法,掌握定时器、中断、数码管显示等功能的应用,提高综合运用知识解决实际问题的能力。
二、实验原理1、单片机选择本次实验选用了常见的 51 系列单片机,如 STC89C52。
它具有丰富的资源和易于编程的特点,能够满足数字时钟的设计需求。
2、时钟计时原理数字时钟的核心是准确的计时功能。
通过单片机内部的定时器,设定合适的定时时间间隔,不断累加计时变量,实现秒、分、时的计时。
3、数码管显示原理采用共阳或共阴数码管来显示时间数字。
通过单片机的 I/O 口控制数码管的段选和位选信号,使数码管显示相应的数字。
4、按键控制原理设置按键用于调整时间。
通过检测按键的按下状态,进入相应的时间调整模式。
三、实验设备与材料1、单片机开发板2、数码管3、按键4、杜邦线若干5、电脑及编程软件(如 Keil)四、实验步骤1、硬件连接将数码管、按键与单片机开发板的相应引脚通过杜邦线连接起来。
确保连接正确可靠,避免短路或断路。
2、软件编程(1)初始化单片机的定时器、中断、I/O 口等。
(2)编写定时器中断服务程序,实现秒的计时。
(3)设计计时算法,将秒转换为分、时,并进行进位处理。
(4)编写数码管显示程序,将时间数据转换为数码管的段选和位选信号进行显示。
(5)添加按键检测程序,实现时间的调整功能。
3、编译与下载使用编程软件将编写好的程序编译生成可执行文件,并下载到单片机中进行运行测试。
五、程序设计以下是本次数字时钟设计的主要程序代码片段:```cinclude <reg52h>//定义数码管段选码unsigned char code SEG_CODE ={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//定义数码管位选码unsigned char code BIT_CODE ={0x01, 0x02, 0x04, 0x08, 0x10,0x20, 0x40, 0x80};//定义时间变量unsigned int second = 0, minute = 0, hour = 0;//定时器初始化函数void Timer_Init(){TMOD = 0x01; //定时器 0 工作在方式 1 TH0 =(65536 50000) / 256; //定时 50ms TL0 =(65536 50000) % 256;EA = 1; //开总中断ET0 = 1; //开定时器 0 中断TR0 = 1; //启动定时器 0}//定时器 0 中断服务函数void Timer0_ISR() interrupt 1{TH0 =(65536 50000) / 256;TL0 =(65536 50000) % 256;second++;if (second == 60){second = 0;minute++;if (minute == 60){minute = 0;hour++;if (hour == 24){hour = 0;}}}}//数码管显示函数void Display(){unsigned char i;for (i = 0; i < 8; i++)P2 = BIT_CODEi;if (i == 0){P0 = SEG_CODEhour / 10;}else if (i == 1){P0 = SEG_CODEhour % 10;}else if (i == 2){P0 = 0xBF; //显示“”}else if (i == 3){P0 = SEG_CODEminute / 10;else if (i == 4){P0 = SEG_CODEminute % 10;}else if (i == 5){P0 = 0xBF; //显示“”}else if (i == 6){P0 = SEG_CODEsecond / 10;}else if (i == 7){P0 = SEG_CODEsecond % 10;}delay_ms(1);//适当延时,防止闪烁}}//主函数void main(){Timer_Init();while (1){Display();}}```六、实验结果与分析1、实验结果将程序下载到单片机后,数字时钟能够正常运行,准确显示时、分、秒,并且通过按键可以进行时间的调整。
单片机课程设计报告多功能电子数字钟姓名:学号:班级:指导教师:目录一课程设计题目—-—-———--—--—-—--------—-——---—- 3二电路设计--------——-——---—--——---——--————-——--—- 4三程序总体设计思路概述——-------———-——--——5四各模块程序设计及流程图——--—---------——6五程序及程序说明见附录-—-——————-—-—---—-- **六课程设计心得及体会-----————-————--——--—- 11七参考资料—-—-—---—--———-———--————-—-----—----—-—12一题目及要求本次单片机课程设计在Proteus软件仿真平台下实现,完成电路设计连接,编程、调试,仿真出实验结果。
具体要如下:用8051单片机设计扩展6位数码管的静态或动态显示电路,再连接几个按键和一个蜂鸣器报警电路,设计出一个多功能电子钟,实现以下功能: (1)走时(能实现时分秒,年月日的计时)(2)显示(分屏切换显示时分秒和年月日,修改时能定位闪烁显示)(3)校时(能用按键修改和校准时钟)(4)定时报警(能定点报时)本次课程设计要求每个学生使用Proteus仿真软件独立设计制作出电路图、完成程序设计和系统仿真调试,验收时能操作演示.最后验收检查结果,评定成绩分为:(1)完成“走时+显示+秒闪”功能—-——及格(2)完成“校时修改”功能---—中等(3)完成“校时修改位闪"---—良好(4)完成“定点报警”功能,且使用资源少----优秀二电路设计(电路设计图见附件电路图)(1)采用89C51型号单片机(2)采用8位共阴数码管(3)因为单片机输出高电平时输出的电流不足以驱动数码管,所以在P0口与8位数码管之间加74LS373来驱动数码管(4)P2口与数码管选择位直接加74LS138译码器(5)蜂鸣器接P3。
7口。
《单片机原理与应用》课程设计总结报告题目:单片机电子时钟(带秒表)的设计设计人员:张保江江润洲学号:********** **********班级:自动化1211指导老师:***目录1.题目与主要功能要求 (2)2.整体设计框图及整机概述 (3)3.各硬件单元电路的设计、参数分析及原理说明 (3)4.软件流程图和流程说明 (4)5.总结设计及调试的体会 (10)附录1.图一:系统电路原理图 (11)2.图二:系统电路PCB (12)3.表一:元器件清单 (13)4.时钟程序源码 (14)题目:单片机电子时钟的设计与实现课程设计的目的和意义课程设计的目的与意义在于让我们将理论与实践相结合。
培养我们综合运用电子课程中的理论知识解决实际性问题的能力。
让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。
课程设计的基本任务利用89C51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入等知识,设计一款单片机和简单外设控制的电子时钟。
主要功能要求最基本要求1)使用MCS-51单片机设计一个时钟。
要求具有6位LED显示、3个按键输入。
2)完成硬件实物制作或使用Pruteus仿真(注意位驱动应能提供足够的电流)。
3)6位LED数码管从左到右分别显示时、分、秒(各占用2位),采用24小时标准计时制。
开始计时时为000000,到235959后又变成000000。
4)使用3个键分别作为小时、分、秒的调校键。
每按一次键,对应的显示值便加1。
分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。
在调校时均不向上一单位进位(例如分加到59后变为00,但小时不发生改变)。
5) 软件设计必须使用MCS-51片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。
一、引言随着科技的不断发展,单片机技术在电子领域得到了广泛的应用。
为了提高学生的实践能力,培养实际工程应用能力,我们进行了单片机设计时钟实训。
本实训以AT89C51单片机为核心,通过学习时钟电路的设计、编程和调试,使学生掌握单片机在时钟设计中的应用,提高学生的动手能力和创新思维。
二、实训目的1. 掌握单片机的基本原理和编程方法;2. 熟悉时钟电路的设计和调试;3. 培养学生的实际工程应用能力和创新思维;4. 提高学生的团队协作能力和沟通能力。
三、实训内容1. 硬件设计(1)单片机选型:选用AT89C51单片机作为核心控制单元;(2)时钟电路:采用晶振电路作为时钟源,实现1Hz的基准时钟;(3)显示电路:采用LCD1602液晶显示屏,实现时间、日期和星期等信息显示;(4)按键电路:设计4个按键,分别用于设置时间、日期、星期和闹钟功能;(5)复位电路:采用上电复位和按键复位两种方式,保证系统稳定运行。
2. 软件设计(1)系统初始化:初始化单片机,设置波特率、定时器等;(2)时间显示:通过读取实时时钟芯片(如DS1302)的数据,显示时间、日期和星期;(3)按键处理:根据按键输入,实现时间、日期、星期和闹钟的设置与修改;(4)闹钟功能:当设定的时间到达时,通过蜂鸣器发出提示音。
3. 调试与优化(1)调试方法:使用Proteus软件进行仿真调试,观察程序运行状态,分析故障原因;(2)优化方法:针对仿真过程中出现的问题,优化程序代码,提高程序运行效率。
四、实训过程1. 硬件制作(1)按照设计图纸,焊接电路板;(2)连接晶振、LCD显示屏、按键和蜂鸣器等元器件;(3)调试电路,确保各元器件正常工作。
2. 软件编写(1)使用Keil C51软件编写程序,实现时钟显示、按键处理和闹钟功能;(2)编译程序,生成HEX文件。
3. 调试与优化(1)使用Proteus软件进行仿真调试,观察程序运行状态;(2)针对仿真过程中出现的问题,优化程序代码,提高程序运行效率;(3)将优化后的程序烧录到单片机中,进行实际运行测试。
C51单片机实验报告
一、实验内容
本次实验的目的是实现用C51单片机实现简易的闹钟功能:即用户可以设置闹钟时间,当到达闹钟的设定时间的时候,单片机会控制LED灯或者蜂鸣器发出报警信号来提醒用户。
二、实验任务
本次实验任务如下:
1.使用C51单片机读取外部时钟的时间。
2.实现从按键输入闹钟设定的时间。
3.使用定时器实现任务调度,即在每个时刻检查一次外部时钟的时间是否到达闹钟的设定时间,如果到达设定时间,则控制LED灯或者蜂鸣器发出报警信号。
三、实验过程
1.硬件部分:本实验使用的硬件是硬件C51单片机,它具有单片机主频11.059MHz,外部内存2K和内部RAM 128字节。
本次实验采用的C51单片机核心是AT89C51,它具有4K字节的Flash存储器,它有128个8位I/O口和3个定时器/计数器。
本次实验使用到的外设有:LCD1602显示模块、4个4*4的数字键盘、AT24C02的IIC从机存储器、LED灯和蜂鸣器。
2.软件部分:本次实验使用的软件工具是Keil C51编译器,使用它来编写C51单片机程序。
一、实训目的本次单片机数码时钟实训旨在通过实际操作,让学生了解单片机的应用,掌握单片机数码时钟的设计与实现方法,提高学生的实践操作能力和创新思维。
二、实训内容1. 硬件设计(1)单片机:选用AT89C51单片机作为核心控制器。
(2)显示模块:采用4位数码管,实现时分秒的显示。
(3)时钟模块:采用12MHz晶振作为时钟源,通过单片机的定时器/计数器实现秒、分、时的计时。
(4)按键模块:设计启动/停止按钮、设置按钮、清零按钮等,实现对时钟的控制和设置。
(5)电源模块:采用5V电源适配器为系统供电。
2. 软件设计(1)主程序:初始化单片机,设置定时器/计数器,实现时分秒的计时。
(2)中断服务程序:实现按键控制、时间设置、清零等功能。
(3)显示程序:将计时的时分秒数据转换为数码管显示的格式。
三、实训过程1. 硬件搭建(1)按照电路图连接AT89C51单片机、数码管、晶振、按键等元件。
(2)检查电路连接是否正确,确保无短路、断路等现象。
2. 软件编写(1)编写主程序,初始化单片机,设置定时器/计数器,实现时分秒的计时。
(2)编写中断服务程序,实现按键控制、时间设置、清零等功能。
(3)编写显示程序,将计时的时分秒数据转换为数码管显示的格式。
3. 调试与测试(1)将编写好的程序烧录到单片机中。
(2)打开电源,观察数码管显示的时分秒是否正确。
(3)测试按键控制功能,包括启动/停止、设置、清零等。
(4)测试时间设置功能,包括小时、分钟、秒的设置。
四、实训结果1. 硬件方面:成功搭建了单片机数码时钟的硬件电路,包括单片机、数码管、晶振、按键等元件。
2. 软件方面:成功编写了单片机数码时钟的程序,实现了时分秒的计时、按键控制、时间设置等功能。
3. 功能实现:数码时钟能够正常显示时分秒,并通过按键控制实现启动/停止、设置、清零等功能。
五、实训总结1. 通过本次实训,使学生掌握了单片机数码时钟的设计与实现方法,提高了学生的实践操作能力和创新思维。
实验四 电子钟(定时器、中断综合实验)一、实验目的熟悉MCS51类CPU 的定时器、中断系统编程方法, 了解定时器的应用、实时程序的设计和调试技巧。
二、实验内容编写一个时钟程序, 产生一个50ms 的定时中断, 对定时中断计数, 将时、分、秒显示在数码管上。
三、程序框图主程序中断处理电子钟程序框图四、实验步骤 1.连线说明: E5 区A0 ←→ A3 区A0 E5 区CS ←→ A3 区CS5 E5 区CLK ←→ B2 区2MHzE5 区A.B.C.D ←→ G5 区A.B.C.D (排线每个8 位, 注意高低位一致) 2.时间显示在数码管上五、程序清单 ms50 DATA 31H ;存放多少个50ms sec DATA 32H ;秒 min DATA 33H ;分hour DATA 34H ;时buffer DATA 35H ;显示缓冲区EXTRN CODE(Display8)ORG 0000HLJMP STARORG 000BH ;定时器T0中断处理入口地址LJMP INT_Timer0ORG 0100HSTAR: MOV SP,#60H ;堆栈MOV ms50,A ;清零ms50MOV hour,#12 ;设定初值: 12:59:50MOV min,#59MOV sec,#50MOV TH0,#60 ;定时中断计数器初值MOV TL0,#176 ;定时50msMOV TMOD,#1 ;定时器0: 方式一MOV IE,#82H ;允许定时器0中断SETB TR0 ;开定时器T0STAR1: LCALL Display ;调用显示JNB F0,$CLR F0SJMP STAR1 ;需要重新显示时间;中断服务程序INT_Timer0: MOV TL0,#176-5MOV TH0,#60PUSH 01HMOV R1,#ms50INC @R1 ;50ms单元加1CJNE @R1,#20,ExitIntMOV @R1,#0 ;恢复初值INC R1INC @R1 ;秒加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;分加1CJNE @R1,#60,ExitInt1MOV @R1,#0INC R1INC @R1 ;时加1CJNE @R1,#24,ExitInt1MOV @R1,#0ExitInt1: SETB F0ExitInt: POP 01HRETIHexToBCD: MOV B,#10DIV ABMOV @R0,BINC R0MOV @R0,AINC R0RETDisplay: MOV R0,#bufferMOV A,secACALL HexToBCDMOV @R0,#10H ;第三位不显示INC R0MOV A,minACALL HexToBCDMOV @R0,#10H ;第六位不显示INC R0MOV A,hourACALL HexToBCDMOV R0,#bufferLCALL Display8RETENDEXTRN CODE (Display8)BUFFER DA TA 60HORG 0000HAJMP MAINORG 000BHAJMP IT0PMAIN: MOV TMOD,#01HMOV 20H,#20HCLR AMOV 52H,A ;计数和显示MOV 51H,A ;空间清零MOV 50H,#50HMOV 40H,AMOV 41H,AMOV 43H,AMOV 44H,AMOV 46H,AMOV 47H,ASETB ET0SETB EAMOV TH0,#9EH ;计数器赋初值MOV TL0,#58HSETB TR0MOV 45H,#11HMOV 42H,#11HMOV R0,#BUFFERLCALL Display8HERE: AJMP HEREIT0P: PUSH PSWPUSH ACCMOV TH0,#9EH ;重新转入计数值MOV TL0,#58HDJNZ 20H,RETURN ;计数不满20返回MOV 20H,#20H ;重置中断次数MOV A,#01H ;秒加1ADD A,50HDA A ;秒单元十进制调制PUSH ACCCJNE A,#60H,SWS ;是否到60秒, 否则返回MOV A,#00HSWS: MOV R5,ASW AP AANL A,#0FHMOV 41H,AMOV A,R5ANL A,#0FHMOV 40H,A ;满60秒, 秒单元清零LCALL AAAPOP ACCMOV 50H,ACJNE A,#60H,RETURNMOV 50H,#00HMOV A,#01H ;分单元加1ADD A,51H ;分单元十进制调整DA APUSH ACCCJNE A,#60H,SWS1;是否到60分, 否则返回MOV A,#00HSWS1: MOV R5,A·SW AP AANL A,#0FHMOV 44H,AMOV A,R5ANL A,#0FHMOV 43H,ALCALL AAAPOP ACCMOV 51H,ACJNE A,#60H,RETURNMOV 51H,#00H ;满60分, 分单元清零MOV A,#01H ;时单元加1ADD A,52HDA APUSH ACCCJNE A,#24H,SWS2 ;是否到24小时, 否则返回MOV A,#00HSWS2: MOV R5,ASW AP AANL A,#0FHMOV 47H,AMOV A,R5ANL A,#0FHMOV 46H,ALCALL AAAPOP ACCMOV 52H,ACJNE A,#24H,RETURNMOV 52H,#00H ;满24小时, 时单元清零RETURN:POP PSWPOP ACCRETIAAA: MOV R0,#40H ;计数器的值赋MOV R1,#60H ;给显示空间MOV R5,#08HABC: MOV A,@R0MOV @R1,AINC R1INC R0DJNZ R5,ABCMOV R0,#BUFFERLCALL Display8RETEND六、思考题1.电子钟走时精度与哪些有关系?中断程序中给TL0赋值为什么与初始化程序中不一样?2、使用定时器方式二, 重新编写程序。
时、分、秒计时器设计
一、任务及要求
用51单片机设计时、分、秒计时器,具体要求如下。
1、具有时、分、秒计时功能和8位数码管显示功能,显示格式为:“时-分-秒”;
2、用Proteus设计仿真电路进行结果仿真;
3、4人组成设计小组完成,小组成员有明确分工,1人负责总体方案设计及报告撰写,2人负责功能模块函数设计,1人负责仿真电路设计及调试。
4、完成程序设计、仿真电路设计、结果仿真。
5、本实验要求设计一个数字计时器,可以完成0分00秒~23小时59分59秒的计时功能,并在控制电路的作用下有开机清零。
6、指标要求:
①.显示时、分、秒。
②采用24小时制,小时计数器按“23翻00”规律计数。
.
③为了保证计时准确、稳定,由单片机的定时器来计时。
7、设计要求:
①画出电路原理图(或仿真电路图);
②元器件及参数选择;
③电路仿真与调试;
④连接实物图,并调试;
⑤写出报告,并做总结;
二、设计方案
1、总体设计方案(李文负责完成)
(说明总体设计方案构思、程序模块构成、仿真电路构成等内容,不少于300字))。
构思:实现时钟的设计,如果采用软件延时的方法来实现时钟,太耗cpu了,因此采用51
单片机的内部硬件资源来实现时钟,因此采用定时器来定时,由于单片机的最大定时的时间为65.536ms;但是我们要定时1s,为了方便,我们则选用定时器0工作方式1且定时50ms,然后在中断20次则有了1s,有了1s就好办了,分,时就好办了,只要在1秒的基础上加就可以实现时钟了,有了时,分,秒就要显示了,由于时,分,秒都是两位,因此要把个位与十位分离,然后在分别在数码管上显示,这样就实现时钟的设计。
程序模块:1、主函数:(调用初始化函数,调用显示函数)
2、显示函数:(延时函数,数码管显示代码)
3、中断服务函数:(时,分,秒的实现)
仿真电路构成:数字钟的结构组成:
1)晶体振荡器电路
2)复位电路
3)数码管使用非门驱动及数码管
具体:52单片机的最小系统(52单片机,晶振电路(12MHz晶振,和30pF的无极性电容),复位电路(10k电阻,10uf极性电容,开关)),外加八位一体的数码管,数码管驱动电路;
2、显示模块程序流程图(赵宝龙负责完成):
(程序流程图及简单文字说明)(见附录);
3、中断服务函数模块程序流程图(肖广负责完成):
(程序流程图及简单文字说明)(见附录);
4、主函数模块的设计(李文负责)(见附录);
5、仿真电路设计(黄涛负责完成)
(仿真电路图)
三、程序代码:
/*
功能:用共阴的八位一体的数码管显示时间“小时-分钟-秒”
位码接P2口;段码接P0口;使用定时器0定时1s,
*/
#include <reg51.h>//头文件
#define uchar unsigned char //宏定义
#define uint unsigned int //
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴七段编码uchar sec,min,hour,count;// 定义变量
void delay (uchar x)//延时1ms的函数
{
uchar z ,y;
for (y=x;y>0;y--)
for (z=124;z>0;z--);
}
void init (void)//初始化函数
{
TMOD=0X01;//定时器0工作在方式1
TH0=0X3C;//装初值
TL0=0XB0;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
sec=0; //秒设初值
min=0; //分设初值
hour=0;//时设初值
count=0; //计数设初值
P0=0xff; //
P2=0xff; //
}
void display ()//显示函数
{
uchar sec1,sec2,min1,min2,hour1,hour2;//定义变量
sec1= sec/10; //秒的十位
sec2= sec%10; //秒的个位
min1= min/10; //分的十位
min2= min%10; //分的个位
hour1= hour/10;//时的十位
hour2= hour%10;//时的个位
P2= 0x80; //秒个位的位码
P0= table[sec2]; //秒个位的段码
delay(5);
P2= 0x40; //秒十位的位码
P0= table[sec1]; //秒十位的段码
delay(5);
P2= 0x20; //“-”的位码
P0= 0x40; //“-”的段码
delay(5);
P2= 0x10; //分十位的位码
P0= table[min1];//分十位的段码
delay(5);
P2= 0x08; //分个位的位码
P0= table[min2];//分个位的段码
delay(5);
P2= 0x04; //“-”的位码
P0= 0x40; //“-”的段码
delay(5);
P2= 0x02; //时个位的位码
P0= table[hour2];//时个位的段码
delay(5);
P2= 0x01; //时的十位的段码
P0= table[hour1];//时的十位的段码
delay(5);
}
void main()
{
init(); //初始化函数
while(1)
{
display(); //时间显示函数
}
}
void time() interrupt 1 //中断服务函数
{
TH0=0X3C; //重装初值
TL0=0XB0;
if(count==20) //定时一秒
{
count=0; //计数清零
if(sec==59) //秒计时到60秒
{
sec=0; //秒清零
if(min==59) //分计时到60秒
{
min=0; //分清零
if(hour==23) //小时计数到24
{
hour=0;//小时清零
}
else hour++; //小时加一
}
else min++; //分加一
}
else sec++; //秒加一
}
count++; //计数加一
}
五、设计总结
单片机作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。
在做的过程中能够发现很多的问题,只有自己亲身去做了就会遇到你在书上所没有的,并且你要一个又一个的解决,这个有点难,要找到自己的错误在哪里,这还真的难,有时候自己的错误自己很难的看出来,我就一个main 写错了,我找了半天还没找问题在哪里,表面看是看不出的,因为我只是a与i 对调了一下,害的我搞了半天才查出来,这个无形的,编译是不会出错,只是一个警告,但是下载单片机里就是不出现结果,改了之后就ok了,在写程序的时候大小写特别要注意的,还有程序的结构清楚明了,最后还是完成任务。
在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。
另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,在我们遇到问题时,我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题自己能解决了。
发现、提出、分析、解决问题都会受益于我在以后的学习、工作和生活中。
常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力。
附录:
初始化函数流程图:显示函数流程图:
主函数的程序流程图: 中断服务函数:。