单片机电子时钟课程设计实验报告
单片机电子时钟实验报告

单片机电子时钟实验报告一、实验任务及要求在焊接的电路板中,4个LED数码管,设计带有闹铃功能的数字时钟,要求:1、在4位数码管上显示当前时间。
显示格式“时时分分”;2、由LED闪动做秒显示;3、利用按键可对时间及闹玲进行设置,并可显示闹玲时间。
当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。
二、方案论证与比较2.1数字时钟方案数字时钟是本设计的最主要的部分。
根据需要,可利用两种方案实现。
方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。
该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。
而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:本方案完全用软件实现数字时钟。
原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现5毫秒定时中断,每产生一次中断,存储器内相应的计数值加1;若计数值达到200,则将其清零,并将方案一:静态显示。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一位都需要一个8 位输出口控制。
静态显示时较小的电流能获得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
方案二:动态显示。
所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度合适,字符才不闪烁。
显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。
调整参数可以实现较高稳定度的显示。
动态显示节省了I/O 口,降低了能耗。
(2023)单片机电子时钟课程设计报告2(一)

(2023)单片机电子时钟课程设计报告2(一)(2023)单片机电子时钟课程设计报告2项目简介本项目是一款基于单片机的电子时钟,具有时间显示、闹钟、定时等功能。
主要硬件为STC89C52单片机和LCD12864液晶显示屏。
硬件设计•CPU:STC89C52单片机•显示屏:LCD12864液晶显示屏•晶振:11.0592MHZ•动态RAM:24C02 EEPROM•按键:4个,分别为模式切换、时间调整、闹钟调整、确定键•电源:220V AC/9V DC电源适配器软件设计主要功能模块•时间显示:采用DS1302时钟芯片定时,单片机通过SPI通讯读取当前时间,并在液晶屏上显示。
•闹钟:通过按键调整,设置闹钟时间,并在设定时间响铃。
•定时:通过按键调整,设置定时时间,在设定时间完成特定操作(如开关灯、控制电器等)。
软件工具•Keil uVision5:C语言编程软件•Proteus 8:电路仿真软件实现效果经过测试,本项目能够准确地显示时间,并能够响应用户的设定,完成指定的功能要求。
同时,通过调整代码和电路连接方式,还可以实现更多功能的扩展,如调整亮度、自定义显示内容等。
总结本项目完成了基于单片机的电子时钟设计,实现了时间显示、闹钟、定时等功能,并且实现效果稳定可靠。
在项目中,我们不仅掌握了单片机的基本原理和编程技能,还提高了对电路设计和仿真的操作能力,是一次非常有益的学习和实践。
改进方向在项目完善过程中,可以考虑以下方向进行改进:•加入天气显示功能,通过网络或传感器获取当地天气信息,与时间一起显示。
•优化UI界面,考虑加入图像、背光等元素,提升用户体验。
•采用更高性能的单片机,提升系统稳定性和响应速度。
总体评价本项目难度适中,能够较全面地考察学生在单片机原理、编程能力和电路设计等方面的知识掌握程度,是一次有益的实践。
同时,项目具有一定的功能性和实用性,能够满足用户的基本需求。
因此,本项目是一次成功的课程设计。
单片机实验报告数字时钟设计报告

单片机实验报告数字时钟设计报告一、实验目的本次单片机实验的目的是设计并实现一个基于单片机的数字时钟。
通过该实验,深入了解单片机的工作原理和编程方法,掌握定时器、中断、数码管显示等功能的应用,提高综合运用知识解决实际问题的能力。
二、实验原理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、实验结果将程序下载到单片机后,数字时钟能够正常运行,准确显示时、分、秒,并且通过按键可以进行时间的调整。
单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
单片机设计时钟实训报告

一、引言随着科技的不断发展,单片机技术在电子领域得到了广泛的应用。
为了提高学生的实践能力,培养实际工程应用能力,我们进行了单片机设计时钟实训。
本实训以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)将优化后的程序烧录到单片机中,进行实际运行测试。
单片机电子时钟课程设计报告

单片机电子时钟课程设计报告一、设计目的。
本课程设计旨在通过单片机技术的应用,设计并制作一个简单的电子时钟。
通过这一设计,学生将能够掌握单片机的基本原理和应用,培养学生的动手能力和创新意识,提高学生的实际操作能力。
二、设计原理。
本电子时钟采用单片机作为控制核心,通过晶振产生的时钟信号来实现时间的计时和显示。
利用数码管来显示小时和分钟,通过按键来调整时间。
同时,通过蜂鸣器发出报时信号,实现基本的闹钟功能。
三、设计方案。
1. 硬件设计。
(1)单片机选择,本设计选用常见的51单片机作为控制核心,具有成本低、易于编程的特点。
(2)时钟电路,采用晶振作为时钟信号源,通过单片机的定时器来实现时间的计时。
(3)显示模块,采用数码管来显示小时和分钟,通过数码管的扫描显示来实现时间的动态显示。
(4)按键输入,设计按键来调整时间,包括调整小时和分钟。
(5)报时功能,通过蜂鸣器来实现基本的报时功能,可以设置闹钟时间。
2. 软件设计。
(1)时钟控制,通过单片机的定时器来实现时间的计时和更新。
(2)显示控制,设计数码管的扫描显示程序,实现时间的动态显示。
(3)按键处理,设计按键扫描程序,实现对时间的调整。
(4)报时功能,设计蜂鸣器的报时程序,实现基本的闹钟功能。
四、设计实现。
1. 硬件实现。
根据上述设计方案,完成了电子时钟的硬件连接和布线,保证各个模块之间的正常通讯和工作。
2. 软件实现。
编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。
五、实验结果。
经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。
六、总结与展望。
通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。
在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。
同时,也为学生今后的科研和创新工作奠定了良好的基础。
单片机电子时钟设计报告

电源模块的设计与实现
电源模块的选择
根据设计需求和预算,选择合适的电源模块。常用的电源模块包括线性电源和开 关电源。
电源管理的实现
为了延长电源使用寿命和确保时钟的准确性,需要设计合理的电源管理策略。这 可能包括电源开关控制、电压调节等。
03
单片机电子时钟硬件设计
单片机主控芯片的选择与连接
单片机主控芯片
时钟信号的产生
单片机内部通常有一个振荡器,用于 产生原始时钟信号。常用的振荡器类 型包括晶体振荡器和RC振荡器。
时钟信号的控制
为了确保时钟信号的稳定性和准确性 ,单片机内部通常包含一个时钟管理 器,用于对原始时钟信号进行分频、 倍频或校准。
显示模块的设计与实现
显示模块的选择
常用的显示模块包括LED数码管、 LCD液晶显示屏等。选择哪种显示模 块取决于设计需求和预算。
201 4
05
单片机电子时钟测试与验证
测试环境与测试工具的准备
测试环境
为确保单片机电子时钟的稳定运行,需搭建一个适宜的测试环境,包括电源、单片机开 发板、显示屏等必要设备。
测试工具
选用适当的测试工具,如万用表、示波器、逻辑分析仪等,用于检测和调试单片机电子 时钟的各项功能。
测试方案的设计与实施
选择一款适合的微控制器,如STM32F103C8T6,具有足够 的IO口和定时器资源,能够满足电子时钟的控制需求。
连接方式
将单片机主控芯片的电源、地线、复位电路等基本配置与电 源模块连接,同时将IO口与显示模块、数据存储模块等外围 设备连接。
时钟芯片的选择与连接
时钟芯片
选择一款高精度的实时时钟芯片,如DS1302,能够提供稳定的计时基准。
04
单片机电子钟实训报告

一、引言随着电子技术的不断发展,单片机在各个领域得到了广泛的应用。
电子钟作为单片机应用的一个重要实例,具有很高的实用价值。
本实训报告主要介绍了单片机电子钟的设计与实现过程,包括硬件电路设计、软件编程以及调试过程。
二、硬件电路设计1. 单片机选择本实训选用AT89C51单片机作为核心控制器,该单片机具有丰富的I/O端口、较强的计算能力和较大的存储空间,能够满足电子钟的设计需求。
2. 时钟芯片本实训采用DS1302时钟芯片作为时间源,该芯片具有年、月、日、周、时、分、秒的精确计时功能,并具备闰年补偿等功能。
3. 液晶显示屏本实训选用1602液晶显示屏用于显示时间、日期等信息。
1602液晶显示屏具有清晰显示多个字符和符号的特点,方便用户查看时间和其他信息。
4. 按键模块本实训设计按键模块用于用户输入和设置。
按键包括时间设置键、日期设置键、闹钟设置键等,方便用户进行各项操作。
5. 电源模块本实训采用DC5V电源模块,为整个电子钟提供稳定的电源供应。
三、软件编程1. 主程序主程序负责初始化单片机、时钟芯片、液晶显示屏等硬件设备,并进入主循环。
主循环中,程序会不断检测按键状态,根据按键输入调整时间、日期和闹钟设置。
2. 时钟控制程序时钟控制程序负责实现时钟的基本功能,包括计时、闰年补偿等。
程序通过定时器中断,每秒更新一次时间。
3. 显示程序显示程序负责将时间、日期等信息显示在液晶显示屏上。
程序使用1602液晶显示屏的指令集,动态显示时、分、秒和日期。
4. 按键扫描程序按键扫描程序负责检测按键状态,并根据按键输入调整时间、日期和闹钟设置。
程序采用轮询方式检测按键状态,以提高按键响应速度。
5. 闹钟程序闹钟程序负责实现闹钟功能,当时间达到设定的闹钟时间时,电子钟会发出蜂鸣声提示用户。
四、调试过程1. 硬件调试首先,对硬件电路进行调试,检查各元器件是否安装正确,连接是否牢固。
然后,使用万用表检测电源电压、单片机各引脚电压是否正常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机电子时钟课程设计实验报告Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】《单片机原理与应用》课程设计总结报告题目:单片机电子时钟(带秒表)的设计设计人员:张保江江润洲学号:班级:自动化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片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。
6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。
7)掌握硬件和软件联合调试的方法。
8)完成系统硬件电路的设计和制作。
9)完成系统程序的设计。
10)完成整个系统的设计、调试和制作。
11)完成课程设计报告。
基本要求1)实现最基本要求的1~10部分。
2)键盘输入可以控制电子时钟的走时/调试。
3)设计键盘输入电路和程序并调试。
4)掌握键盘和显示配合使用的方法和技巧。
提高发挥部分1)另设三个键,分别作小时、分、秒的减1调校。
2)在以上设计的基础上,修改程序制作一个电子秒表。
分、秒各占用2位显示,1/10秒、1/100秒各占用1位显示。
设定二个键分别作启动/停止、清零(清零应在停止后有效)。
3)在做完(2)后,将时钟与秒表合二为一,并且在同时使用时互不影响,即可在时钟与秒表之间任意切换,而不影响走时、计秒。
整体设计框图及整机概述整体设计框图整机概述1)开机为走时模式,正常显示时间。
在此模式下,时钟可调。
2)共设置7个按键,分别为模式键、功能键、加一键、减一键、复位键、秒表启动键、秒表复位键。
按动模式键,模式将在‘走时/调时/显示及秒表显示及调整’2个模式下切换。
3)在时钟模式下,功能键选择是正常走时,还是进入调试(时、分、秒)模式。
4)按动加一键可以将值(时、分、秒)加一。
5)按动减一键可以将值(时、分、秒)减一。
6)按动秒表中开始/暂停按键可以随时控制秒表的开始和停止。
7)按动秒表中清零按键时,秒表计的数就会被清除(只有在秒表停止了以后)。
8)按下复位键后,无论是任何状态都会从新开始。
9)开机时钟与闹钟都为00:00:00。
各硬件单元电路的设计、参数分析及原理说明电源电路元件有限没有制作电源电路部分。
使用9V的电池经过7805稳压后进行供电。
按键参考书本P232的键盘接口电路原理图,P3口(除去)接的是键盘按键。
当按键按下后,P3口被拉成低电平,给单片机一个信号,使单片机产生一个中断。
单片机再指令相应的P0口,P2口产生变化。
单片机最小系统参考实验指导书与课本及网络资料设计按键电平复位。
LED数码管首先P0口作为段码输出。
由于P0口输出级无上拉电阻,故需添加一排阻为其上拉电阻。
其次采用共阳极数码管。
段码端为低电平时导通LED,此时数码管向89S51芯片P0口灌电流,为防止芯片烧坏,还需加1个1 KΩ的限流电阻。
考虑到数码管的亮度问题,采用了PNP三极管做驱动电路。
基极接上1 KΩ电阻后再与P2口相连(~)进行位选。
发射极接5V电源,集电极接数码管位选。
软件流程图和流程说明软件流程图流程图说明初始化:包括定时器赋初值,初始化各内存单元。
开定时器中断,开CPU中断。
时间显示及调整子程序与秒表显示及调整子程序流程图与调时模式子程序大同小异。
需要100MS内无法进行其按键按下时显示亮度不降低)后最终想出来的办法。
最后在做完板,焊完电路后,在接通电源之前,要用万用表仔细检查电路是否有连接错,以免烧坏芯片和数码管。
设计课设的其他体会:态度要积极,不要认为很简单就不紧不慢。
很多东西并不是自己设想的那么顺利,有时候一个小问题可以花上你半天甚至一天的时间。
虽然自己在程序上并没遇到太大的问题,但是因为态度不够积极,对于没画过的PCB图迟迟不去下手,在周四晚上才解决。
本以为周五一天可以做完板并完成整机调试,可是各种突发事件让自己措手不及。
发现板来不及做完后才将程序功能进行扩展。
这是我在这次实验中的一个教训,也让我明白了对于自己不能太过于自信,态度决定一切。
图一:系统电路原理图图二:系统电路PCB在protues中调试的结果在开发板上实现的效果(见实物)在焊的PCB板子上效果(见实物)在protues里的仿真以及在开发板上实现和自己做实物所看到的现象是不一样的。
在protues里不用接三极管(NPN)就可以实现效果,但是在自己做板子的时候就不行了,因为51单片机的输出的电流不能驱动数码管发光,需要一个增加驱动的9014三极管。
另外,protues里的复位按键不起作用(软件里就是这样设计的)。
将在PCB上实现的程序用在开发板上又出现了问题,delay(3)这个延时子程序不合理,出现了闪烁的问题,所以将delay(3)改成了delay(1),这样问题就解决了。
我是将三极管加在了段选上,又加了限流电流,这样做数码管也能点亮。
另一方面,一样的程序用在不同的显示上,现象也是不一样的。
所以,我需要不断地修正定时器的装值。
TH1=(65536-49997)/256; //重装初值TL1=(65536-49997)%256;TH0=(65536-8000)/256;TL0=(65536-8000)%256;经过实际测量,这个数值是最合适的,一个小时一秒不差。
表一:元器件清单时钟程序源码# include <># define uchar unsigned char# define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbit led=P1^1; //指示灯sbit qiehuan_key=P3^7;//秒表和时钟模式切换按键sbit sp_key=P3^4; //秒表中开始/暂停按键sbit clf_key=P3^5; //秒表中清零按键sbit func_key=P3^1; //时钟换位按键(时、分、秒)sbit add_key=P3^2; //时钟加1按键sbit sub_key=P3^3; //时钟减1按键uchar k1_bit=0; //切换按键标志位uchar shi1,shi2,fen1,fen2,miao1,miao2,fen3,fen4,miao3,miao4,num9,num10; uint num1,num2,num3,num4,num5,num6,num7,num8,num11;void delay(uint xms) //延时函数{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void init() //中断初始化函数{EA=1; //开总中断TMOD=0X11; //定时器工作方式选择,定时器0和定时器1都选择第1种工作方式TH0=(65536-10000)/256; //定时器0装初值,定时10ms(用于秒表)TL0=(65536-10000)%256;ET0=1; //开定时器0开关TR0=0; //开定时器0小开关TH1=(65536-50000)/256; //定时器1装初值,定时50ms (用于时钟) TL1=(65536-50000)%256;ET1=1; //开定时器1开关TR1=1; //关定时器1小开关}void mode_key() //模式选择键,本程序两种模式,分别是时间显示、秒表。
当K1_bit为0时显示时钟,为1时进入秒表{if(qiehuan_key==0){delay(5);if(qiehuan_key==0){k1_bit++;if(k1_bit==2){k1_bit=0;}while(!qiehuan_key);}}}void display1(uchar shi1,uchar shi2,uchar fen1,uchar fen2,uchar miao1,uchar miao2) //显示时钟函数{shi1=num1/10;shi2=num1%10;fen1=num2/10;fen2=num2%10;miao1=num3/10;miao2=num3%10;P2=0xff;P0=table[shi1]; //第一位P2=0xfe;delay(3);P2=0xff;P0=table[shi2]; //第二位P2=0xfd;delay(3);P2=0xff;P0=0x40; // 第三位P2=0xfb;delay(3);P2=0xff;P0=table[fen1]; //第四位P2=0xf7;delay(3);P2=0xff;P0=table[fen2]; // 第五位P2=0xef;delay(3);P2=0xff;P0=0x40; // 第六位P2=0xdf;delay(3);P2=0xff;P0=table[miao1]; //第七位P2=0xbf;delay(3);P2=0xff;P0=table[miao2]; //第八位P2=0x7f;delay(3);P2=0xff;}void display0(uchar fen3,uchar fen4,uchar miao3,uchar miao4,uchar num9,uchar num10) //显示秒表函数{fen3=num8/10;fen4=num8%10;miao3=num7/10;miao4=num7%10;num9=num6;num10=num5;P2=0xff;P0=table[fen3]; //第一位P2=0xfe;delay(3);P2=0xff;P0=table[fen4]; //第二位P2=0xfd;delay(3);P2=0xff;P0=0x40; // 第三位P2=0xfb;delay(3);P2=0xff;P0=table[miao3]; //第四位P2=0xf7;delay(3);P2=0xff;P0=table[miao4]; // 第五位P2=0xef;delay(3);P2=0xff;P0=0x40; // 第六位P2=0xdf;delay(3);P2=0xff;P0=table[num9]; //第七位P2=0xbf;delay(3);P2=0xff;P0=table[num10]; //第八位P2=0x7f;delay(3);P2=0xff;}void key_miaobiao(){if(k1_bit==1){if(sp_key==0){delay(5);if(sp_key==0){TR0=~TR0;while(!sp_key)display0(fen3,fen4,miao3,miao4,num9,num10);}}if(TR0==0){led=0;if(clf_key==0){delay(5);if(clf_key==0){led=1;while(!clf_key){num5=num6=num7=num8=0;}}}}}}void keyscan() //时钟按键扫描{if(func_key==0){delay(5);if(func_key==0){led=0;num11++;while(!func_key);if(num11==1){TR1=0;}if(num11==2){TR1=1;}if(num11==3){TR1=1;}if(num11==4){num11=0;TR1=1;}}}if(num11!=0){if(add_key==0){delay(5);if(add_key==0){while(!add_key);if(num11==1){num3++;if(num3==60)num3=0;}if(num11==2){num2++;if(num2==60)num2=0;}if(num11==3){num1++;if(num1==24)num1=0;}}}if(sub_key==0){delay(5);if(sub_key==0){while(!sub_key);if(num11==1){num3--;if(num3==-1)num3=59;}if(num11==2){num2--;if(num2==-1)num2=59;}if(num11==3){num1--;if(num1==-1)num1=23;}}}}}void main(){init();led=0;while(1){mode_key();switch(k1_bit) //模式选择{case 0:{display1(shi1,shi2,fen1,fen2,miao1,miao2);//显示时间keyscan();break;}case 1:{display0(fen3,fen4,miao3,miao4,num9,num10);//显示秒表key_miaobiao(); //扫描秒表操作break;}}}}void Time1() interrupt 3 //定时器1函数(时钟){TH1=(65536-49997)/256; //重装初值TL1=(65536-49997)%256;num4++;if(num4==20){num4=0;num3++;if(num3==60) //秒针{num3=0;num2++;if(num2==60) //分针{num2=0;num1++;if(num1==24) //时针num1=0;}}}}void Time0() interrupt 1 //定时器0函数(秒表) {TH0=(65536-8000)/256; //重装初值TL0=(65536-8000)%256;num5++;if(num5==10){num5=0;num6++;if(num6==10){num6=0;num7++;if(num7==60){num7=0;num8++;if(num8==60){num8=0;}}}}}。