单片机实训报告_数字时钟
基于单片机的数字时钟设计实训报告
摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善本次做的数字钟是以单片机(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) //如果有连续两次按键按下,认为有有效按键按下。
单片机数字钟实习报告
一、实习目的随着电子技术的飞速发展,单片机作为一种重要的电子元件,在工业、医疗、通讯等领域得到了广泛的应用。
为了更好地掌握单片机的原理和应用,提高动手能力,我们选择了单片机数字钟作为实习项目。
通过本次实习,我们旨在掌握单片机的编程、调试、硬件连接等方面的知识,实现数字时钟的显示与控制。
二、实习内容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. 最后,我们对数字钟进行了调试和测试。
我们通过观察数字钟的显示效果,分析了可能存在的问题,并针对问题进行了改进。
单片机设计时钟实训报告
一、引言随着科技的不断发展,单片机技术在电子领域得到了广泛的应用。
为了提高学生的实践能力,培养实际工程应用能力,我们进行了单片机设计时钟实训。
本实训以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)单片机:选用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. 通过本次实训,使学生掌握了单片机数码时钟的设计与实现方法,提高了学生的实践操作能力和创新思维。
单片机课程设计实验报告+基于单片机的数字时钟+含完整实验代码
单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的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灯组合各种字符数字。
单片机数字时钟实验报告
单片机数字时钟实验报告引言:数字时钟是现代人们生活中不可或缺的物品之一。
现代数字时钟的核心是单片机,而且数字时钟的制作也是单片机初学者的必备实验之一。
本文将详细介绍单片机数字时钟的制作过程和原理。
实验原理:数字时钟的原理非常简单,它由单片机、时钟芯片、LED数码管等元件组成。
单片机通过时钟芯片来获取时间信息,并将时间信息通过端口输出给LED数码管,从而显示当前时间。
单片机的主要作用是控制时钟芯片的读取和LED数码管的显示。
实验材料:1. 单片机:STC89C522. 时钟芯片:DS13023. LED数码管:共阳极4位LED数码管4. 电路板、电阻、电容、晶体振荡器、按键、排针等元件实验步骤:1. 确定电路原理图:根据实验原理,确定单片机、时钟芯片和LED 数码管之间的电路连接方式。
2. 绘制电路布局图:将电路原理图转换为真实的电路布局图,并根据元件大小和数量选择合适的电路板。
3. 焊接电路:根据电路布局图进行电路的焊接,并进行电路的检查和修正。
4. 编写程序:根据实验原理编写单片机程序,并将程序下载到单片机中。
5. 测试程序:将电路接通电源后,通过按键和LED数码管来测试程序的正确性和稳定性。
实验结果:经过实验,我们成功制作了一款单片机数字时钟。
该数字时钟具有以下功能:1. 显示当前的小时、分钟和秒钟。
2. 可以通过按键进行时间的调整。
3. 每隔一秒钟左右,LED数码管上的数据会刷新一次,以显示最新的时间信息。
4. 当电源断开后,时钟芯片会自动保存当前时间信息,重新通电后,显示的时间信息仍然是正确的。
结论:通过本次实验,我们了解了单片机数字时钟的制作原理和步骤,并成功制作了一款数字时钟。
通过实验,我们深入了解了单片机的应用,也为我们今后的电子设计和制作提供了很好的基础。
单片机综合实验报告51电子时钟
一、实验内容:设计一个数字时钟,显示范围为00:00:00~23:59:59。
通过5个开关进行控制,其中开关K1用于切换时间设置(调节时钟)和时钟运行(正常运行)状态;开关K2用于切换修改时、分、秒数值;开关K3用于使相应数值加1调节;开关K4用于减1调节;开关K5用于设定闹钟,闹钟同样可以设定初值,并且设定好后到时间通过蜂鸣器发声作为闹铃。
选做增加项目:还可增加秒表功能(精确到0.01s)或年月日设定功能。
二、实验电路及功能说明1602显示器电路(不需接线)电子音响电路按键说明:按键键名功能说明K1切换键进入设定状态K2 校时依次进入闹钟功能是否启用,闹钟时,分秒,年,月,日及时间时,分,秒的设置,直到退出设置状态K3 加1键调整是否起用闹钟和调节闹钟时,分,秒,年,月,日,时间的时,分,秒的数字三、实验程序流程图:四、实验结果分析定时程序设计:单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。
如果MCS-51采用的12MHz晶体,则计数频率为1MHz,即每过1us的时间计数器加1。
这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。
MCS-51单片机的定时器/计数器具有4种工作方式,其控制字均在相应的特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器/计数器两种工作模式和4种工作方式。
定时器/计数器工作在方式0时,为13位的计数器,由TLX(X=0、1)的低5位和THX的高8位所构成。
TLX低5位溢出则向THX进位,THX计数溢出则置位TCON中的溢出标志位TFX.当定时器/计数器工作于方式1,为16位的计数器。
本设计师单片机多功能定时器,所以MCS-51内部的定时器/计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。
单片机数字时钟实训报告
一、实训目的本次实训旨在通过设计和实现单片机数字时钟,使学生掌握单片机的基本原理和应用技术,提高学生的动手能力和实践技能。
通过实训,使学生熟悉单片机的硬件结构、编程方法和调试技巧,了解数字时钟的设计原理和实现方法,培养学生的创新意识和团队协作能力。
二、实训内容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心得体会在整个课程设计完后,总的感觉是:有收获。
数字时钟实训报告功能
#### 一、引言随着科技的发展,电子产品的普及,数字时钟作为一种实用的电子设备,在人们的日常生活中扮演着越来越重要的角色。
为了提高同学们的实践能力,加深对电子技术的理解,我们进行了数字时钟的实训。
本报告将详细阐述数字时钟的功能及其实现过程。
#### 二、数字时钟的功能数字时钟具有以下主要功能:1. 时间显示:数字时钟能够准确显示当前的时间,包括时、分、秒。
小时采用24小时制,分钟和秒采用60进制。
2. 日期显示:除了显示时间,数字时钟还能够显示日期,包括年、月、日。
3. 校时功能:用户可以通过特定的按键对时钟进行校时,确保时钟显示的时间准确无误。
4. 闹钟功能:数字时钟具备闹钟功能,用户可以设定闹钟时间,当达到设定时间时,时钟会发出提示音。
5. 语音播报:部分数字时钟还具备语音播报功能,能够语音报时,为用户带来便捷。
6. 定时功能:数字时钟可以实现定时功能,如定时开关灯、定时开关空调等。
7. 时钟模式切换:数字时钟可以切换为不同模式,如12小时制、24小时制、AM/PM制等。
8. 低功耗设计:数字时钟采用低功耗设计,节能环保。
#### 三、数字时钟的实现数字时钟的实现主要涉及以下几个部分:1. 硬件电路:包括电源电路、时钟电路、显示电路、按键电路等。
- 电源电路:将220V交流电压转换为5V直流电压,为数字时钟提供稳定的电源。
- 时钟电路:采用555定时器构成多谐振荡器,产生1kHz的秒脉冲信号,驱动时钟电路运行。
- 显示电路:采用LED数码管或LCD显示屏,将时间、日期等信息以数字形式显示。
- 按键电路:包括校时按键、闹钟设定按键、定时按键等,用于控制时钟的功能。
2. 软件编程:利用C语言或汇编语言编写程序,实现时钟的计时、校时、闹钟、定时等功能。
- 计时程序:实现时钟的计时功能,包括秒、分、时的计数和进位。
- 校时程序:实现时钟的校时功能,包括时、分、秒的调整。
- 闹钟程序:实现闹钟的设定、启动和停止功能。
单片机数字钟实训报告
单片机数字钟实训报告摘要:本实训项目旨在设计并实现一个基于单片机的数字钟。
通过对单片机的学习和应用,我们成功地完成了数字钟的设计与制作。
本报告将从设计目标、硬件电路、软件程序以及实际操作等方面进行详细介绍和分析,以期对读者有所启发和帮助。
一、设计目标数字钟是一款常见而实用的电子设备,它能够精准地显示当前的时间,并具备闹钟和定时器等功能。
我们的设计目标是实现一个简洁、易用且功能齐全的数字钟,具备时钟、闹钟和定时器三种模式,并能够通过按键进行切换和设置。
二、硬件电路我们采用了8051系列单片机作为核心控制器,并搭配数码管、按键和蜂鸣器等外围电路。
其中,数码管用于显示时间和设置参数,按键用于切换模式和设置时间,蜂鸣器用于报警。
通过合理的连接和布局,我们成功地搭建了数字钟的硬件电路。
三、软件程序为了实现数字钟的各项功能,我们根据设计目标编写了相应的软件程序。
程序主要包括时钟模式、闹钟模式和定时器模式的切换与设置,时间的显示和更新等功能。
通过对按键的扫描和状态判断,我们能够根据用户的操作进行相应的响应和处理。
在程序的编写过程中,我们注重代码的可读性和可维护性,使其具备良好的扩展性和稳定性。
四、实际操作在完成硬件电路和软件程序的设计后,我们进行了实际的操作测试。
首先,我们通过按键进行模式的切换和时间的设置,验证了数字钟的基本功能。
其次,我们通过调整定时器的参数,测试了数字钟的定时器功能。
最后,我们设置了闹钟并验证了其报警功能。
实际操作的结果表明,我们的数字钟设计达到了预期的效果,并且具备了稳定可靠的性能。
五、总结与展望通过本次实训项目,我们深入学习了单片机的原理和应用,并成功地设计和制作了一个数字钟。
通过实际操作的过程,我们对数字钟的功能和性能有了更深入的了解。
然而,我们也意识到数字钟仍有一些不足之处,比如显示方式的改进和功能的扩展等。
因此,我们对未来的工作进行了展望,并提出了一些改进的建议,以期进一步完善和优化数字钟的设计。
单片机课程设计数字钟实验报告
单片机课程设计:电子钟一、实现功能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的一些特殊功能口,如下表所示:口管脚备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
单片机制作时钟实训报告
随着科技的不断发展,单片机作为一种集计算机技术、微电子技术和自动控制技术于一体的综合性技术,已经在各个领域得到了广泛的应用。
为了提高我们的实践能力和创新意识,我们选择了单片机制作时钟这一实训项目,通过实际操作来深入了解单片机的应用和编程技巧。
二、实训目的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. 电路连接示意图![电路连接示意图](circuit.png)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)。
单片机实训报告
——数字时钟
成员:
金龙: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 code
table[]={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();
}
}
}。