基于单片机的数字时钟设计 实训报告
基于单片机的数字时钟设计实训报告

摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善本次做的数字钟是以单片机(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七.系统调试及结果分析硬件调试硬件电路板中器件连接好后,先用万用表测试电路中有无虚焊短接之处,测试无误后,将板子通电,进行静态调试。
51单片机数字钟设计实习报告

51单片机数字钟设计实习报告目录一.设计方案: (3)二.设计内容: (3)三.相关总线及芯片介绍: (3)1.SPI总线: (3)2.74LS595芯片: (4)3. 实验箱电路图: (6)四.系统软件程序设计: (6)五.设计程序: (8)六.程序调试及显示: (11)七.实习心得: (12)八.参考文献: (13)一.设计方案:通过单片机内部的计数/定时器,采用软件编程来实现时钟计数,一般称为软时钟,这种方法的硬件线路简单,系统的功能一般与软件设计相关,通常用在对时间精度要求不高的场合。
二.设计内容:这里采用应用广泛的C51作为时钟控制芯片,利用单片机内部的定时/计数器T0 实现软时钟的目的。
首先将T0设定工作于定时方式,对机器周期计数形成基准时间(50ms),然后用另一个定时/计数器T1对基准时间计数形成秒,秒计60次形成分,分计60形成小时,小时计到12或者24。
通过外部中断实现12进制与24进制的切换。
最后通过数码管把它们的内容在相应的位置显示出来,达到时、分、秒计时的功能。
三.相关总线及芯片介绍:1.SPI总线:SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。
SPI 总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
由于SPI系统总线一共只需3~4位数据线和控制即可实现与具有SPI总线接口功能的各种I/O器件进行接口,而扩展并行总线则需要8根数据线、8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。
单片机数字时钟实验报告

数字时钟实验报告一、实验目的:通过实验进一步深刻理解单片机最小系统的工作原理。
着重掌握中断和定时器的使用,以及读键盘和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) //如果有连续两次按键按下,认为有有效按键按下。
单片机实验报告-数字时钟设计报告

单片机实验报告-数字时钟设计报告一、实验目的1、掌握单片机的主要原理及相关的功能和特点。
2、熟悉单片机测试与调试的一般步骤与操作。
3、掌握定时/计数功能在单片机系统中的实现方法。
4、领会单片机实验模块设计思想。
二、实验内容本次实验主要是利用STC89C52单片机实现数字时钟设计,实验从硬件电路组成和单片机编程两个部分来实现数字时钟的设计。
(1)硬件电路设计该系统的硬件电路设计主要包括PCB板的设计、电源的设置、单片机与外设的连接以及时钟芯片的接入。
利用Altium Designer软件来进行电路板设计,将STC89C52芯片与时钟模块(DS1302)以及屏幕连接,整个电路如图1所示。
图1 数字时钟使用STC89C52的电路图(2)单片机程序设计本实验使用keil软件对单片机程序进行编程,主要的部分如下:(2.1)定义单片机IO口首先定义单片机IO口,其定义方式如下:#include<reg52.h>sbit Row0=P1^0; //定义P1.0作为数码管的Row0控制端sbit Row1=P1^7; //定义P1.7作为数码管的Row1控制端sbit Row2=P1^1; //定义P1.1作为数码管的Row2控制端sbit Row3=P2^0; //定义P2.0作为数码管的Row3控制端sbit Col0=P1^2; //定义P1.2作为数字管的Col0控制端sbit Col1=P1^3; //定义P1.3作为数字管的Col1控制端sbit Col2=P1^4; //定义P1.4作为数字管的Col2控制端sbit Col3=P1^5; //定义P1.5作为数字管的Col3控制端sbit Col4=P1^6; //定义P1.6作为数字管的Col4控制端(2.2)定义LED数码管数据和定义变量//定义LED数码管数据unsigned char codetable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char i,j,k,m,n,s;(2.3)调用初始化函数再调用初始化函数,用于完成I/O口、定时器0/1及外部中断的初始化,代码如下:void init (void){TMOD=0x01; //定时器0的模式1TH0=0x3c; //定时器0赋初值TL0=0xb0;EA=1; //外部总中断开启ET0=1; //允许定时器0中断ET1=0; //不允许定时器1中断TR0=1; //开启定时器0TR1=1; //关闭定时器1}(2.4)主函数最后我们考虑到,应该实现的LED点阵的显示函数和定时更新时钟的函数,本实验的核心代码如下:void main(){init(); //调用初始化函数while(1){display(); //调用LED点阵显示函数number_refresh(); //调用定时更新时钟函数}}(2.5)LED点阵显示函数为保证LED点阵的正常工作,可利用多次延时函数,定义LED点阵显示函数,每次显示一位数字,实现数字从左往右以及从右往左的滚动移动显示,具体实现如下:void display (int ){P2=0xfe; //定义P2这一行位先低电平,控制第一位显示P0=table[m]; //将得到的数字m 显示在第一位数码管Delay_1ms(2); //延时1msP2=0xfd; //定义P2这一行位先低电平,控制第二位显示P0=table[n]; //将得到的数字n 显示在第二位数码管Delay_1ms(2); //延时1msP2=0xfb; //定义P2这一行位先低电平,控制第三位显示P0=table[s]; //将得到的数字s 显示在第三位数码管Delay_1ms(2); //延时1msP2=0xf7; //定义P2这一行位先低电平,控制第四位显示P0=table[i]; //将得到的数字i 显示在第四位数码管Delay_1ms(2); //延时1msP2=0xef; //定义P2这一行位先低电平,控制第五位显示P0=table[j]; //将得到的数字j 显示在第五位数码管Delay_1ms(2); //延时1msP2=0xdf; //定义P2这一行位先低电平,控制第六位显示P0=table[k]; //将得到的数字k 显示在第六位数码管Delay_1ms(2); //延时1ms}(2.6)定时更新时钟函数本部分,利用定时器0的中断功能实现定时更新LED点阵时间,定义定时器0中断函数,实现每隔一秒更新一次,更新变量m、n、s、i、j、k,代码如下:ㄖ/Timer 0中断函数void Timer0() interrupt 1{TH0=0x3c; //定时器0赋初值TL0=0xb0;m++; //每秒,m值加1if(m>9) //当m的值大于9时,n值加1{n++;m=0;}if(n>9) //当n的值大于9时,s值加1{s++;n=0;}if(s>5) //当s的值大于5时,i值加1{i++;s=0;}if(i>9) //当i的值大于9时,j值加1{j++;i=0;}if(j>5) //当j的值大于5时,k值加1{k++;j=0;}if(k>9) //当k的值大于9时,m值加1{k=0;m=0;}}三、实验结果本次实验让我深入理解单片机及一些外设的工作原理,掌握定时/计数机制,以及实现数字时钟设计的思维过程。
单片机数字钟实习报告

一、实习目的随着电子技术的飞速发展,单片机作为一种重要的电子元件,在工业、医疗、通讯等领域得到了广泛的应用。
为了更好地掌握单片机的原理和应用,提高动手能力,我们选择了单片机数字钟作为实习项目。
通过本次实习,我们旨在掌握单片机的编程、调试、硬件连接等方面的知识,实现数字时钟的显示与控制。
二、实习内容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、单片机选择本次实验选用了常见的 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. 设计一款基于单片机的数字钟,能显示时、分、秒。
2. 数字钟具有校时功能,能以24小时为一个周期循环显示时间。
3. 掌握单片机的原理及其编程方法,熟悉LCD1602液晶显示屏的使用。
4. 了解数字钟的原理,学会制作数字钟,并掌握各种组合逻辑电路与时序电路的原理与使用方法。
三、实习过程1. 首先,我们对单片机的原理进行了学习,了解了单片机的内部结构、工作原理及其编程方法。
同时,我们还学习了LCD1602液晶显示屏的使用,掌握了如何将单片机与LCD1602液晶显示屏进行连接。
2. 接下来,我们开始了数字钟的设计。
首先,我们设计了数字钟的电路原理图,包括了单片机、LCD1602液晶显示屏、按键、时钟芯片等元件。
然后,我们进行了电路板的焊接,焊接过程中,我们严格遵循电路焊接规范,确保了电路板的质量和稳定性。
3. 焊接完成后,我们开始了数字钟的程序编写。
我们编写了相应的程序,实现了数字钟的时、分、秒显示功能以及校时功能。
在编程过程中,我们深入理解了单片机的编程原理,掌握了Keil编程软件的使用。
4. 最后,我们对数字钟进行了调试和测试。
我们通过观察数字钟的显示效果,分析了可能存在的问题,并针对问题进行了改进。
数字时钟的设计实习报告

数字时钟的设计实习报告一、实习目的本次实习旨在通过设计一个数字时钟,使学生掌握数字电路的设计方法,熟悉集成电路的使用,提高对单片机的学习和应用能力,培养学生的软硬件开发能力。
二、实习内容1. 设计一个数字时钟,能够显示时分秒。
2. 掌握数字时钟的设计方法。
3. 熟悉集成电路的使用方法。
4. 培养学习、设计、开发软、硬的能力。
三、实习过程1. 首先,我们对数字时钟的设计进行了需求分析,明确了数字时钟的功能和要求。
数字时钟应能够显示时分秒,采用24小时标准计时制。
2. 接下来,我们进行了数字时钟的设计方案制定。
数字时钟主要由单片机、LED数码管、按键等部分构成。
单片机负责控制整个系统,LED数码管用于显示时间,按键用于调整时间。
3. 然后,我们进行了数字时钟的硬件设计。
我们选择了AT89C52单片机作为核心控制器,6个共阳极的高亮度LED数码管用于显示时间,还选择了两个按键用于调整时间。
4. 在硬件设计的基础上,我们进行了数字时钟的软件设计。
我们编写了程序,使单片机能够控制LED数码管显示时间,并能够通过按键调整时间。
5. 最后,我们对数字时钟进行了测试和调试,确保其功能的正确性和稳定性。
四、实习心得通过本次实习,我们掌握了数字时钟的设计方法,熟悉了集成电路的使用方法,提高了对单片机的学习和应用能力。
我们在设计过程中,学会了如何分析需求、制定方案、设计硬件和软件,并通过测试和调试,确保设计的正确性和稳定性。
此外,我们还学会了如何协作和沟通,提高了团队协作能力。
在设计过程中,我们遇到了很多问题,但通过互相讨论和请教老师,我们逐一解决了问题,取得了实习的成功。
五、实习成果本次实习,我们成功设计了一个数字时钟,能够显示时分秒,并具有时间调整功能。
数字时钟的硬件电路稳定运行,软件程序正确无误。
六、实习展望在今后的学习和工作中,我们将继续深入学习数字电路和单片机的相关知识,提高自己的设计能力和开发水平。
我们还将把在实习中学到的知识和技能应用到实际项目中,为我国电子行业的发展做出贡献。
单片机设计时钟实训报告

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

单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的4个LED数码管,设计带有闹铃、秒表功能的数字时钟。
功能要求:a)计时并显示(LED)。
由于实验板上只有4位数码管,可设计成显示“时分”和显示“分秒”并可切换。
b)时间调整功能。
利用4个独立按钮,实现时钟调整功能。
这4个按钮的功能为工作模式切换按钮(MODE),数字加(INC),数字减(DEC)和数字移位(SHITF)。
c)定闹功能。
利用4个独立按钮设定闹钟时间,时间到以蜂鸣器响、继电器动作作为闹铃。
d)秒表功能。
最小时间单位0.01秒。
二、硬件原理分析1.电源部分电源部份采用两种输入接口(如上图)。
a)外电源供电,采用2.1电源座,可接入电源DC5V,经单向保护D1接入开关S1。
b)USB供电,USB供电口输入电源也经D1单向保护,送到开关S1。
注:两路电源输入是并连的,因此只选择一路就可以了,以免出问题。
S1为板子工作电源开关,按下后接通电源,提供VCC给板子各功能电路。
电路采用两个滤波电容,给板子一个更加稳定的工作电源。
LED为电源的指示灯,通电后LED灯亮。
2.蜂鸣器蜂鸣器分为有源和无源两种,有源即两引脚有一个直流电源就可以长鸣,无源则需要一个1K左右的脉冲才可以蜂鸣,因此对于按键的提示音及报警蜂鸣使用有源来得方便。
有源也可以当无源使用,而无源则不能当有源使用,当然用有源蜂鸣器作音乐发声会失真厉害。
如上图:单片机P15输出高低电平经R21连接三极管B极,控制三极管的导通与截止,从而控制蜂鸣器的工作。
低电平时三极管导通,蜂鸣器得电蜂鸣,高电平时三极管截止,蜂鸣器失电关闭蜂鸣。
电路使用一个四位共阳型数码管,四个公共阳级由三极管放大电流来驱动,三极管由P10-P13控制开与关。
数码管的阴级由P0口经过电阻限流连接。
例如,要十位的数码管工作,P12输出0,使三极管Q12导通,8脚得电,当P0口相应位有输出0时,点亮相应的LED灯组合各种字符数字。
单片机数码时钟实训报告

一、实训目的本次单片机数码时钟实训旨在通过实际操作,让学生了解单片机的应用,掌握单片机数码时钟的设计与实现方法,提高学生的实践操作能力和创新思维。
二、实训内容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. 通过本次实训,使学生掌握了单片机数码时钟的设计与实现方法,提高了学生的实践操作能力和创新思维。
单片机课程设计数字钟实验报告

单片机课程设计:电子钟一、实现功能1、能够实现准确计时,以数字形式显示时、分、秒的时间。
2、小时以24小时计时形式,分秒计时为60进位,能够调节时钟时间。
3、闹钟功能,一旦走时到该时间,能以声或光的形式告警提示。
4、能够实现按键启动与停止功能。
5、能够实现整点报时功能。
6、能够实现秒表功能。
二、设计思路1、芯片介绍VCC:电源。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL 门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能RXD(串行输入口)TXD(串行输出口)/INT0(外部中断0)/INT1(外部中断1)T0(记时器0外部输入)T1(记时器1外部输入)/WR(外部数据存储器写选通)/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
基于51单片机的数字钟设计报告

数字钟项目硬件总体设计说明书编制单位:侏罗纪工作室作者发布日期:2011-1-22审核人:批准人:目录1.引言 (1)1.1.编写目的: (1)1.2.背景 (1)1.3.定义 (2)1.4.参考资料 (2)2.总体设计 (3)2.1开发与运行环境 (3)2.2硬件功能描述 (3)2.3硬件结构 (3)3.硬件模块设计 (4)3.1.描述 (4)3.1.1.AT89C51单片机简介 (4)3.1.2. 键盘电路的设计 (5)3.1.3. 段码驱动电路 (5)3.1.4. 显示器的选择 (7)3.1.5. 蜂鸣器驱动电路 (8)3.2.功能 (8)4.嵌入式软件设计 (9)4.1.流程逻辑 (9)4.2.算法 (10)4.2.1. 中断定时器的设置 (26)4.2.2. 闹钟子函数 (27)4.2.1. 计时函数 (28)4.2.2. 键盘扫描函数 (29)4.2.3. 时间和闹钟的设置 (30)5.经验总结 (31)6.附录 (37)1.引言1.1.编写目的:20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间等造成的。
而钟表的数字化给人们生产生活带来了极大的方便。
数字钟是通过数字电路实现时,分,秒数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所,成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烤箱、通断动力设备、甚至各种定时电气的自动启用等。
单片机数字时钟实训报告

一、实训目的本次实训旨在通过设计和实现单片机数字时钟,使学生掌握单片机的基本原理和应用技术,提高学生的动手能力和实践技能。
通过实训,使学生熟悉单片机的硬件结构、编程方法和调试技巧,了解数字时钟的设计原理和实现方法,培养学生的创新意识和团队协作能力。
二、实训内容1. 硬件设计(1)单片机选型:MSP430F5529(2)显示模块:OLED显示屏(3)按键模块:4个按键(4)蜂鸣器模块:蜂鸣器(5)电源模块:电源电路2. 软件设计(1)系统初始化:设置系统时钟、初始化OLED显示屏、按键扫描、蜂鸣器控制等(2)实时时钟(RTC)实现:通过MSP430F5529的RTC模块获取当前时间(3)时间显示:在OLED显示屏上显示年、月、日、时、分、秒等信息(4)整点报时:在整点时刻通过蜂鸣器播放音乐进行报时(5)按键控制:通过按键实现时间的设置、闹钟的设定等功能三、实训过程1. 硬件搭建(1)根据设计图纸,连接MSP430F5529单片机、OLED显示屏、按键、蜂鸣器等元器件(2)搭建电源电路,为单片机和显示屏提供稳定的电源(3)检查连接是否正确,确保电路安全可靠2. 软件编写(1)使用C语言编写程序,实现系统初始化、实时时钟获取、时间显示、整点报时、按键控制等功能(2)编写程序代码,实现各个功能模块的代码(3)调试程序,确保程序运行正确3. 系统调试(1)将程序烧录到MSP430F5529单片机中(2)连接OLED显示屏、按键、蜂鸣器等模块(3)检查系统运行情况,确保各个功能正常(4)调整程序参数,优化系统性能四、实训结果与分析1. 系统功能实现本次实训成功实现了单片机数字时钟的功能,包括时间显示、整点报时、按键控制等。
系统运行稳定,各项功能正常。
2. 系统性能分析(1)实时时钟获取:通过MSP430F5529的RTC模块获取当前时间,精度较高(2)时间显示:OLED显示屏显示清晰,信息完整(3)整点报时:在整点时刻通过蜂鸣器播放音乐进行报时,声音清晰(4)按键控制:通过按键实现时间的设置、闹钟的设定等功能,操作方便3. 系统优化(1)优化程序代码,提高程序运行效率(2)改进显示效果,提高用户体验(3)增加闹钟功能,实现定时提醒五、实训总结1. 通过本次实训,使学生掌握了单片机的基本原理和应用技术,提高了学生的动手能力和实践技能2. 学生学会了如何使用MSP430F5529单片机设计数字时钟,了解了数字时钟的设计原理和实现方法3. 学生培养了创新意识和团队协作能力,为今后的学习和工作打下了良好的基础4. 实训过程中,学生遇到了各种问题,通过查阅资料、讨论和请教老师,最终解决问题,提高了学生的解决问题的能力5. 本次实训使学生认识到理论知识与实践相结合的重要性,激发了学生的学习兴趣,为今后的学习和工作奠定了基础。
单片机数字电子钟课程设计实训报告

第一章设计概要设计要求:1、用单片机及6位LED数码管显示时、分、秒00时00分00秒——23时59分59秒循环运行2、整点提醒0,1…23时短蜂鸣3、用按键实现时、分、秒调整*4、省电功能(关闭显示)*5、定时设定提醒如设定08时15分00秒长蜂鸣*6、秒表功能显示××分××秒. ××健复位从00分00秒00开始计时启动从00分00秒00开始计时停止显示实际计时××分××秒××第二章硬件设计方案2.1设计框架图2.2总体设计方案说明设计框架图如图2.1所示总共分为5小部分:时间显示部分,键盘控制部分,单片机部分,闹钟部分,电源部分。
本设计各部分由统一电源集中供电,外加被用电源确保主电源断电时备用电源及时供电避免时间的丢失.采用12MHZ晶振为单片机提供时钟。
显示部分采用容易购买的LED八段数码显示管,利用单片机输出高低电平实现数码管的刷新显示。
LED具有显示明亮,容易识别,价格便宜等优点,特别适合时间的显示。
按键部分采用普通的按建开关,使用查询方式从而节约元件。
12.3数码显示管设计部分.图3.1-1数码显示部分采用八块共阳极八段数码显示管分别对时,分,秒进行显示。
将第三块和第六块显示横杠,可以使时间显示更美观.显示部分采用刷新显示方案.具体如下:当p2口输出第一块的三极管导通,u1数码管被选中,然后p0口输出数字的数码管编码。
如p0口输出时u1数码管就输出数字0。
当循环右移一位是u2被选通显示。
依次类推u1-u8数码管显示完成,再循环显示。
由于单片机的刷新速度很快所以8个数码管看起来就像同时显示的一样。
2.4 键盘控制电路键盘部分采用普通的按键进行设计,使用软件延时消除开关抖动.2.5 闹铃电路闹铃电路通过p1.7口输出1HZ脉冲使蜂鸣器发出间隔为一秒的蜂鸣声.32.6电源电路2.7 总体电路图设计图3.4-15第三章软件设计方案3.1 程序流程图3.2 总体程序设计//主程序ORG 0000HAJMP MAINORG 000BHAJMP TZPORG 0030HMAIN: MOV SP,#60HMOV R4,#00HMOV TMOD,#02hMOV TH0,#06HMOV TL0,#06HSETB EASETB ET0SETB TR0//初始化MOV R2,#3MOV R1,#30HLOOP: MOV @R1,#00HINC R1DJNZ R2,LOOPLCALL RINGPI//7LOOP2: MOV R2,#6MOV R1,#30HLCALL DPZP// 开启节能功能JB P1.0,XWJNJB P1.0,$//// 闹钟设置入口ZWJN: JB P1.1,XPP1LCALL RINGPLCALL RELAY////调时入口XPP1: JB P1.3,XPP2LCALL ZPP1XPP2: JB P1.2,ZPPLCALL ZPP2ZPP: AJMP LOOP2////定时器0中断TZP: PUSH 00HPUSH 03HINC R4 // 软件-硬件延时1秒CJNE R4,#40,ENDIMOV R4,#0INC R5CJNE R5,#100,ENDI //结束MOV R5,#0ZP: MOV R0,#30HMOV R3,#3MOV DPTR,#TCOUNTLCALL TTZPLCALL RINGENDI: POP 03HPOP 00HRETI//定时器0中断返回//软中断1ZPP1: MOV A,31HADD A,#1DA AMOV 31H,ACJNE A,#60H,END1MOV 31H,#00HEND1: LCALL RELAYRET////软中断2ZPP2: MOV A,32H9ADD A,#1DA AMOV 32H,ACJNE A,#24H,END2MOV 32H,#00HEND2: LCALL RELAYRET////延时显示程序RELAY: MOV R6,#255REP: MOV R7,#4REEE: MOV R2,#6MOV R1,#30HLCALL DPZPDJNZ R7,REEEDJNZ R6,REPRET//延时显示程序结束//显示子程序DPZP: MOV P0,#0FFH // 显示横杠MOV P2,#0DBHMOV P0,#0BFH // END DPZP1: MOV P0,#0FFHMOV DPTR,#CHART //P3partMOV A,R2MOVC A,@A+DPTRMOV P2,A //MOV DPTR,#LEDMOV A,@R1JNB F0,DPZPSINC R1SWAP ADPZPS: ANL A,#0FHMOVC A,@A+DPTRMOV P0,ACPL F0DJNZ R2,DPZP1RET//显示子程序结束//不规则循环加一子程序TTZP: MOV A,@R0ADD A,#1DA AMOV @R0,AMOV A,R3MOVC A,@A+DPTRCLR CSUBB A,@R011JNC RTTZPMOV @R0,#0INC R0DJNZ R3,TTZP RTTZP: RET// 响铃程序RING: MOV R0,#34HMOV 24H,#6 RRING: MOV A,31HSUBB A,@R0JNZ ERINGINC R0MOV A,32HSUBB A,@R0DEC R0JNZ ERINGCPL P1.7RETERING: MOV A,R0ADD A,#3MOV R0,ADJNZ 24H,RRINGSETB P2.1RET//// 闹钟调整程序RINGP: MOV 20H,#33HMOV 21H,#6MOV R3,#20MOV 22H,#5LPRP: LCALL RELAY1JB P1.1,LPRP1MOV R3,#20MOV A,20HADD A,#3MOV 20H,ADJNZ 22H,LPRPRETLPRP1: JB P1.3,LPRP2MOV R3,#20HMOV A,20HADD A,#1MOV R0,AMOV A,@R0ADD A,#1MOV @R0,ADA ACJNE A,#60H,LPRP21MOV @R0,#00H13LPRP21: LCALL RELAY1 LPRP2: JB P1.2,LPRP3MOV R3,#20HMOV A,20HADD A,#2MOV R0,AMOV A,@R0ADD A,#1DA AMOV @R0,ACJNE A,#24H,LPRP31MOV @R0,#00H LPRP31: LCALL RELAY1 LPRP3: DJNZ R3,LPRP LPRPEND: RET////闹钟组初始化程序(共5组) RINGPI: MOV R2,#5MOV R1,#41H LPRPI: MOV @R1,#00HDEC R1MOV @R1,#00HDEC R1MOV A,#00HORL A,#0A0HADD A,R2MOV @R1,ADEC R1DJNZ R2,LPRPIRET////延时显示程序1RELAY1: MOV R6,#255REP1: MOV R7,#4REEE1: MOV R2,21HMOV R1,20HLCALL DPZPDJNZ R7,REEE1DJNZ R6,REP1RET//延时显示程序结束//数据表LED: DB0c0H,0f9H,0a4H,0b0H,099H,092H,82H,0f8H,80H,90H,8EH,0A8H//0,1,2,3,4,5,6,7,8,9,F,n CHART: DB 0FEH,0FEH,0FDH,0F7H,0EFH,0BFH,7FHTCOUNT: DB 0,23H,59H,59HEND15第四章心得体会4.1心得体会在整个课程设计完后,总的感觉是:有收获。
课程设计实验报告基于单片机的数字时钟设计

绪论随着时代的进步和发展,单片机技术已经普及到生活、工作、科研等各个领域,已经成为一种比较成熟的技术。
本文将介绍一种基于单片机控制的数字温度计和数字钟,本数字温度计属于多功能温度计,可以任意设置温度的上下限报警功能,当温度不在设定范围内时,可以报警;本数字钟可以同步显示时间日历,日期和时间都可通过按键校整。
本系统采用的DS1302可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
本系统显示部分采用LCD液晶显示屏显示,工作方便,外形美观一、方案设计本项目拟设计基于单片机的数字时钟和数字温度计,并将时间和温度显示在液晶显示器上。
本系统由主控模块、时钟模块、显示模块、测温模块共4个模块组成。
主控芯片使用89系列的AT89C52单片机。
时钟芯片使用DS1302,DS1302做为计时芯片,可以做到及时准确。
DS1302可以在很小电流的后备电源(2.5~5.5V电源,在2.5V时耗小于300nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
测温模块采用DS18B20,具有测温准确,测温范围宽,电路简单的优点。
显示模块采用液晶显示屏LCD1602,LCD1602电路简单,功耗低,显示信息量大,显示质量高,显示界面美观、友好。
1、主控制器的选择ATmega16是AVR系列中的一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准AVR指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的ATmega16单片机可为您提供许多较复杂系统控制应用场合。
另外,在校期间所涉及到也主要是MCS-51系列单片机,对于其内部功能和指令系统较为熟悉,能在较为短的项目内完成项目的设计和验证。
2、时钟功能的实现时钟功能的实现有两种方案:一是用软件实现,直接用单片机的定时器编程以实现时钟;二是用专门的时钟芯片实现时钟的记时,再把时间数据送入单片机,由单片机控制显示。
单片机数字钟实训报告

单片机数字钟实训报告摘要:本实训项目旨在设计并实现一个基于单片机的数字钟。
通过对单片机的学习和应用,我们成功地完成了数字钟的设计与制作。
本报告将从设计目标、硬件电路、软件程序以及实际操作等方面进行详细介绍和分析,以期对读者有所启发和帮助。
一、设计目标数字钟是一款常见而实用的电子设备,它能够精准地显示当前的时间,并具备闹钟和定时器等功能。
我们的设计目标是实现一个简洁、易用且功能齐全的数字钟,具备时钟、闹钟和定时器三种模式,并能够通过按键进行切换和设置。
二、硬件电路我们采用了8051系列单片机作为核心控制器,并搭配数码管、按键和蜂鸣器等外围电路。
其中,数码管用于显示时间和设置参数,按键用于切换模式和设置时间,蜂鸣器用于报警。
通过合理的连接和布局,我们成功地搭建了数字钟的硬件电路。
三、软件程序为了实现数字钟的各项功能,我们根据设计目标编写了相应的软件程序。
程序主要包括时钟模式、闹钟模式和定时器模式的切换与设置,时间的显示和更新等功能。
通过对按键的扫描和状态判断,我们能够根据用户的操作进行相应的响应和处理。
在程序的编写过程中,我们注重代码的可读性和可维护性,使其具备良好的扩展性和稳定性。
四、实际操作在完成硬件电路和软件程序的设计后,我们进行了实际的操作测试。
首先,我们通过按键进行模式的切换和时间的设置,验证了数字钟的基本功能。
其次,我们通过调整定时器的参数,测试了数字钟的定时器功能。
最后,我们设置了闹钟并验证了其报警功能。
实际操作的结果表明,我们的数字钟设计达到了预期的效果,并且具备了稳定可靠的性能。
五、总结与展望通过本次实训项目,我们深入学习了单片机的原理和应用,并成功地设计和制作了一个数字钟。
通过实际操作的过程,我们对数字钟的功能和性能有了更深入的了解。
然而,我们也意识到数字钟仍有一些不足之处,比如显示方式的改进和功能的扩展等。
因此,我们对未来的工作进行了展望,并提出了一些改进的建议,以期进一步完善和优化数字钟的设计。
单片机制作时钟实训报告

随着科技的不断发展,单片机作为一种集计算机技术、微电子技术和自动控制技术于一体的综合性技术,已经在各个领域得到了广泛的应用。
为了提高我们的实践能力和创新意识,我们选择了单片机制作时钟这一实训项目,通过实际操作来深入了解单片机的应用和编程技巧。
二、实训目的1. 熟悉单片机的基本原理和结构。
2. 掌握单片机的编程方法和技巧。
3. 学会使用常用电子元器件,如数码管、按键等。
4. 培养团队合作精神和动手能力。
三、实训内容1. 硬件设计(1)选用MCS-51单片机作为核心控制器;(2)使用8位LED数码管显示时间,包括时、分、秒;(3)设计按键模块,实现时间设置、闹钟设定等功能;(4)设计电源模块,保证系统稳定运行。
2. 软件设计(1)编写时钟计数程序,实现时间的精确计数;(2)编写按键扫描程序,实现时间设置、闹钟设定等功能;(3)编写显示控制程序,实现时间信息的实时显示。
3. 系统调试(1)对硬件电路进行连接和调试,确保电路正常运行;(2)对软件程序进行调试,修正错误,优化性能;(3)进行功能测试,验证系统功能的正确性和稳定性。
1. 需求分析根据实训要求,分析时钟功能,确定硬件和软件设计方案。
2. 硬件选型与电路设计根据需求分析,选择合适的单片机、数码管、按键等元器件,并设计电路图。
3. 软件编程使用C语言编写时钟计数、按键扫描、显示控制等程序。
4. 实物制作与调试按照电路图焊接电路板,组装元器件,进行实物制作。
然后对硬件电路和软件程序进行调试,确保系统正常运行。
5. 功能测试与优化对系统进行功能测试,验证时钟的准确性、按键功能的可靠性、显示的清晰度等。
根据测试结果对系统进行优化,提高性能。
五、实训成果1. 成功制作了一款基于单片机的电子时钟,具有实时显示、时间设置、闹钟设定等功能;2. 掌握了单片机的基本原理和编程方法,提高了实践能力;3. 学会了使用常用电子元器件,为以后的学习和工作打下了基础。
六、实训总结通过本次单片机制作时钟实训,我们深入了解了单片机的应用和编程技巧,提高了实践能力和创新意识。
51时钟设计实训报告

51时钟设计实训报告一、项目背景随着社会的发展与科技的进步,电子产品在我们日常生活中扮演着越来越重要的角色。
而钟表作为一种时间显示工具,也不断得到升级与创新。
本项目旨在设计一种基于51单片机的数字时钟,通过数字显示屏实时显示时间,并具备设置闹钟功能,以方便人们更好地了解和掌握时间。
二、项目原理本项目采用基于51单片机的设计方案,并通过数字显示屏显示时间。
其工作原理如下:1. 单片机工作频率设置为12MHz;2. 通过外部晶振将时钟信号输入到单片机的时钟引脚;3. 使用数码管显示时钟的小时、分钟和秒数;4. 通过按键实现时间的设置和闹钟的设置功能;5. 利用定时器中断实现时间的自动更新,保证时钟的准确性;6. 在需要闹钟响铃时,通过蜂鸣器发出声音提醒用户。
三、硬件设计1. 硬件元件清单- 51单片机- 12MHz晶振- 数码管- 按键- 电阻- 蜂鸣器- 杜邦线- 面包板2. 电路连接示意图3. 数码管显示原理数码管将十进制数字通过多段共阴/共阳的LED管显示出来。
由于本项目中使用的是共阳数码管,因此需要在控制单元中采用共阴极接法。
通过依次给不同的数码管段加电,即可显示相应的数字。
四、软件设计1. 软件流程图软件的设计使用C语言进行编程,主要包括以下步骤:1. 初始化:设置单片机工作频率、端口输入输出状态,打开定时器中断;2. 显示时间:获取当前的小时、分钟和秒数,将其转换为相应的数码管段码,通过IO口输出到数码管上进行显示;3. 设置时间:通过按键输入,修改单片机内部存储的时间;4. 闹钟设置:通过按键输入,设置闹钟的小时和分钟;5. 定时器中断:在定时器中断函数中进行时间的更新和闹钟的判断;6. 响铃:当闹钟时间与当前时间相同时,通过蜂鸣器发出声音提醒用户。
2. 核心代码以下是部分核心代码的示例:cinclude <reg52.h>定义数码管段码与显示端口的对应关系unsigned char segTable[12] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99,0x92, 0x82, 0xF8, 0x80, 0x90, 0xBF, 0xFF};定义全局变量unsigned char hour, min, sec, setHour, setMin;unsigned char alarmHour, alarmMin;bit isAlarmOn;初始化函数void init() {设置单片机工作频率TMOD = 0x01;设置数字管段码端口为输出P2 = 0x00;P0 = 0x00;打开定时器中断ET0 = 1;EA = 1;初始化全局变量hour = 0;min = 0;sec = 0;setHour = 0;setMin = 0; alarmHour = 0; alarmMin = 0;isAlarmOn = 0;}主函数void main() {init();while (1) {showTime();setTime();setAlarm();}}定时器中断函数void timer0() interrupt 1 { TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; sec++;if (sec == 60) {sec = 0;min++;if (min == 60) {min = 0;hour++;if (hour == 24) {hour = 0;}}}if (isAlarmOn && alarmHour == hour && alarmMin == min) { ring();}}数码管显示函数void showNumber(unsigned char num) {P0 = segTable[num];delay();P0 = 0xFF;}数码管显示时间函数void showTime() { unsigned char temp; temp = hour / 10; showNumber(temp); P2 = 0x10;delay();temp = hour % 10; showNumber(temp); P2 = 0x20;delay();temp = min / 10; showNumber(temp); P2 = 0x40;delay();temp = min % 10; showNumber(temp);P2 = 0x80;delay();P2 = 0x00;}五、实训心得通过本次实训,我深入了解和学习了51单片机的原理和使用方法,掌握了数字时钟的设计与实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机技术及应用》课程设计报告课题:数字时钟设计专业:应用电子技术班级:电子1132*名:***指导老师:***二0一三年1 月7 日摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善本次做的数字钟是以单片机(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)具有五个中断源、两个优先级嵌套中断结构。
(二) AT89C51单片机的部分管脚说明:AT89C51单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)和电源地( 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,引脚图如下图:① Vcc 40 电源端;GND 20 接地端。
工作电压为5V 。
②外接晶振引脚晶振连接的内部、外部方式图XTAL1 19 、XTAL2 18 :XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
③复位RST 9常用复位电路图在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
④/EA=1 31脚当/EA=1时,访问内部程序存储器,当PC值超过内ROM范围时,自动转执行外部程序存储器的程序;当/EA=0时,只访问外部程序存储器。
(三)另外介绍一下输入输出引脚(本系统只用到P0、P1、P2口):(1) P0端口[P0.0-P0.7] 是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。
作为输出口时能驱动8个TTL。
对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。
(2) P1端口[P1.0-P1.7]是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收低8位地址信息。
(3) P2端口[P2.0-P2.7]是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
2.1 LED显示电路本课程设计用到共阳极数码管通过其引脚图,便可顺利完成其连接。
2.3 键盘控制电路通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置,S0控制闹钟的启动和停止。
按下S1键显示闹钟,松开后显示时间;按下S4键进入时间修改模式,再按S4键时间的时加1,按S2分加1,调整结束后按下S1恢复正常显示;按下S3键进入闹钟修改模式,再按S3键闹钟的时加1,按S2分加1,调整结束后按下S1恢复正常显示。
当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也会出现类似的情况,这就是抖动。
抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。
很容易想到,抖动问题不解决就会引起对闭合键的识别。
用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,再读入键盘码。
3.课程设计报告内容3.1.方案设计要求设计制作一个数字时钟,要求能实现基本走时,并以数字形式显示时、分、秒;采用24小时制;能实现校时、校分,定时闹钟的功能,也可以添加其他功能.采用单片机最小系统实现功能。
优点:电路简单,能通过程序进行随机调整并扩展功能,成本低,易于实现。
缺点:走时有一定的误差。
经过综合考虑成本问题以及电路实现问题,选择第三种方案实现设计要求。
3.2系统设计流程图如下图所示3.3制数字时钟电路Protues仿真原理图通过S1、S2、S3和S4四个按键,对时间进行修改和闹钟的设置,S0控制闹钟的启动和停止。
按下S1键显示闹钟,松开后显示时间;按下S4键进入时间修改模式,再按S4键时间的时加1,按S2分加1,调整结束后按下S1恢复正常显示;按下S3键进入闹钟修改模式,再按S3键闹钟的时加1,按S2分加1,调整结束后按下S1恢复正常显示。
3.4运行程序4.总结经过这次单片机课程设计实验,让我获得了很多知识,进一步加深了我对AT89C51单片机的掌握,另外也巩固了我的编程思想和焊接技术.本次的课程设计,让我发现理论必须用于实践,否则只是一张白纸。
此外只有理论水平提高了,才能更好的运用于实践。
另外,本次课程设计也考验了我的认真的态度。
只有做事拥有认真的态度与科学的方法,才能成功。
5.1数字时钟源程序#include<reg51.h>#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit beep=P2^3;unsigned char j,k,a1,a0,b1,b0,c1,c0,s,f,m,key=10,temp,qq;uchar shi20,shi10,fen20,fen10,miao20,miao10,new,ok=1,wei;unsigned int pp;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(unsigned char i){for(j=i;j>0;j--)for(k=125;k>0;k--);}void display(uchar shi2,uchar shi1,uchar fen2,uchar fen1,uchar miao2,uchar miao1){dula=0;P0=table[shi2];dula=1;dula=0;wela=0;P0=0xfe;wela=1;wela=0;delay(5);P0=table[shi1]|0x80;dula=1;dula=0;P0=0xfd;wela=1;wela=0;delay(5);P0=table[fen2];dula=1;dula=0;P0=0xfb;wela=1;wela=0;delay(5);P0=table[fen1]|0x80;dula=1;dula=0;P0=0xf7;wela=1;wela=0;delay(5);P0=table[miao2];dula=1;dula=0;P0=0xef;wela=1;wela=0;delay(5);P0=table[miao1];dula=1;dula=0;P0=0xdf;wela=1;wela=0;delay(5);}void keyscan0(){P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case 0xbb:ok=0;break;case 0x7b:ok=1;break;}}}}void keyscan(){{P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0)delay(10);if(temp!=0xf0){temp=P3;switch(temp){case 0xee:key=0;wei++;break;case 0xde:key=1;wei++;break;case 0xbe:key=2;wei++;break;case 0x7e:key=3;wei++;break;}while(temp!=0xf0) {temp=P3;temp=temp&0xf0;beep=0;}beep=1;}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=4;wei++;break;case 0xdd:key=5;wei++;break;case 0xbd:key=6;wei++;break;case 0x7d:key=7;wei++;break;}while(temp!=0xf0)temp=P3;temp=temp&0xf0;beep=0;}beep=1;}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=8;wei++;break;case 0xdb:key=9;wei++;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;beep=0;beep=1;}}}}void main(){TMOD=0x01;TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。