51单片机电子时钟课程设计实验报告
51单片机实验报告(共五则)

51单片机实验报告(共五则)第一篇:51单片机实验报告51单片机实验报告实验一点亮流水灯实验现象 Led灯交替亮,间隔大约10ms。
实验代码#include 〈reg51、h> void Delay10ms(unsigned int c);voidmain(){)1(elihwﻩ{ ﻩP0= 0x00;Delay10ms(50);;ffx0 =0Pﻩﻩ;)05(sm01yaleDﻩ } } void Delay10ms(unsigned int c){unsigned char a,b;for(;c>0;c-—){)——b;0〉b;83=b(rofﻩ{ ﻩﻩfor(a=130;a〉0;a--);}ﻩﻩ}} 实验原理W W hi i le(1)表示一直循环。
循环体内首先将P0 得所有位都置于零,然后延时约5 5 0*10=500ms,接着 0 P0 位全置于 1 1,于就是 D LED 全亮了。
接着循环,直至关掉电源..延迟函数就是通过多个for r 循环实现得。
实验 2 流水灯(不运用库函数)实验现象起初 led 只有最右面得那一个不亮,半秒之后从右数第二个led也不亮了,直到最后一个也熄灭,然后 led 除最后一个都亮,接着上述过程 #includemain(){unsigned char LED;LED = 0xfe;while(1){ ﻩ;DEL = 0PﻩDelay10ms(50);00x0 == 0P(fiﻩ {;1〈〈 DEL = DELﻩ)ﻩ;efx0 = DELﻩ} ﻩ}ﻩ} void Delay10ms(unsigned int c){unsigned char a,b;for(;c>0;c-—){)—-b;0〉b;83=b(rofﻩ{ ﻩﻩﻩ;)--a;0>a;031=a(rofﻩ} ﻩ} ﻩ} 实验原理这里运用了C语言中得位运算符, , 位运算符左移, , 初始值得二进制为1111 1 110, 之后左移一次变成1111 1 100 0,当变成00000 0000 时通过 f if 语句重置 1 1 11 1 11110、延迟函数在第一个报告已经说出了,不再多说..实验 3 流水灯(库函数版)实验现象最开始还就是最右边得一个不亮,然后不亮得灯转移到最右边得第二个,此时第一个恢复亮度,这样依次循环.实验代码#include 〈reg51、h> #include 〈intrins、h〉void Delay10ms(unsigned int c); void main(void){unsigned char LED;;EFx0 = DELﻩ)1(elihwﻩ{ ﻩP0 = LED;;)05(sm01yaleDﻩﻩ;)1,DEL(_lorc_ = DELﻩ} ﻩ} void Delay10ms(unsigned in t c){unsigned chara, b;for(;c〉0;c——){ ﻩfor(b=38;b〉0;b—-){ ﻩﻩ;)-—a;0〉a;031=a(rofﻩ} ﻩ}}实验原理利用头文件中得函数,_cro l_(,), 可以比位操作符更方便得进行 2 2 进制得移位操作, , 比位操作符优越得就是,该函数空位补全时都就是用那个移位移除得数据, , 由此比前一个例子不需要f if 语句重置操作..数码管实验实验现象单个数码管按顺序显示0-9与 A-F。
基于51的电子闹钟设计报告(附原理图、PCB图、程序)

基于51的电⼦闹钟设计报告(附原理图、PCB图、程序)成都信息⼯程学院第五届嵌⼊式创新技术⼤赛基于MCS51的智能电⼦闹钟设计报告姓名学院班级实物图⽬录1.电⼦时钟的设计原理和⽅法 (1)1.1设计原理 (1)1.2 硬件电路的设计 (1)1.2.1 STC89C51RC简介 (1)1.2.2 键盘电路的设计 (2)1.2.3蜂鸣器驱动电路 (3)1.2.4 数码管驱动电路 (3)1.2.5 电源电路 (4)1.3软件部分的设计 (4)1.3.1主程序部分的设计 (4)1.3.2中断计时器及时间进位 (5)1.3.3 闹钟⼦函数 (7)1.3.4 按键扫描 (8)1.3.5 时钟闹钟设置 (9)1.3.6 显⽰数字函数 (10)1.3.7 显⽰界⾯函数 (10)1.3.8 闹钟记录及读取 (11)2.硬件调试 (13)附录A:电路原理图 (15)附录B:电路PCB图 (16)附录C:源程序 (17)1.电⼦时钟的设计原理和⽅法1.1设计原理系统框图1.2硬件电路的设计1.2.1 STC89C51RC简介STC89C52R CSTC89C51RC是⼀种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory )的低电压、⾼性能CMOS8位微型处理器,即单⽚机芯⽚。
单⽚机的可擦除只读存储器可以反复擦除1000次,内部FLASH 擦写次数为100000次以上。
该芯⽚使⽤⾼密度⾮易失存储制造技术,与⼯业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU 和闪烁存储器集成在单个芯⽚中,使得STC89C51RC 成为了⼀种性价⽐极⾼的微型处理器芯⽚,在许多电路设计中都得到了应⽤。
STC89C51RC 单⽚机特点:⼯作电压:5.5V-3.4V ⼯作频率:0-40MHz ⽤户应⽤程序空间:8K ⽚上集成128*8RAMISP (在系统可编程)/IAP (在应⽤可编程),⽆需专⽤编程器/仿真器可通过串⼝(P3.0/P3.1)直接下载⽤户程序EEPROM 功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使⽤外部中断4路通⽤异步串⾏⼝(UART ),还可⽤定时器软件实现多个UART ⼯作温度范围:0-75℃引脚说明:VCC:供电电压 GND :接地P0:P0是⼀个8位漏级开路双向I/O ⼝,低8位地址复⽤总线端⼝。
51单片机电子时钟课程设计报告实验报告

《单片机原理与应用》课程设计总结报告题目:单片机电子时钟(带秒表)的设计设计人员:张保江江润洲学号:********** **********班级:自动化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片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。
C51单片机实验报告

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单片机程序。
单片机实验电子钟报告

实验四 电子钟(定时器、中断综合实验)一、实验目的熟悉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单片机电子时钟课程设计实验报告

《单片机原理与应用》课程设计总结报告题目:单片机电子时钟(带秒表)的设计设计人员:张保江江润洲学号: 13 29班级:自动化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片内定时器,采用定时中断结构,不得使用软件延时法,也不得使用其他时钟芯片。
基于51单片机多功能电子时钟课程设计报告

单片机课程设计报告多功能电子数字钟目录一课程设计题目-------------------------------- 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口。
因为单片机输出高电平时输出的电流不足以驱动蜂鸣器所以蜂鸣器,所以P3.7口与蜂鸣器直接接反相器再接蜂鸣器的一端,蜂鸣器的另一端接5V电源。
51单片机电子时钟设计报告

电子时钟实验报告全部代码在文档末尾:51 单片机,LCD1602 液晶显示屏平台下编程实现,可直接编译运行目录:一,实验目的. (1)二,实验要求. (2)三,实验基本原理. (2)四,实验设计分析. (2)五,实验要现. (3)A.电路设计 (3)1.整体设计 (3)2.分块设计 (4)输入部分 (4)输出部分 (5)晶振与复位电路 (6)B.程序设计 (6)程序总体设计 (6)程序主要模块 (7)五. 实验总结及感想 (7)一,实验目的20 世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。
对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以电子钟是以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,得到了广泛的使用。
1.学习8051定时器时间计时处理、按键扫描及LCD液晶显示的设计方法。
2.设计任务及要求利用实验平台上LCD1602液晶显示屏,设计带有闹铃功能的数字时钟二,实验要求A.基本要求:1.在LCD1602液晶显示屏上显示当前日期,时间。
2.利用按键可对时间及闹玲进行设置,并可显示设置闹玲的时间。
闹玲时间到蜂鸣器发出声响,一分钟后闹铃停止。
B.扩展部分:1.日历功能(能对年,月,日,星期进行显示,分辨平年,闰年以及各月天数,并调整)实现年月日时分秒的调整,星期准确的随着日期改变而改变进行显示。
2.定时功能(设定一段时间长度,定时到后,闹铃提示)C.可扩展部分:1.闹铃重响功能(闹铃被停止后,以停止时刻开始,一段时间后闹铃重响,且重响时间的间隔可调)2.可进行备忘录提示,按照年月日,可在设定的某年某月进行闹铃提示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机原理与应用》课程设计总结报告题目:单片机电子时钟(带秒表)的设计设计人员:张保江江润洲学号:2012197213 2012118029班级:自动化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.6)接的是键盘按键。
当按键按下后,P3口被拉成低电平,给单片机一个信号,使单片机产生一个中断。
单片机再指令相应的P0口,P2口产生变化。
单片机最小系统参考实验指导书与课本及网络资料设计按键电平复位。
LED数码管首先P0口作为段码输出。
由于P0口输出级无上拉电阻,故需添加一排阻为其上拉电阻。
其次采用共阳极数码管。
段码端为低电平时导通LED,此时数码管向89S51芯片P0口灌电流,为防止芯片烧坏,还需加1个1 KΩ的限流电阻。
考虑到数码管的亮度问题,采用了PNP 三极管做驱动电路。
基极接上1 KΩ电阻后再与P2口相连(P2.0~P2.5)进行位选。
发射极接5V电源,集电极接数码管位选。
软件流程图和流程说明软件流程图Array 1)主程序流程图流程图说明初始化:包括定时器赋初值,初始化各内存单元。
开定时器中断,开CPU中断。
时间显示及调整子程序与秒表显示及调整子程序流程图与调时模式子程序大同小异。
总结设计及调试体会硬件设计部分:首先要通过计算与参考资料等决定参数。
而后通过仿真软件等调试,确定参数无误后再开始用AD画原理图,进而生成PCB进行布板。
在焊板子的时候,也出现了问题,不小心将7805焊成了7905,结果又调试了一个时间。
软件设计部分:设计软件首先要考虑要做的功能,确定出合理的算法。
合理的算法不仅要可以实现功能,而且在添加功能的时候要方便灵活。
有的人为了实现某种功能用了各种各样的方法来实现,结果程序结构吃死,当想要添加功能或者修改其他功能的时候,将修改程序大部分结构,也就是说要破坏程序现有的结构。
关于调试:Keil软件调试单片机程序的时候,编译通过并不代表程序是正确的。
编译通过只能说明程序没有语法上的错误。
进行软件仿真或者下载到开发板上进行调试,经常会出现各种各样的错误。
许多超出预期效果的现象往往是一些微小错误引起的。
例如没有现场保护跟恢复现场等,所以养成良好的编程习惯也很重要。
有些想达成某些功能而添加的语句,实际上确一点效果也没有。
举个编程中的小问题:当有按键按下时,我们都要有软件防抖。
正常的方法是调用一个延时。
在实际调试中,要跳过这个抖动,需要100MS左右。
如果使用正常的延时,会导致按键按下时CPU100MS内无法进行其他操作,也就是说。
平均1S内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 <reg51.h># 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;}}}}}如有侵权请联系告知删除,感谢你们的配合!。