单片机数字钟实训报告
数字钟实习报告总结

实习报告总结:数字钟设计与实现一、实习背景与目的随着现代电子技术的快速发展,数字钟作为一种常见的电子设备,已经被广泛应用于日常生活和工业领域。
本次实习的主要目的是学习和掌握数字钟的设计与实现方法,培养自己的实际动手能力和创新思维能力。
二、实习内容与过程1. 数字钟的设计原理在实习初期,我首先学习了数字钟的设计原理,包括数字电路的基本组成、时钟信号的产生与处理、显示电路的设计等。
通过学习,我了解了数字钟的工作原理和设计思路,为后续的实际操作奠定了基础。
2. 硬件设计在硬件设计方面,我选择了常用的微控制器AT89S52作为数字钟的控制核心。
通过编程,实现了时钟信号的产生、分秒的计数和显示等功能。
同时,我还设计了按键输入电路,以便进行时间设置和调整。
3. 软件编程在软件编程方面,我使用了C语言进行编程。
通过编写程序,实现了数字钟的计时、显示等功能。
在程序设计过程中,我充分运用了所学的算法和编程技巧,提高了自己的编程能力。
4. 系统调试与优化在系统调试阶段,我通过不断测试和调整,发现并解决了数字钟运行中出现的问题。
同时,我对程序进行了优化,提高了数字钟的运行效率和稳定性。
三、实习收获与总结通过本次实习,我收获颇丰。
首先,我掌握了数字钟的设计原理和实现方法,为自己的实际工作积累了宝贵的经验。
其次,我在硬件设计和软件编程方面提高了自己的实际动手能力,为今后的职业发展打下了基础。
最后,我在实习过程中培养了团队协作意识和创新思维能力,对自己的人生发展具有积极意义。
同时,我也认识到自己在本次实习中存在的不足。
例如,在硬件焊接和调试过程中,我对一些细节处理不够到位,导致数字钟运行不稳定。
在今后的工作中,我将更加注重细节,提高自己的动手能力。
总之,本次实习使我受益匪浅。
通过学习和实践,我掌握了数字钟的设计与实现方法,提高了自己的实际动手能力和创新思维能力。
在今后的学习和工作中,我将继续努力,不断提高自己,为实现自己的职业目标奋斗。
关于单片机实训报告万能【六篇】

关于单片机实训报告万能【六篇】【篇1】单片机实训报告万能通过今次单片机实训,使我对单片机的认识有了更深刻的理解。
系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。
由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。
例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。
踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。
当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
但在这次实训中同时使我对汇编语言有了更深的认识。
当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。
这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。
这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。
希望这次的经历能让我在以后学习中激励我继续进步。
【篇2】单片机实训报告万能通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。
了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。
LED显示器:LED显示器是由发光二管组成显示字段的器件。
通常的8段LED显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。
有段选码和和位选码。
当LED显示器每段的平均电流位5MA时,就有较满意的亮度,一般选择断码5-10MA 电流;位线的电流应选择40-80MA。
LED显示器的显示方式有动态和静态两种。
7289A芯片是具有SPI串行接口功能的显示键盘控制芯片,它可同时取得8位共阴极数码管和64个键的键盘矩阵。
基于单片机的数字时钟设计实训报告

摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(3个2位共阳数码管,一个发光二极管和一个蜂鸣器)和应用程序(proteus软件和KEIL编译软件),构成相应的应用系统。
关键词:单片机AT89C51 共阳数码管发光二极管蜂鸣器 proteus软件 KEIL编译软件目录1.课题设计目的 (4)2. AT89C51的单片机简介 (4)2.1 LED显示电路 (7)2.2键盘控制电路 (7)3.课程设计报告内容 (8)3.1.方案设计要求 (8)3.2系统设计流程图 (8)3.3绘制数字时钟电路Protues仿真原理图 (9)3.4运行程序 (10)4.总结 (10)5.数字时钟源程序............ 10-19数字时钟设计1. 课题设计目的数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89C51芯片和3个两位一体的共阳极的数码管为核心,辅以必要的电路,构成了一个单片机数字时钟。
2. AT89C51的单片机简介(一)AT89C51的介绍AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O接口电路等一台计算机所需要的基本功能部件,AT89C51单片机内包含下列几个部件:(1)一个8位CPU;(2)一个片内振荡器及时钟电路;(3)4K字节ROM程序存储器;(4)128字节RAM数据存储器;(5)两个16位定时器/计数器;(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;(7)32条可编程的I/O线(四个8位并行I/O端口);(8)一个可编程全双工串行口;(9)具有五个中断源、两个优先级嵌套中断结构。
单片机设计数字钟实验报告

单片机实验报告——数字钟设计班级:学号:姓名:时间:一.实验目的1、进一步熟悉C的语法知识和keil环境;2、熟练掌握一些常用算法;3、熟悉keil的编写、下载、调试过程;4、了解单片机的工作原理和电路图;5、熟悉单片机的外围电路功能模块、LED灯、数码管模块以及键盘;6、熟练焊接技术。
二.实验器件三.数字钟设计原理数字钟实际是对标准频率计数的电路,由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的时间信号必须做到准确稳定。
通常使用石英晶体振荡电路构成数字钟。
数字钟电子钟由以下几部分组成:按键开关部分,振荡电路部分,89c51单片机控制器,4位数码管显示部分,7407数码管驱动部分。
按键开关振荡电路89C51单片机控制器4位数码管显示7407列驱动四.流程图主程序流程图如图2.3所示,定时器T0中断服务程序流程图如2.4所示。
返回五.51单片机系统的硬件连接1、STC单片机最小系统硬件电路图如下2、硬件电路的设计该电路采用AT89C51单片机最小化应用,采用共阴7段LED数码管显示器,P2.4~P2.7口作为列扫描输出,P0口输出段码数据,P1.2,P1.1口接2个按钮开关,用于调时及功能误差,采用12Mhz晶振,可提高秒计时的精确度。
六.程序设计HOUR EQU 3AH ;赋值伪指令MIN EQU 3BHSEC EQU 3CHBUFF EQU 3DHORG 0000HAJMP MAINORG 000BH ;主程序入口AJMP PTF0ORG 0033H ;跳转到标号PTF0执行;**************************************************************;主程序MAIN: MOV HOUR, #00H ;时,分,秒,标记清零MOV MIN, #00HMOV SEC, #00HMOV BUFF, #00HMOV SP, #0EFH ;设堆栈指针MOV TH0, #0ECH ;定时器赋初值MOV TL0, #78HMOV 40H, #100 ;设循环次数MOV 41H, #2MOV TMOD , #1 ;写TMODMOV IP, #2 ;写IPMOV IE, #82HMOV R5,#0;开中断SETB TR0 ;启动定时器PTF0: SETB P1.2MOV TH0, #0ECHMOV TL0, #78HINC R5MOV R6,BUFFCJNE R6,#00H,BBMOV DPTR,#TAB1LJMP LOOP0BB:MOV DPTR,#TABLOOP0: CJNE R5,#1,LOOP1ACALL LOP0AJMP JKLOOP1:CJNE R5,#2,LOOP2ACALL LOP1AJMP JKLOOP2:CJNE R5,#3,LOOP3ACALL LOP2AJMP JKLOOP3:ACALL LOP3MOV R5,#0JK: DJNZ 40H, PTFORXRL BUFF, #0FFHMOV 40H, #100JNB P1.1, JFJNB P1.2, JSMOV R7, 41HCJNE R7, #1, AAAA: DJNZ 41H, PTFORMOV 41H,#2MOV A, SEC ;秒加1ADD A, #1DA AMOV SEC, ACJNE A, #60H, PTFORMOV SEC, #0 ;秒清零JF: MOV A, MIN ;分加1ADD A, #1DA AMOV MIN, ACJNE A, #60H,PTFORMOV MIN, #0 ; 分清零ACALL LEDJS: MOV A,HOURADD A,#1DA AMOV HOUR,A ;时加1CJNE A, #24H,PTFOR ;时加到24时否?是,清零MOV HOUR, #0PTFOR:RETILOP0: MOV A, MIN ;显示分钟的个位ANL A, #0FHMOVC A, @A+DPTRMOV P0,AMOV P2,#0F0HCLR P2.4CLR P0.4RETLOP1:MOV A, MIN ;显示分钟的十位SWAP AANL A, #0FHMOVC A, @A+DPTRMOV P0, AMOV P2, #0F0HCLR P2.5CLR P0.4RETLOP2: MOV A, HOUR ;显示时钟的个位ANL A, #0FHMOVC A, @A+DPTRMOV P0, AMOV P2, #0F0HCLR P2.6RETLOP3:MOV A, HOUR ;显示时钟的十位SWAP AANL A, #0FHMOVC A, @A+DPTRMOV P0, AMOV P2, #0F0HCLR P2.7CLR P0.4RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;不带小数点的字型码TAB1:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;带小数点的字型码END七.系统调试及结果分析硬件调试硬件电路板中器件连接好后,先用万用表测试电路中有无虚焊短接之处,测试无误后,将板子通电,进行静态调试。
单片机时钟显示实训报告

一、实训背景随着科技的不断发展,单片机技术得到了广泛应用。
单片机具有体积小、成本低、功能强大等特点,因此在电子设备中得到了广泛的应用。
本实训旨在通过设计一个基于单片机的时钟显示系统,让学生了解单片机的原理、编程方法和接口电路设计,提高学生的实践能力和创新意识。
二、实训目的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)将编写好的程序烧录到单片机中。
单片机数字时钟实验报告

数字时钟实验报告一、实验目的:通过实验进一步深刻理解单片机最小系统的工作原理。
着重掌握中断和定时器的使用,以及读键盘和LED显示程序的设计(具体设计在后面会涉及到)。
培养动手能力。
二、实验内容:使用单片机最小系统设计一个12小时制自动报时的数字时钟。
三、功能描述:★使用低六位数码管显示时、分、秒、使用第七位表示上午和下午。
符号A表示上午;符号P表示下午。
★通过按键分别调整小时位和分钟位。
★到达整点时以第八位数码管闪烁的方式报时,使用8作为显示内容。
★考虑整点报时功能。
四、设计整体思路以及个别重点部分的具体实现方式:下面这幅图展示主函数的流程下面描述的是调用T0中断时所进行的动作显示更新的函数具体见下面这幅图我们还一个对键盘进行扫描以获得有效键盘值,其具体的实现见下面这幅图● 要实现时钟的运行和时间的调整,我的设计思路是这样的:由于T0中断的时间间隔是4ms,那么我可以设置一个计数器i,在每次进入中断时进行加一调整,当i计满面250时就将时钟我秒的低位加一。
然后根据进位规则,对其后的各位依次进行调整。
●要实现整点报时功能,则可以根据时位是否为0判断是否要闪烁显示字符8。
至于闪烁的具体实现方式,见源程序。
至此,本实验的设计思路己基本介绍完毕。
下面就是本次实验的源程序代码。
/*********************************************************//** 数字时钟程序**//** **//*********************************************************/#include <absacc.h>#include <reg51.h>#define uchar unsigned char#define uint8 unsigned char#define uint16 unsigned int#define LED1 XBYTE [0xA000] //数码管地址#define LED2 XBYTE [0xA001]#define LED3 XBYTE [0xA002]#define LED4 XBYTE [0xA003]#define LED5 XBYTE [0xA004]#define LED6 XBYTE [0xA005]#define LED7 XBYTE [0xA006]#define LED8 XBYTE [0xA007]#define KEY XBYTE [0xA100] //键盘地址bit ap=0;//上下午int i=0;//计数器uchar data clock[7]={0,0,0,0,0,0,0};/*扫描键盘使用的变量 */sbit first_row = P1^4; //键盘第一行控制sbit second_row = P1^3; //键盘第二行控制bit first_getkey = 0,control_readkey = 0; //读键盘过程中的标志位bit getkey = 0; //获得有效键值标志位等于1时代表得到一个有效键值bit keyon = 0; //防止按键冲突标志位uchar keynum = 0; //获得的有效按键值寄存器/*数码管显示使用的变量和常量*/uchar lednum = 0; //数码管显示位控制寄存器uchar led[8] = {0,0,0,0,0,0,0,0}; //数码管显示内容寄存器uchar code segtab[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xff}; //七段码段码表// "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D","E", "F", "P" ,"black"void leddisp(void); //数码管显示函数void readkey(void); //读键盘函数void intT0() interrupt 1 //T0 定时中断处理函数{TH0 = -2720/256; //定时器中断时间间隔 4msTL0 = -2720%256;if((clock[2]==0)&&(clock[3]==0)&&(i==125)&&(clock[5]<=5)&&(clock[4]==0))led[7]=17;if((clock[2]==0)&&(clock[3]==0)&&(i==0)&&(clock[5]<=5)&&(clock[4]==0))led[7]=8;i=i+1;if(i==250){if((clock[2]==0)&&(clock[3]==0)&&(clock[4]==0)&&(clock[5]==0)&&(clock[6]==0)){ap=!ap;if(ap==0)led[6]=10;if(ap==1)led[6]=16;}clock[5]=clock[5]+1;i=0;}if(clock[5]==10){clock[5]=0;clock[4]=clock[4]+1;}if(clock[4]==6){clock[4]=0;clock[3]=clock[3]+1;}if(clock[3]==10){clock[3]=0;clock[2]=clock[2]+1;}if(clock[2]==6){clock[2]=0;clock[6]=clock[6]+1;}if(clock[6]==12){clock[6]=0;}clock[0]=clock[6]/10;clock[1]=clock[6]%10;led[5]=clock[0];led[4]=clock[1];led[3]=clock[2];led[2]=clock[3];led[1]=clock[4];led[0]=clock[5];leddisp(); //每次定时中断显示更新一次if(control_readkey == 1) //每两次定时中断扫描一次键盘{readkey();}c ontrol_readkey = !control_readkey;}void main(void){TMOD = 0x01; //TH0 = -2720/256; //定时器中断时间间隔 4msTL0 = -2720%256;TCON = 0x10;ET0 = 1;EA = 1;while(1){if(getkey == 1) //判断是否获得有效按键{getkey = 0;switch(keynum) //判断键值,对不同键值采取相应的用户定义处理方式{case 0x01: //当按下第一行第二列键时,分加一clock[3]=clock[3]+1;break;case 0x02: ////当按下第一行的第三列键时,分减一clock[3]=clock[3]-1;break;case 0x03://当按下第一行的第四列时,时加一clock[6]=clock[6]+1;break;case 0x04:clock[6]=clock[6]-1; //当按下第一行的第五列时,时减一break;default:break;}}}}/***************************************************键盘扫描函数原型: void readkey(void);功能: 当获得有效按键时,令getkey=1,keynum为按键值****************************************************/void readkey(void){uchar M_key = 0;second_row = 0;M_key = KEY;if(M_key != 0xff) //如果有连续两次按键按下,认为有有效按键按下。
单片机实训报告_数字时钟

单片机实训报告——数字时钟成员:金龙:2王利伟:6许林鹏: 9春波:0袁增莘:1指导老师:翡12电气自动化一班2013.12.23—12.29目录一、设计目的 (2)二、设计要求 (2)2.1显示要求 (2)2.2校准要求 (2)2.3选型要求 (2)三、硬件设计 (3)3.1L E D电路图 (3)3.2电路图分析 (4)3.3键盘功能 (4)四、程序设计 (5)4.1程序流程图 (5)4.2程序 (6)课题:数字时钟一、设计目的:通过实训周学会制作数码管显示时、分、秒的数字可调时钟,近一步熟练掌握编程语言的应用。
二、设计要求:2.1显示要求:时钟要求用8位数码管显示,以数字形式显示时、分、秒的时间。
且从右端始八位数码管依次显示①秒个位②秒十位③横杠“—”④分个位⑤分十位⑥横杠“—”⑦时个位⑧时十位2.2校准要求:时钟要求计时准确,同时要求有校准时间的电路,且以按键校准。
2.3选型要求:设计单片机选型以STC89C51RC-RD+系列为基础三、硬件设计:3.1、LED电路图3.2电路图分析本次课题是利用51单片机进行设计。
Led灯是由低电平点亮的,led位的选择是由单片机中的p2口控制的。
*键盘是采用独立式按键:K1是p3.0;K2是p3.1;K3是p3.2:K4是p3.3;3.3键盘功能K1, 是对时钟调整或调整后进行确定的选择键。
K2,是对选中位置后对其进行加。
K3,是对选中位置后对其进行减。
K4,是进行时分秒的选择位的操作。
四、程序设计4.1程序流程图#include <reg51.h>unsigned char shig , shish , fensh ,feng ,miaosh ,miaog;unsigned char shi, fen ,miao,k=0,n=0;sbit k1=P3^0; sbit k2=P3^1; sbit k3=P3^2; sbit k4=P3^3;unsigned char codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void tt0( ) interrupt 1{ TH0=15536/256;TL0=15536%256;n=n+1;if(n==20){ n=0;miao=miao+1;if(miao==60){ miao=0;fen=fen+1;if(fen==60){ fen=0;shi=shi+1;if(shi==24){ shi=0;}}}}}void delay(int ms){ int i,j;for(i=0;i<ms;i++)for(j=0;j<110;j++);}void display(){ shish=shi/10; shig=shi%10;fensh=fen/10; feng=fen%10;miaosh=miao/10; miaog=miao%10;P0=0; P2=0; P0=table[shish]; delay(1);P0=0; P2=1; P0=table[shig]; delay(1);P0=0; P2=2; P0=0x40; delay(1);P0=0; P2=3; P0=table[fensh]; delay(1);P0=0; P2=4; P0=table[feng]; delay(1);P0=0; P2=5; P0=0x40; delay(1);P0=0; P2=6; P0=table[miaosh]; delay(1);P0=0; P2=7; P0=table[miaog]; delay(1); }void displaysh(char w){ k=k+1; if(k==101)k=0;shish=shi/10; shig=shi%10;fensh=fen/10; feng=fen%10;miaosh=miao/10; miaog=miao%10;if(w!=2||k<=50){ P0=0; P2=0; P0=table[shish] ; delay(1);P0=0; P2=1; P0=table[shig]; delay(1); }P0=0; P2=2; P0=0x40; delay(1);if(w!=1||k<=50){ P0=0; P2=3; P0=table[fensh]; delay(1);P0=0; P2=4; P0=table[feng]; delay(1); }P0=0; P2=5; P0=0x40; delay(1);if(w!=0||k<=50){ P0=0; P2=6; P0=table[miaosh]; delay(1);P0=0; P2=7; P0=table[miaog]; delay(1); }}void main(){ char shan=0,flage=0;TMOD=0X01; TH0=15536/256; TL0=15536%256;IP=0; IE=0X82; TR0=1;while(1){ while(flage==0){ display();k1=1;if(k1==0){ delay(10);k1=1;if(k1==0){ TR0=0; flage=1;}}while(k1==0)displaysh(shan); }while(flage==1){ displaysh(shan);k4=1;if(k4==0){ delay(10);k4=1;if(k4==0){ shan=shan+1;if(shan==3)shan=0;}}while(k4==0)displaysh(shan);k2=1;if(k2==0 ){ delay(10);k2=1;if(k2==0){ if(shan==0){ miao=miao+1;if(miao==60)miao=0;}if(shan==1){fen=fen+1; if(fen==60)fen=0; }if(shan==2){shi=shi+1; if(shi==24)shi=0;} }}while(k2==0)displaysh(shan);k3=1;if(k3==0){ delay(10);k3=1;if(k3==0){ if(shan==0){miao=miao-1; if(miao==255)miao=59; }if(shan==1){fen=fen-1; if(fen==255)fen=59; }if(shan==2){shi=shi-1; if(shi==255)shi=23; }}}while(k3==0)displaysh(shan);k1=1;if(k1==0){ delay(10);k1=1;if(k1==0){ TR0=1;flage=0;}}while(k1==0)display();}}}。
单片机数字钟实习报告

一、实习目的随着电子技术的飞速发展,单片机作为一种重要的电子元件,在工业、医疗、通讯等领域得到了广泛的应用。
为了更好地掌握单片机的原理和应用,提高动手能力,我们选择了单片机数字钟作为实习项目。
通过本次实习,我们旨在掌握单片机的编程、调试、硬件连接等方面的知识,实现数字时钟的显示与控制。
二、实习内容1. 单片机数字钟硬件设计(1)选用AT89C51单片机作为核心控制单元,具有丰富的片上资源,方便编程和调试。
(2)采用LCD1602液晶显示屏,显示时间、日期等信息。
(3)使用DS1302实时时钟芯片,实现时间的存储和更新。
(4)选用按键作为输入设备,实现时间的调整和设置。
(5)选用蜂鸣器作为报警设备,实现定时报警功能。
2. 单片机数字钟软件设计(1)编写主程序,实现系统初始化、时间显示、按键扫描、时间调整等功能。
(2)编写中断服务程序,实现DS1302时钟芯片的读写、按键消抖等功能。
(3)编写子程序,实现时间的计算、格式化、显示等功能。
3. 单片机数字钟调试与测试(1)连接电路,检查各个模块的连接是否正确。
(2)编写程序,将程序烧录到单片机中。
(3)调试程序,确保程序运行正常。
(4)测试各个功能模块,如时间显示、按键调整、定时报警等。
三、实习过程1. 硬件设计(1)根据设计要求,绘制电路原理图。
(2)购买所需元器件,进行焊接。
(3)组装电路板,连接各个模块。
2. 软件设计(1)编写程序,采用C语言进行编程。
(2)使用Keil软件进行编译、烧录。
(3)在仿真软件Proteus中进行仿真,验证程序的正确性。
3. 调试与测试(1)连接电路,检查各个模块的连接是否正确。
(2)编写程序,将程序烧录到单片机中。
(3)调试程序,确保程序运行正常。
(4)测试各个功能模块,如时间显示、按键调整、定时报警等。
四、实习总结1. 通过本次实习,我们掌握了单片机的编程、调试、硬件连接等方面的知识。
2. 学会了使用LCD1602液晶显示屏、DS1302实时时钟芯片、按键等元器件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机数字钟实训报告
学院:电子工程学院
专业:机电一体化
班级:
姓名:
手机号:
一、任务及要求
用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了,在写程序的时候大小写特别要注意的,还有程序的结构清楚明了,最后还是完成任务。
在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。
另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,在我们遇到问题时,我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题自己能解决了。
发现、提出、分析、解决问题都会受益于我在以后的学习、工作和生活中。
常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力。