单片机时钟综合实验

合集下载

单片机时钟显示实训报告

单片机时钟显示实训报告

一、实训背景随着科技的不断发展,单片机技术得到了广泛应用。

单片机具有体积小、成本低、功能强大等特点,因此在电子设备中得到了广泛的应用。

本实训旨在通过设计一个基于单片机的时钟显示系统,让学生了解单片机的原理、编程方法和接口电路设计,提高学生的实践能力和创新意识。

二、实训目的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)将编写好的程序烧录到单片机中。

时钟综合实验,南京理工大学紫金学院单片机实验报告

时钟综合实验,南京理工大学紫金学院单片机实验报告

单片机实验报告实验名称:时钟综合实验姓名:学号:班级:通信时间:2013.12南京理工大学紫金学院电光系一、实验目的1、学习Proteus软件基本使用方法;2、掌握定时/计数器与外部中断工作原理;3、学习设计单片机控制的多位数码管扫描显示电路;4、理解数码管动态显示的原理。

二、实验原理AT89C51单片机为控制器,八位7段数码管分别显示小时的十位、小时的个位、连接符、分的十位、分的个位、连接符、秒的十位和秒的个位,其中数码管的位选口为P2口,段选口为P0口,小时、分和秒的能动态显示。

定时器实现1秒准确定时,外部中断0引脚外接键盘BUTTON1,实现手动校分功能;外部中断1外接键盘BUTTON2,实现清零功能。

三、实验内容根据实验任务设计要求,在Keil软件中实现程序编辑、编译与执行等操作。

对编译通过的过程可选择单步调试的方式来观察运行的结果,以及各个寄存器的值如何变化。

参考程序流程:主程序流程:开始→变量赋初值→定时器T1赋计数初值→设置外部中断控制字→开中断→开计数器→送位选字→送段选码→延时→送位选字,定时器T1中断流程:定时器T1赋计数初值→到1秒了吗?→Y秒加1 or N结束→到1分钟了吗?→Y秒清零 or N结束→分钟加1→到60分钟了吗?→Y分钟清零 or N结束→结束,外部中断0流程:分钟加1→到60分钟了吗?→Y分钟清零 or N结束→结束,外部中断1:分钟清零→秒清零→结束。

1、程序代码:#include<reg51.h>#define uint unsigned int#define uchar unsigned char//共阳 0-9uchar dis_dat[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar k,second,minute,secondl,secondh,minutel,minuteh;void init(){k=20;second=0;minute=0;secondl=0;minutel=0;secondh=0;minuteh=0;}void Timeinit(){TMOD=0x10;TH1=(65536-46082)/256;TL1=(65536-46082)%256;TR1=1;EA=1;ET1=1;EX0=1;EX1=1;IT0=1;IT1=1;}void delay(){uchar i,j;for(i=0;i<50;i++)for(j=0;j<100;j++);}void display(uchar a,b,c,d){P2=0x1f;P0=dis_dat[a];delay();P2=0x2f;P0=dis_dat[b];delay();P2=0x4f;P0=dis_dat[c];delay();P2=0x8f;P0=dis_dat[d];delay();}void main(){Timeinit();init();while(1){minuteh=minute/10;minutel=minute%10;secondh=second/10;secondl=second%10;display(minuteh,minutel,secondh,secondl); }}void Time1()interrupt 3{TH1=(65536-46082)/256;TL1=(65536-46082)%256; k--;if(k==0){k=20;second++;if(second==60){second=0;minute++;if(minute==60){minute=0;second=0;}}}}void int_0()interrupt 0 {minute++;if(minute==60){minute=0;}}void int_1()interrupt 2 {minute=0;second=0;}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. 了解单片机的基本工作原理和编程方法;2. 学习如何使用单片机设计并实现闹钟功能;3. 掌握数字时钟显示技术。

实验器材:1. 单片机实验箱;2. AT89C52单片机;3. LED数码管;4. 4位开关;5. 电源线;6. 连线线缆。

实验原理:本次实验使用单片机AT89C52来设计和实现闹钟功能。

单片机是一种微型电子计算机系统,具有高度集成、功能强大等特点。

数码管是一种常见的数字显示装置,适用于时钟、计时器等场合。

实验步骤:1. 将AT89C52单片机与LED数码管通过连接线连接起来,保证电源线的正负极连接正常。

2. 编写C程序,实现显示当前时间的功能。

通过编程可以将当前时间在数码管上显示出来。

3. 设定闹钟时间和闹铃的功能,通过编程实现。

当闹钟时间到达时,数码管上会显示闹钟时间,并通过蜂鸣器发出声音。

4. 调试程序,确保闹钟功能正常运行。

5. 完成闹钟的相关操作,包括设置闹钟时间、启动闹钟、关闭闹钟等功能。

实验结果:经过编程和调试,我们成功实现了微机原理闹钟的功能。

我们能够通过设置闹钟时间并启动闹钟来实现报时的功能。

当闹钟时间到达时,数码管上会显示相应的时间,并通过蜂鸣器发出声音,起到提醒作用。

实验总结:通过这次实验,我深入了解了单片机的基本工作原理和编程方法。

同时,我学会了使用单片机设计和实现闹钟功能,并掌握了数字时钟显示技术。

这次实验让我对单片机的应用有了更深刻的认识,并提高了我对数字电路设计和编程的能力。

同时,我还发现了实验过程中可能存在的问题和改进的空间。

例如,我可以进一步完善闹钟功能,加入更多的定时和报时功能,提高闹钟的多样化和实用性。

此外,我还可以优化程序的运行效率,提高系统的稳定性和响应速度。

总之,本次实验对我的学习和提高具有重要意义。

通过实践操作,我深入理解了微机原理闹钟的设计与实现,拓宽了我的知识面和实践能力。

我将继续深入学习和掌握微机原理和相关技术,为以后的学习和研究打下坚实的基础。

单片机实验报告数字时钟设计报告

单片机实验报告数字时钟设计报告

单片机实验报告数字时钟设计报告一、实验目的本次单片机实验的目的是设计并实现一个基于单片机的数字时钟。

通过该实验,深入了解单片机的工作原理和编程方法,掌握定时器、中断、数码管显示等功能的应用,提高综合运用知识解决实际问题的能力。

二、实验原理1、单片机选择本次实验选用了常见的 51 系列单片机,如 STC89C52。

它具有丰富的资源和易于编程的特点,能够满足数字时钟的设计需求。

2、时钟计时原理数字时钟的核心是准确的计时功能。

通过单片机内部的定时器,设定合适的定时时间间隔,不断累加计时变量,实现秒、分、时的计时。

3、数码管显示原理采用共阳或共阴数码管来显示时间数字。

通过单片机的 I/O 口控制数码管的段选和位选信号,使数码管显示相应的数字。

4、按键控制原理设置按键用于调整时间。

通过检测按键的按下状态,进入相应的时间调整模式。

三、实验设备与材料1、单片机开发板2、数码管3、按键4、杜邦线若干5、电脑及编程软件(如 Keil)四、实验步骤1、硬件连接将数码管、按键与单片机开发板的相应引脚通过杜邦线连接起来。

确保连接正确可靠,避免短路或断路。

2、软件编程(1)初始化单片机的定时器、中断、I/O 口等。

(2)编写定时器中断服务程序,实现秒的计时。

(3)设计计时算法,将秒转换为分、时,并进行进位处理。

(4)编写数码管显示程序,将时间数据转换为数码管的段选和位选信号进行显示。

(5)添加按键检测程序,实现时间的调整功能。

3、编译与下载使用编程软件将编写好的程序编译生成可执行文件,并下载到单片机中进行运行测试。

五、程序设计以下是本次数字时钟设计的主要程序代码片段:```cinclude <reg52h>//定义数码管段选码unsigned char code SEG_CODE ={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//定义数码管位选码unsigned char code BIT_CODE ={0x01, 0x02, 0x04, 0x08, 0x10,0x20, 0x40, 0x80};//定义时间变量unsigned int second = 0, minute = 0, hour = 0;//定时器初始化函数void Timer_Init(){TMOD = 0x01; //定时器 0 工作在方式 1 TH0 =(65536 50000) / 256; //定时 50ms TL0 =(65536 50000) % 256;EA = 1; //开总中断ET0 = 1; //开定时器 0 中断TR0 = 1; //启动定时器 0}//定时器 0 中断服务函数void Timer0_ISR() interrupt 1{TH0 =(65536 50000) / 256;TL0 =(65536 50000) % 256;second++;if (second == 60){second = 0;minute++;if (minute == 60){minute = 0;hour++;if (hour == 24){hour = 0;}}}}//数码管显示函数void Display(){unsigned char i;for (i = 0; i < 8; i++)P2 = BIT_CODEi;if (i == 0){P0 = SEG_CODEhour / 10;}else if (i == 1){P0 = SEG_CODEhour % 10;}else if (i == 2){P0 = 0xBF; //显示“”}else if (i == 3){P0 = SEG_CODEminute / 10;else if (i == 4){P0 = SEG_CODEminute % 10;}else if (i == 5){P0 = 0xBF; //显示“”}else if (i == 6){P0 = SEG_CODEsecond / 10;}else if (i == 7){P0 = SEG_CODEsecond % 10;}delay_ms(1);//适当延时,防止闪烁}}//主函数void main(){Timer_Init();while (1){Display();}}```六、实验结果与分析1、实验结果将程序下载到单片机后,数字时钟能够正常运行,准确显示时、分、秒,并且通过按键可以进行时间的调整。

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

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

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。

二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。

2.软件设计通过C语言编写单片机程序,用于实现时钟功能。

3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。

(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。

(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。

(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。

三、实验结果经过调试,电子时钟的各项功能都能够正常实现。

在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。

在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。

同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。

四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。

通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。

在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。

单片机设计时钟实训报告

单片机设计时钟实训报告

一、引言随着科技的不断发展,单片机技术在电子领域得到了广泛的应用。

为了提高学生的实践能力,培养实际工程应用能力,我们进行了单片机设计时钟实训。

本实训以AT89C51单片机为核心,通过学习时钟电路的设计、编程和调试,使学生掌握单片机在时钟设计中的应用,提高学生的动手能力和创新思维。

二、实训目的1. 掌握单片机的基本原理和编程方法;2. 熟悉时钟电路的设计和调试;3. 培养学生的实际工程应用能力和创新思维;4. 提高学生的团队协作能力和沟通能力。

三、实训内容1. 硬件设计(1)单片机选型:选用AT89C51单片机作为核心控制单元;(2)时钟电路:采用晶振电路作为时钟源,实现1Hz的基准时钟;(3)显示电路:采用LCD1602液晶显示屏,实现时间、日期和星期等信息显示;(4)按键电路:设计4个按键,分别用于设置时间、日期、星期和闹钟功能;(5)复位电路:采用上电复位和按键复位两种方式,保证系统稳定运行。

2. 软件设计(1)系统初始化:初始化单片机,设置波特率、定时器等;(2)时间显示:通过读取实时时钟芯片(如DS1302)的数据,显示时间、日期和星期;(3)按键处理:根据按键输入,实现时间、日期、星期和闹钟的设置与修改;(4)闹钟功能:当设定的时间到达时,通过蜂鸣器发出提示音。

3. 调试与优化(1)调试方法:使用Proteus软件进行仿真调试,观察程序运行状态,分析故障原因;(2)优化方法:针对仿真过程中出现的问题,优化程序代码,提高程序运行效率。

四、实训过程1. 硬件制作(1)按照设计图纸,焊接电路板;(2)连接晶振、LCD显示屏、按键和蜂鸣器等元器件;(3)调试电路,确保各元器件正常工作。

2. 软件编写(1)使用Keil C51软件编写程序,实现时钟显示、按键处理和闹钟功能;(2)编译程序,生成HEX文件。

3. 调试与优化(1)使用Proteus软件进行仿真调试,观察程序运行状态;(2)针对仿真过程中出现的问题,优化程序代码,提高程序运行效率;(3)将优化后的程序烧录到单片机中,进行实际运行测试。

单片机数码时钟实训报告

单片机数码时钟实训报告

一、实训目的本次单片机数码时钟实训旨在通过实际操作,让学生了解单片机的应用,掌握单片机数码时钟的设计与实现方法,提高学生的实践操作能力和创新思维。

二、实训内容1. 硬件设计(1)单片机:选用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.学习使用单片机实现多功能时钟功能;3.熟悉各种外设的接口和控制;4.提高团队合作和实践能力。

实验原理:本实验设计一个多功能时钟,包括显示时间、日期、闹钟设置和倒计时等功能。

其中,时钟和日期部分主要通过实时时钟模块和数码管实现,闹钟设置通过按键控制和时间比较实现,倒计时通过计时器模块和数码管实现。

实验器材和软件:硬件:STC89C52单片机、DS1302实时时钟模块、数码管、按键、电源、电阻、电容等;软件:Keil C51集成开发环境。

实验步骤:1.将STC89C52单片机与DS1302实时时钟模块以及数码管等器件按照电路图连接起来;2. 使用Keil C51编写程序代码,包括时钟和日期显示、按键输入检测、闹钟设置和倒计时等功能;4.调试成功后,将单片机与显示模块连接,观察时钟和日期显示是否正确;5.进行按键测试,验证闹钟设置和倒计时功能是否正常;6.完成以上步骤后,整理实验结果并撰写实验报告。

实验结果:经过实验,我们成功实现了多功能时钟的设计。

数码管正确显示了当前的时钟和日期信息,并能够通过按键设置闹钟和倒计时功能。

测试结果表明,时钟和日期显示准确无误,闹钟设置和倒计时功能正常可用。

实验总结:通过本次实验,我们深入了解了单片机的基本原理和使用方法,并掌握了多功能时钟的实现原理和方法。

在实验过程中,我们充分发挥了团队合作和实践能力,共同解决了实验中遇到的问题。

通过实验,我们不仅加深了对单片机的理解,更提高了编程和电路设计的能力。

总体而言,本次实验让我们更加熟悉了单片机的应用,并对多功能时钟有了更加全面的了解。

在今后的学习和实践中,我们将充分运用所学知识,不断提升自己的能力。

单片机电子时钟实验报告

单片机电子时钟实验报告

单片机电子时钟实验报告一、实验目的:1.了解单片机的基本知识和工作原理;2.掌握单片机的时钟生成方法;3.实现一个基本的电子时钟。

二、实验器材:1.STC89C52单片机开发板;2.LCD1602液晶显示屏;3.外部晶体振荡器;4.面包板、杜邦线等。

三、实验原理:单片机是由一个集成电路芯片组成的微型计算机系统。

它具有高度集成和灵活应用的特点,被广泛应用于各种电子设备中。

STC89C52是一种常见的单片机,具有可编程的特点,可以通过编写程序实现各种功能。

为了实现电子时钟功能,我们需要了解单片机的时钟生成方法。

单片机一般内部包含一个振荡器电路,通过外部晶体振荡器提供的时钟信号来控制单片机的工作速度。

具体实现时钟功能需要通过编写程序生成一个固定频率的脉冲信号,并通过控制液晶显示屏显示当前的时间。

四、实验步骤:1.将STC89C52单片机开发板、液晶显示屏、外部晶体振荡器等连接起来,按照电路图进行布线。

2.编写程序,通过设置定时器,生成1毫秒的定时中断信号。

在中断程序中,获取当前的系统时间,并进行相应的显示。

4.观察液晶显示屏,检查是否显示当前的时间,如正常显示,则实验成功。

五、实验结果与分析:经过实验,我们成功实现了一个简单的电子时钟。

液晶显示屏能够正常显示当前的时间,而且精度较高。

实验过程中,我们对单片机的工作原理和编程方法有了更深入的了解。

六、实验心得与体会:通过这次实验,我掌握了单片机的基本知识和工作原理,并实际编写了一个电子时钟程序。

通过实际操作,我对单片机的应用有了更深入的理解,也提高了动手能力和解决问题的能力。

在今后的学习和工作中,我将继续深入学习单片机的原理和应用,不断提高自己的技术水平。

单片机综合实验报告

单片机综合实验报告

一、实验内容:设计一个数字时钟,显示范围为00:00:00~23:59:59。

通过5个开关进行控制,其中开关K1用于切换时间设置(调节时钟)和时钟运行(正常运行)状态;开关K2用于切换修改时、分、秒数值;开关K3用于使相应数值加1调节;开关K4用于减1调节;开关K5用于设定闹钟,闹钟同样可以设定初值,并且设定好后到时间通过实验箱音频放出一段乐曲作为闹铃。

选做增加项目:还可增加秒表功能(精确到0.01s)或年月日设定功能。

电路:(只连粗实线部分)二、实验电路及功能说明数码LED显示器电路(不需接线)电子音响电路按键键名功能说明K1 切换键校分后切换到校时校时后切换到时钟状态闹钟设定分值后切换到设定时值闹钟设定时值后切换到时钟状态K2 校时进入校时状态K3 加1键校分或校时的时候使其加1递增K4 减1键校分或校时的时候使其减1递减K5 闹钟设定键进入闹钟设定状态三、实验程序流程图:本实验设计了基于单片机的多功能数字钟的总体方案,对装置软、硬件的设计作了详细研究,并进行了相应的软件和硬件调试。

该数字钟采用AT89C51单片机作为核心控制芯片,完成整点报时、显示、定时功能。

整个系统分为几个小的电路,分别实现各自的功能。

晶振电路,12MHZ晶振和两个30pF 电容构成并连谐振接到X1和X2口。

复位电路,在RST复位输入引脚上接一10uF电容至VCC端,下接一个51K电阻到地。

控制电路,4个按键控制,进行调时,定时,复位操作。

显示电路,用6位7段数码管进行时,分,秒的显示。

装置中软件设计部分包括一个主程序、四个模块程序和二个子程序,各自执行自己的功能,完成定时,调时等设操作。

本文从整体到部分详细介绍了数字钟的设计,在比较重要的部分进行了详细的论述,并且给出了程序框图及说明。

软件程序整个流程图如下:四、实验结果分析定时程序设计:单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。

单片机数字时钟实验报告

单片机数字时钟实验报告

单片机数字时钟实验报告引言:数字时钟是现代人们生活中不可或缺的物品之一。

现代数字时钟的核心是单片机,而且数字时钟的制作也是单片机初学者的必备实验之一。

本文将详细介绍单片机数字时钟的制作过程和原理。

实验原理:数字时钟的原理非常简单,它由单片机、时钟芯片、LED数码管等元件组成。

单片机通过时钟芯片来获取时间信息,并将时间信息通过端口输出给LED数码管,从而显示当前时间。

单片机的主要作用是控制时钟芯片的读取和LED数码管的显示。

实验材料:1. 单片机:STC89C522. 时钟芯片:DS13023. LED数码管:共阳极4位LED数码管4. 电路板、电阻、电容、晶体振荡器、按键、排针等元件实验步骤:1. 确定电路原理图:根据实验原理,确定单片机、时钟芯片和LED 数码管之间的电路连接方式。

2. 绘制电路布局图:将电路原理图转换为真实的电路布局图,并根据元件大小和数量选择合适的电路板。

3. 焊接电路:根据电路布局图进行电路的焊接,并进行电路的检查和修正。

4. 编写程序:根据实验原理编写单片机程序,并将程序下载到单片机中。

5. 测试程序:将电路接通电源后,通过按键和LED数码管来测试程序的正确性和稳定性。

实验结果:经过实验,我们成功制作了一款单片机数字时钟。

该数字时钟具有以下功能:1. 显示当前的小时、分钟和秒钟。

2. 可以通过按键进行时间的调整。

3. 每隔一秒钟左右,LED数码管上的数据会刷新一次,以显示最新的时间信息。

4. 当电源断开后,时钟芯片会自动保存当前时间信息,重新通电后,显示的时间信息仍然是正确的。

结论:通过本次实验,我们了解了单片机数字时钟的制作原理和步骤,并成功制作了一款数字时钟。

通过实验,我们深入了解了单片机的应用,也为我们今后的电子设计和制作提供了很好的基础。

单片机实验报告(闹钟)

单片机实验报告(闹钟)

单片机实验(闹钟部分修改版)注:第一个是利用延时程序做的定时,循环太多定时不够精确;这一个用的是出栈和入栈的算法进行的定时,可以增加定时的精度。

程序目的说明:这是一个闹钟程序,当按下K1的时候,开始计时(说明:为了方便观察,我以10s 中作为基本定时进行演示,如果需要其他定时可以通过修改部分程序得到),时间达到后,7段显示器和LED 灯同时闪烁,若序号归零,则按下K2计时则停止。

然后再按下K1计时又从新开始,以此类推。

电路图:LED6位七段码显示灯,从左到往右两位一组,分别显示HOUR, MINUTE,SECOND.因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻。

排阻就是好多电阻连载一起,他们有一个公共端.由于是上拉电阻,所以1接VCC 。

晶振电路,帮助减小计时过程中产生的误差。

K1开关和P1.1口相连,K2和P2.2口相连,分别用于控制计时的开启和关闭LED 灯,计时到达的时候LED 灯闪烁,计时t 停止时LED 灯熄灭。

程序段:程序说明:1.直接将开关定义为各个接口,可以方便之后程序中利用各个开光的状态进行跳转。

2.利用了计数/定时器0作为外部中断,当中断产生,自动跳入计时状态;3.此段定义的是而二进制的时间存储单元。

4.此段定义的是需要计时(亮灯)的时间,我设定的10s亮灯,所以s为0ah,其他的均为00h5.此段定义的是BCD码得时间,为了可以在七段显示器上面显示6.主程序中要调用闹钟程序timebear检测设定时间是否到达和显示时间的子程序display1.7.timebear程序段用于检测闹铃设定的时间是否达到,依次从second(s),minute(m),hour (h)检测,出现不匹配的就不再向下执行,若时间匹配就跳转至timecome。

8.timecome程序段主要控制P3.7口,时间达到的时候,使LED灯和7短码显示器点亮并闪烁,如果要不要灯和七段码显示器闪烁则删除:mov r7,#250t2:mov r6,#124t3:djnz r6,t3djnz r7,t2setb p3.7这一段程序即可,这一段相当于机器周期,是灯的闪亮延时,就出现了闪烁的状态。

单片机实验报告(电子时钟)

单片机实验报告(电子时钟)

一、课程设计的内容和要求:1了解单片机的种类,掌握单片机的工作原理;2 掌握利用单片机进行系统设计的方法;3掌握利用protel进行原理图设计和PCB设计的方法;4学会进行单片机硬件调试和软件调试;5 了解单片机系统整个设计开发流程。

二、设计装置功能1、用单片机实现设计要求(1)实现功能:①正常的24小时制的电子表功能显示(时/分/秒)。

②任意时间(时/分/秒)闹钟时刻的设置并在设定时刻响铃。

(2)所使用器件:STC 89C52RC单片机1个、2位共阳极数码管3个、蜂鸣器1个、74LS138一片、74LS47一片、74HC04一片、电阻、电容及其他辅助电子元件。

(3)显示时间与闹钟时刻的设置:单片机的人机操作部分由六个按钮组成。

从电子钟电路板上(从左到右)分别是:①单片机复位键②闹钟开关③小时位累加键④分钟位累加键⑤秒钟位累加键⑥闹钟/时间显示切换键按键说明:复位键——把3个2位数码管显示数字全部清零。

闹钟开关键——按下键,闹钟开关模式切换。

时针位累加键——按下键,则实现时针位的累加00-23(累加循环)。

分针位累加键——按下键,则实现分针位的累加00-59(累加循环)。

秒针位累加键——按下键,则实现秒针位的累加00-59(累加循环)。

闹钟/时间显示切换键——按下键,能够实现数码管闹钟和时间两种显示功能的切换。

三、设计问题分析面对的问题主要是两方面:一个是软件的设计,也就是实现计时定时的控制功能的程序编辑,在电脑上模拟需要实现的功能;另一个是硬件的设计,需要我们自己购买器件、设计并焊接电路板。

而更为重要的一步是将软件、硬件相结合,做好电路后,我们试着把程序写入芯片测试,然而没有获得应该有的显示,接着我们多次检查电路,修改程序,在不断调试中终于实现正确显示。

四、设计思路本次设计的系统以动态显示显示时分秒模块,它能显示正确的时间,而且所显示时间与北京时间相同,基本做到同步,显示清晰明亮,可读性强。

系统主程序开始后,首先是对系统环境初始化,设置好时分秒后系统开始运行;然后可打开闹钟,预设响铃的时刻,计时系统到该时刻后自动响设定铃声。

单片机 电子时钟实验报告

单片机 电子时钟实验报告

电子时钟设计实验报告姓名:学号:班级:指导老师:一、实验基本要求利用定时计数器,设计一个电子时钟,使用前面使用过的显示子程序。

从左到右依次显示时分秒。

有两种方法实现,一种是在中断程序中计数,产生时分秒计数,送显示缓冲区。

另一种是中断程序每一秒清除一个位变量,而主程序通过监视位变量的变化来知道每秒的时间。

进而要求:1.加入时间调整程序,使用两个或三个按钮,调节当前的时间。

类似平常使用的电子表。

可以让正在调整的位闪烁显示。

2.可以加入一个闹钟钟设置,当所定的时间到时,产生断续的蜂鸣声。

可以加入日历的功能。

二、最终实现的功能1、日历(年、月、日)显示与数值的修改2、时钟(时分秒)显示及数值的修改3、闹钟设定及数值的修改、到时响铃4、秒表计时及秒表重置三、设计核心思想程序设计中设置定时器0作为基本时钟,中断每50ms进入一次,每20次中断即1秒,秒加一,在中断服务程序中执行60秒进位、60分进位。

通过独立式键盘,进行各项数值调整、定时器开启和暂停以及重置。

各个功能在分立的子函数中实现,在主函数中进行调用,结构清晰。

四、设计亮点1、按键功能通过“按下时间的长短”丰富在按键消抖结束后,再次判断按键按下的同时,记录按下时间的长短。

短按实现数值的修改、计时暂停及启动,长按实现模式的切换和重置。

2、闹铃设置为一段音乐通过查阅网上资料,将蜂鸣器的响声富有变化,从而实现一段有旋律的音乐。

3、函数独立设计的程序中包含以下函数模块:延时、初始化、时间(日历、闹钟)显示、键盘扫描、秒表显示、定时器0中断函数(时钟)、定时器1中断(秒表)、音乐、闹钟及主函数。

4、各功能的实现采用模块化处理模式1:时钟显示;模式2:日历显示;模式3:秒表显示;模式4:闹钟显示。

五、实验中的问题总结LED数码管显示部分小结:(1)要设置段选(P2.6)和位选(P2.7)。

(2)段选和位选需按照书上讲的逻辑编写。

虽然P0口作为段选,P2口作为位选,但是程序设计中位选时要将值赋给P0口(打开位选→赋位选→关闭位选)。

单片机_ 电子时钟实验报告[1]

单片机_ 电子时钟实验报告[1]

单片机_ 电子时钟实验报告[1]
本次实验是使用单片机设计的电子时钟,它可以实现24小时的时间显示。

本次实验
的实现过程中,使用到了微处理器核心处理器8051,它具有运算能力强、指令结构简单等优点,是单片机的经典之作。

实验的完成过程中,首先需要安装实验所需的部件。

具体包括:微处理器核心处理器8051、七段数码管、5V电源模块和按键模块。

接下来需要连接电子组件,经过排序,电路原理图为:电池供电。

通过805单片机的定时,实现对时钟的运行。

接着就可以进行编程。

此处使用的编程语言是C语言。

在编程的过程中,首先要设定
主函数,确定程序的执行流程。

接着将要实现的功能分解为若干个子函数,完成编程工作。

接下来,编写完代码后,就可以验证本次实验。

实际运行时,将电子组件按照设计的
电路原理图进行对接,按指定的代码运行,程序会自动运行,最后显示出现电子时钟的数
字显示。

以上就是本次实验的全部过程。

在本次实验中,我们所学到的主要的内容是:微处理
器的基础和指令;使用C语言编写程序;电子时钟的设计原理;实现电子时钟的电路原理图。

整个实验过程锻炼了我们的动手能力,为我们今后接触更复杂的设计工作打下了基础。

单片机多功能时钟实验报告

单片机多功能时钟实验报告

单片机实验报告2020年4月12日一.实验要求(内容)本实验要求做出时刻显示包括时分秒,可调时刻,日期,日期转动显示,闹铃设置及到时响铃,倒计时,秒表计时和播放音乐等功能.这些功能需要的单片机知识有单片机大体寻址方式及汇编程序设计,按时与中断,数码管扫描显示,键盘扫描检测及音乐播放的大体原理等.二.硬件环境与工作原理(接口地址)设备选择了Atmel的AT89C51,设置波特率38400,频率11.0592MHz,数码管段选地址:8FFFH,数码管位选地址:9FFFH,段选和位选驱动都为高电平有效.蜂鸣器P1.6,为高电平有效.4*4的键盘复用了数码管位选地址8FFFH,写信号(/WR)操纵行,读信号(/RD)操纵列.三.资源利用键盘用了16个.按时中断T0及T1.寄放器R0~R7,贮存器如下.贮存变量概念如下:CLK EQU 20H.0CEK EQU 20H.1HOUR EQU 40HMIN EQU 41HSEC EQU 42H ;存放秒钟变量N EQU 43H ;存放5ms计数值CHH EQU 44HCMM EQU 45HCSS EQU 46H ;闹铃设置秒钟变量RUN EQU 23HDAY EQU 24H ;日期变量MONTH EQU 25HYEARL EQU 26HYEARH EQU 27HBUF1 EQU 28H ;显示缓冲区BUF2 EQU 29HBUF3 EQU 2AHBUF4 EQU 2BHBUF5 EQU 2CHBUF6 EQU 2DHBUF7 EQU 2EHBUF8 EQU 2FHBUF9 EQU 30HBUF10 EQU 31HBUF11 EQU 32HCHH_D EQU 48H ;倒数时间小时数CMM_D EQU 49HCSS_D EQU 4AHSTOP_S EQU 4BH ;秒表STOP_M EQU 4CHSTOP_MS EQU 4DHSEG1 EQU 50H ;数码管SEG2 EQU 51HSEG3 EQU 52HSEG4 EQU 53HSEG5 EQU 54HSEG6 EQU 55HSEG7 EQU 56HSEG8 EQU 57HTEMP EQU 58H ;临时变量;蜂鸣器四.程序原理与框图第一部份是变量概念区,第二部份是主函数,包括初始化和键盘循环检测.第三部份是子函数区,第四部份为常数区.子函数包括按时器初始化,年月日转换,数码管扫描显示,键盘操作,调整时刻,设置闹铃,闹铃时刻转换,检查闹铃是不是到,闹铃到了响应,倒计时程序,日期转换,日期扫描显示,日期设置,闰年判定,秒表子程序,音乐,响音乐时的显示和3个延迟子函数.主函数流程:主函数代码:MAIN:ACALL INITALLACALL INIT_TIMERMAINLOOP: ;循环区ACALL CONVACALL CLK_ONACALL SEG_DISP;设置时刻ACALL KEYBOARD ;DU DI 1 JIANCJNE A,#00H,M1ACALL SET_TIMEJMP MAINLOOP ;设置闹铃时间M1:CJNE A,#01H,M2ACALL SET_CLKJMP MAINLOOPM2: ;闹钟开关CJNE A,#0DH,M3CPL CLKJNB CLK,M2_1 ;闹铃启动LCALL BZLCALL BZJMP MAINLOOPM2_1:LCALL BZ ;闹铃停止JMP MAINLOOPM3: ;设置倒计时CJNE A,#0BH,M4ACALL SET_DOWNJMP MAINLOOPM4: ;滚动日期CJNE A,#0EH,M5ACALL DATE_DISPJMP MAINLOOP ;调整日期M5:CJNE A,#02H,M6ACALL DATA_SETJMP MAINLOOP ;秒表M6:CJNE A,#03H,M7ACALL STOPJMP MAINLOOPM7: CJNE A,#0AH,M8ACALL MUSICJMP MAINLOOPM8:JMP MAINLOOP秒表原理及流程:为了秒表计时的准确,利用了按时器作为时刻源,由于按时器为5ms按时,故先需要对它2分频,采纳奇偶方式分频.然后ms位满100进1,s位满60进1.(流程描述)利用按时器依照频率和距离产生高低转变的方波信号,使扬声器不断置高低电平,从而发声.碰到停止符,那么暂停发声,当下一个音符到来的时候,再打开按时器,继续产生方波,驱动蜂鸣器发音.<<天空之城>>译为频率和距离时刻的十六进制:DB 0FDH,0C6H,02H,0FEH,02H,02HDB 0FEH,2AH,04H,0FEH,02H,02HDB 0FEH,2AH,04H,0FEH,84H,04HDB 0FEH,02H,02HDB 00H,00H,04HDB 0FDH,08H,02H,0FDH,08H,02HMiaobiao:初始化数据Readkey;If(key==start) goto start;If(key==end) goto end;Start:读取定时器N;If(N为偶数) ms加一;Readkey;If(key==pause) goto pause;If(key==end) goto end;Pause:Readkey;If(key==start) goto start;If(key==end) goto end;End:初始化数据;Return;DB 0FDH,0C6H,03H,0FDH,80H,02HDB 0FDH,0C6H,04H,0FEH,2AH,04HDB 0FDH,80H,04DB 00H,00H,04HDB 0FDH,08H,02H,0FDH,08H,02HDB 0FDH,30H,03H,0FDH,08H,02HDB 0FDH,30H,02H,0FEH,2AH,03HDB 0FDH,08H,04HDB 00H,00H,04HDB 0FEH,2AH,02H,0FEH,2AH,02HDB 0FEH,2AH,03H,0FEH,02H,03HDB 0FDH,30H,02H,0FDH,30H,04HDB 0FEH,02H,04H,0FEH,02H,04HDB 0FFH,0FFH五.操作说明键位安排: S0到S15别离代表各键位值;S0为进入时刻设置和完成返回键;S1为进入闹铃设置和完成返回按键;S2为进入日期设置和完成按键;S3为进入秒表和退出按键;S11为进入倒计时和退出键;S4,S8,S12别离为年月日及时分秒家一按键,S5,S9,S13别离为年月日及时分秒减一按键;S6为闹钟开关键;S10为日期转动键,S14为播放音乐按键.具体见图.(键位安排)六.调试与实际运行结果调试结果: 调试进程中没有什么错误.运行结果: 所有功能皆可完美的实现,固然还存在着一些小错误和可改良的地址.能够改良的地址:1.秒表忘记了清零的键,故功能不全,能够加入.2.在音乐响完后蜂鸣器继续发声,尽管解决过,但偶然还会显现问题,缘故不明.3.键盘由于利用次数多而发生不灵的现象,可改变键盘除抖和延迟时刻加以优化.4.按时器1的按时刻隔太短,故系统负荷较重.可更改计时模式,增大距离.编译结果: Program Size: data=8.0 xdata=0 code=5453七.总结与体会这是单片机大体编程练习,未涉及硬件,因此是超级大体的.在实际的工作中,如此的简单程序只能做个电子表,而这种产品已经充满着市场,略微学习过的人都会做,因此是没有经济价值的.故对学习单片机的学习才只是个开头,以后的学习要多向实际应用进展.做他人可不能做的,才能成为高手.这次是用汇编语言做的,而C语言对汇编来讲是有他自己的优势的,因此下次应该练习用C语言写程序,以后学习综合利用C和汇编写程序,才能综合二者优势,提高编程效率.再有,硬件很重要,可不能单片机硬件确实是外行.总之在繁重的专业课之余,找时刻学习单片机!附录:ORG 0000HJMP MAINORG 000BHJMP T0_SRVORG 1000HCLK EQU 20H.0CEK EQU 20H.1HOUR EQU 40HMIN EQU 41HSEC EQU 42H ;存放秒钟变量N EQU 43H ;寄存5ms计数值CHH EQU 44HCMM EQU 45HCSS EQU 46H ;闹铃设置秒钟变量RUN EQU 23HDAY EQU 24HMONTH EQU 25HYEARL EQU 26HYEARH EQU 27HBUF1 EQU 28HBUF2 EQU 29HBUF3 EQU 2AHBUF4 EQU 2BHBUF5 EQU 2CHBUF6 EQU 2DHBUF7 EQU 2EHBUF8 EQU 2FHBUF9 EQU 30HBUF10 EQU 31HBUF11 EQU 32HSEC0 EQU 47H ;存放旧的秒数CHH_D EQU 48H ;倒数时间小时数CMM_D EQU 49HCSS_D EQU 4AHSTOP_S EQU 4BH ;秒表STOP_M EQU 4CHSTOP_MS EQU 4DHSEG1 EQU 50H ;数码管SEG2 EQU 51HSEG3 EQU 52HSEG4 EQU 53HSEG5 EQU 54HSEG6 EQU 55HSEG7 EQU 56HSEG8 EQU 57HTEMP EQU 58H;***************************************主程序区****************************** INITALL:CLR CEKCLR CLKMOV N,#0MOV S EC,#55 ;时刻MOV M IN,#19MOV H OUR,#02MOV CHH,#2 ;闹钟MOV CMM,#20MOV CSS,#0MOV CHH_D,#0 ;倒计时MOV CMM_D,#0MOV CSS_D,#0MOV DAY,#06 ;日期MOV MONTH,#03MOV YEARL,#11MOV YEARH,#20MOV TEMP,#033HRETMAIN:ACALL INITALLACALL INIT_TIMERMAINLOOP: ;循环区ACALL CONVACALL CLK_ONACALL SEG_DISP;设置时刻ACALL KEYBOARD ;DU DI 1 JIAN CJNE A,#00H,M1ACALL SET_TIMEJMP MAINLOOP ;设置闹铃时间M1:CJNE A,#01H,M2ACALL SET_CLKJMP MAINLOOPM2: ;闹钟开关CJNE A,#0DH,M3CPL CLKJNB CLK,M2_1 ;闹铃启动LCALL BZLCALL BZJMP MAINLOOPM2_1:LCALL BZ ;闹铃停止JMP MAINLOOPM3: ;设置倒计时CJNE A,#0BH,M4ACALL SET_DOWNJMP MAINLOOPM4: ;滚动日期CJNE A,#0EH,M5ACALL DATE_DISPJMP MAINLOOP ;调整日期M5:CJNE A,#02H,M6ACALL DATA_SETJMP MAINLOOP ;秒表M6:CJNE A,#03H,M7ACALL STOPJMP MAINLOOPM7: CJNE A,#0AH,M8ACALL MUSICJMP MAINLOOPM8:JMP MAINLOOP;-------------------------按时器T0模式0计时---------------------------INIT_TIMER:;初始化按时器,有效按时器T0模式0计时MOV TMOD,#00H ;设置按时器T0模式0MOV IE,#82H ;启用按时器T0中断产生MOV TL0,#00H ;加载初始化数据MOV TH0,#70HSETB TR0 ;启动按时器0开始计时RETT0_SRV: ;定时器T0中断程序每隔5ms中断一次PUSH ACCMOV TL0,#00H;重加载初始化数据MOV TH0,#70HINC N ;加1;秒输出MOV A,NCJNE A,#200,TT1MOV N,#0INC SEC ;秒计数加1MOV A,SECCJNE A,#60,TT1 ;是不是1min到了;分输出INC MIN ;分计数加1MOV SEC,#0MOV A,MINCJNE A,#60,TT1 ;是不是1h到了;时输出INC HOURMOV MIN,#0MOV A,HOURCJNE A,#24,TT1 ;是否1天到了;天输出INC DAYMOV HOUR,#0MOV DPTR,#MONTHTABMOV A,MONTHMOVC A,@A+DPTRMOV B,DAYCJNE A,B,TT1;月输出;是否1月到了INC MONTHMOV DAY,#1MOV A,MONTHCJNE A,#13,TT1 ;是否1年到了;年输出INC YEARLMOV MONTH,#1MOV A,YEARLCJNE A,#100,TT1INC YEARHMOV YEARL,#0MOV A,YEARHCJNE A,#100,TT1MOV SEC,#0HMOV MIN,#0HMOV HOUR,#0HMOV DAY,#1HMOV MONTH,#1HMOV YEARL,#0HMOV YEARH,#0HTT1: POP ACCRETICONV:MOV D PTR,#SEGTABMOV A,SECMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG2,AMOV A,BMOVC A,@A+DPTRMOV S EG1,AMOV A,MINMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG5,AMOV A,BMOVC A,@A+DPTRMOV S EG4,AMOV A,HOURMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG8,AMOV A,BMOVC A,@A+DPTRMOV S EG7,AJNB CEK,CLKOFFMOV SEG3,#80HMOV SEG6,#80HJMP ENDINGJNB CLK,CLKOFFMOV S EG3,#0C0HMOV S EG6,#0C0HRETCLKOFF:MOV S EG3,#40HMOV S EG6,#40HENDING: RET;-----------------------------数码管扫描显示-------------------------------- SEG_DISP:PUSH 00HPUSH 06HMOV R0,#SEG1MOV R6,#08HMOV A,#00HMOV R2,#01HSEG_LOOP:MOV D PTR,#9FFFHMOV A,@R0INC R0MOVX @DPTR,AMOV D PTR,#8FFFHMOV A,R2MOVX @DPTR,ARL AMOV R2,ALCALL DLY400USMOV A,#00HMOVX @DPTR,ADJNZ R6,SEG_LOOPPOP 06HPOP 00HRET;---------------------4*4键盘区------------------------- KEYBOARD:MOV D PTR,#9FFFHMOV A,#00HMOVX @DPTR,ALCALL KEY_SCANJNZ CHUDOU ;除抖LJMP END_KEYBOARD CHUDOU:LCALL DLY10MSLCALL KEY_SCANJNZ KEY_READ ;扫描LJMP END_KEYBOARDKEY_READ:MOV R3,#01HMOV B,#00HMOV A,R3KP4: MOVX @DPTR,AMOVX A,@DPTRJNB ACC.0,K1MOV A,#00HLJMP KP5K1: JNB ACC.1,K2MOV A,#04HLJMP KP5K2: JNB ACC.2,K3MOV A,#08HLJMP KP5K3: JNB ACC.3,NEXTMOV A,#0CHPUSH ACCKP3: LCALL DLY10MSLCALL KEY_SCANJNZ KP3POP ACCRETNEXT: INC BMOV A,R3JB ACC.3,END_KEYBOARDRL AMOV R3,ALJMP KP4END_KEYBOARD:MOV A,#0FFHRETKEY_SCAN:MOV D PTR,#8FFFHMOV A,#0FHMOVX @DPTR,AMOVX A,@DPTRANL A,#0FHRET;--------------调整时刻子程序-----------------------------------SET_TIME:SETB CEKCLR TR0 ;定时器工作暂停ACALL CONVACALL SEG_DISPKEY0:LCALL SEG_DISP ;扫描显示LCALL KEYBOARDCJNE A,#04H,KEY1 ;未按下S1键,那么继续扫描;S1小时调整INC HOURMOV A,HOURCJNE A,#24,L11 ;是否24小时到了MOV HOUR,#0H ;小时变量清零L11:ACALL CONV ;转换显示数据ACALL SEG_DISP ;扫描显示JMP KEY0KEY1:CJNE A,#08H,KEY3 ;未按下S2键,则继续扫描INC MINMOV A,MINCJNE A,#60,L21 ;是否60min到了MOV MIN,#0H ;分钟变量清零L21:ACALL CONVACALL SEG_DISPJMP KEY0KEY3:CJNE A,#0CH,KEY2 ;未按下S2键,则继续扫描;MIAO调整INC SECMOV A,SECCJNE A,#60,L31 ;是否60MIAO到了MOV SEC,#0H ;变量清零L31:ACALL CONVACALL SEG_DISPJMP KEY0KEY2:CJNE A,#00H,KEY0 ;未按下S3键,那么继续扫描SETB TR0 ;启动按时器CLR CEKRET;----------------设置闹铃时刻-----------------------------------;设置闹铃时刻SET_CLK:ACALL CONVA ;加载闹铃时刻数据N0:ACALL SEG_DISPACALL KEYBOARDCJNE A,#04H,N1 ;未按下S1键那么继续扫描;S1调整小时INC CHHMOV A,CHHCJNE A,#24,N11MOV CHH,#0N11:ACALL CONVAACALL SEG_DISPJMP N0N1:CJNE A,#08H,N2 ;未按下S2键则继续扫描;S2调整分钟MOV A,CMMCJNE A,#60,N21MOV CMM,#0N21:ACALL CONVAACALL SEG_DISPJMP N0N2:CJNE A,#01H,N0 ;未按下S3键则继续扫描;S3设置完成ACALL CONVRET;-------------------------加载闹铃时刻数据----------------------- CONVA:;转换数据MOV DPTR,#SEGTABMOV A,CSSMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG2,AMOV A,BMOVC A,@A+DPTRMOV S EG1,AMOV S EG3,#80HMOV A,CMMMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG5,AMOV A,BMOVC A,@A+DPTRMOV S EG4,AMOV S EG6,#80HMOV A,CHHMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG8,AMOV A,BMOVC A,@A+DPTRMOV S EG7,ARET;-------------------检查闹铃时刻处置--------------------------CLK_ON:JB CLK,TI3RETTI3:MOV A,HOURMOV B,CHHCJNE A,B,BK ;检查闹铃小不时刻MOV A,MINMOV B,CMMCJNE A,B,BK ;检查闹铃分钟时间MOV A,SECMOV B,CSSCJNE A,B,BK ;检查闹铃秒钟时刻ACALL TIME_OUT ;调用执行检查闹铃时间处理子程序BK:RET;---------------------执行闹铃时刻处置----------------------TIME_OUT: ;闹铃时间到了LCALL MUSIC ;蜂鸣器发声MOV TMOD,#00HMOV IE,#82HACALL CONVACALL SEG_DISPRET;********************倒计时程序;设置倒计不时刻SET_DOWN:ACALL DOWN_CONVACALL SEG_DISPS0:ACALL SEG_DISPACALL KEYBOARDCJNE A,#0CH,S12INC CSS_DMOV A,CSS_DCJNE A,#60,S11MOV CSS_D,#0INC CMM_DS11:ACALL DOWN_CONVACALL SEG_DISPJMP S0S12:CJNE A,#0DH,S2DEC CSS_DMOV A,CSS_DCJNE A,#0,S21MOV CSS_D,#60S21:ACALL DOWN_CONVACALL SEG_DISPJMP S0S2:CJNE A,#0FH,S4;按S3设置完成LCALL BZLCALL BZJMP S3S4: CJNE A,#08H,S5INC CMM_DMOV A,CMM_DCJNE A,#60,S111MOV CMM_D,#0S111:ACALL DOWN_CONVACALL SEG_DISPJMP S0S5: CJNE A,#0BH,S0RETS3:ACALL DOWN_TIMEACALL DOWN_CONVACALL SEG_DISPACALL KEYBOARDCJNE A,#0BH,S3MOV CMM_D,#00HMOV CSS_D,#00HRET;-------------------------加载倒计不时刻--------------------- ;显示倒数时刻DOWN_CONV:MOV D PTR,#SEGTABMOV A,CSS_DMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG2,AMOV A,BMOVC A,@A+DPTRMOV S EG1,AMOV A,CMM_DMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG5,AMOV A,BMOVC A,@A+DPTRMOV S EG4,AMOV A,#40HMOV S EG8,AMOV A,#40HMOV S EG7,AMOV S EG3,#80HMOV S EG6,#40HRET;---------检查倒计时-------------------------- ;检查倒计时DOWN_TIME:MOV A,SECMOV B,SEC0CJNE A,B,D01RETD01:MOV SEC0,SECDEC CSS_DMOV A,CSS_DCJNE A,#0,D11MOV A,CMM_DCJNE A,#0,D12;秒钟数为0且分钟数为0,那么倒数终止ACALL TIME_OUTJMP MAINLOOPRETD12:MOV CSS_D,#59DEC CMM_DD11:ACALL DOWN_CONVRET;**************************日期显示******************************** DATE_CONV:MOV D PTR,#SEGTABMOV A,DAYMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG2,AMOV A,BMOVC A,@A+DPTRMOV S EG1,AMOV A,MONTHMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG4,AMOV A,BMOVC A,@A+DPTRORL A,#80HMOV S EG3,AMOV A,YEARLMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG6,AMOV A,BMOVC A,@A+DPTRORL A,#80HMOV S EG5,AMOV A,YEARHMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG8,AMOV A,BMOVC A,@A+DPTRMOV S EG7,ARET;------------------------日期扫描显示-----------------------------DATE_DISP:MOV D PTR,#SEGTABMOV A,YEARHMOV B,#10DIV ABMOVC A,@A+DPTRMOV B UF1,AMOV A,BMOVC A,@A+DPTRMOV B UF2,AMOV A,YEARLMOV B,#10DIV ABMOVC A,@A+DPTRMOV B UF3,AMOV A,BMOVC A,@A+DPTRMOV B UF4,AMOV B UF5,#40HMOV A,MONTHMOV B,#10DIV ABMOVC A,@A+DPTRMOV B UF6,AMOV A,BMOVC A,@A+DPTRMOV B UF7,AMOV B UF8,#40HMOV A,DAYMOV B,#10DIV ABMOVC A,@A+DPTRMOV B UF9,AMOV A,BMOVC A,@A+DPTRMOV B UF10,AMOV B UF11,#80HMOV S EG1,#80HMOV S EG2,#00HMOV S EG3,#00HMOV S EG4,#00HMOV S EG5,#00HMOV S EG6,#00HMOV R6,#05HDATE_L3:MOV R0,#BUF1MOV R7,#11DATE_L2:MOV R3,#42HMOV S EG8,SEG7MOV S EG7,SEG6MOV S EG6,SEG5MOV S EG5,SEG4MOV S EG4,SEG3MOV S EG3,SEG2MOV S EG2,SEG1MOV S EG1,@R0DATE_L1:ACALL SEG_DISPLCALL KEYBOARDCJNE A,#0EH,JIXUJMP DATE_QUITJIXU: DJNZ R3,DATE_L1INC R0DJNZ R7,DATE_L2DJNZ R6,DATE_L3DATE_QUIT:AJMP CONVAJMP SEG_DISPRET;----------------------调整日期子程序----------------------------- DATA_SET:DA0:LCALL DATE_CONV ;扫描显示LCALL SEG_DISPLCALL KEYBOARDCJNE A,#04H,DA2 ;未按下S7键,则继续扫描;年调整INC YEARLMOV A,YEARLCJNE A,#100,DA21MOV YEARL,#0 ;变量清零INC YEARHMOV A,YEARHCJNE A,#100,DA21DA21:ACALL DATE_CONVACALL SEG_DISPJMP DA0DA2:CJNE A,#08H,DA3 ;未按下S9键,则继续扫描;月调整INC MONTHMOV A,MONTHCJNE A,#13,DA21MOV MONTH,#1 ;变量循环DA3:CJNE A,#0CH,DA4 ;未按下SA键,则继续扫描;日调整INC DAYACALL RUNNIANMOV A,RUNJZ DA30JMP DA31DA30:MOV DPTR,#MONTHTABJMP DA32DA31:MOV DPTR,#RUNTABJMP DA32DA32:MOV A,MONTHMOVC A,@A+DPTRMOV B,DAYCJNE A,B,DA21MOV DAY,#1 ;变量清零DA4:CJNE A,#02H,DA0 ;未按下SB键,那么继续扫描RETRUNNIAN:MOV RUN,#00HMOV B,#04H ;B中置为04H用来测试MOV A ,YEARL ;年的后两位送AJZ TJ2 ;假设后两位能被100整除那么转向条件2 DIV AB ;检测年的后两位是不是能被4整除MOV A ,B ;假假设B中的余数为零那么说明是闰年JZ LEAPJMP OVERTJ2:MOV A ,YEARH ;符合条件2(第一能被100整除)DIV AB ;假假设高位能被4整除那么说明能被400整除MOV A ,BJZ LEAP ;是闰年跳转SJMP OVERLEAP:MOV RUN,#01HOVER:RET;秒表功能程序STOP_CONV:MOV D PTR,#SEGTABMOV A,STOP_MSMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG2,AMOV A,BMOVC A,@A+DPTRMOV S EG1,AMOV A,STOP_SMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG5,AMOV A,BMOVC A,@A+DPTRMOV S EG4,AMOV A,STOP_MMOV B,#10DIV ABMOVC A,@A+DPTRMOV S EG8,AMOV A,BMOVC A,@A+DPTRMOV S EG7,AMOV S EG3,#40HMOV S EG6,#40HRETSTOP:MOV STOP_MS,#0MOV STOP_S,#0MOV STOP_M,#0ACALL STOP_CONVACALL SEG_DISPACALL KEYBOARDCJNE A,#07H,STOPJMP LOOP2LOOP2:ACALL KEYBOARDCJNE A,#07H,LOOP3JMP PAUSE1LOOP3: ACALL STOP_CONVACALL SEG_DISPLCALL DLY10MSINC STOP_MSMOV A,STOP_MSCJNE A,#100,LOOP2 ;是否1s到了MOV STOP_MS,#0 ;里秒数清零INC STOP_S ;秒计数加1MOV A,STOP_SCJNE A,#60,LOOP2 ;是不是1min到了INC STOP_M ;分计数加1MOV STOP_S,#0MOV A,STOP_MCJNE A,#60,LOOP2 ;是不是1h到了MOV STOP_M,#0PAUSE1:ACALL STOP_CONVACALL SEG_DISPACALL KEYBOARDCJNE A,#03H,PP1JMP DEADPP1: CJNE A,#07H,PP2JMP LOOP2PP2: CJNE A,#0FH,PAUSE1JMP STOPDEAD:ACALL CONVACALL SEG_DISPRETMUSIC:JMP STARTORG 001BHJMP EXT0START:MOV TMOD,#00010000BMOV IE,#8AHMOV R4,#0MOV DPTR,#9FFFHMOVX @DPTR,AMOV DPTR,#MUSICTABLOOOP:MOV A,R4MOVC A,@A+DPTRMOV R1,AINC R4ACALL WATERMOV A,R4MOVC A,@A+DPTRMOV R0,AORL A,R1JZ NEXT0 ;全0为休止符MOV A,R0ANL A,R1CJNE A,#0FFH,NNEXT ;全1表示乐曲结束JMP LO1 ;循环演奏NNEXT:MOV TH1,R1MOV TL1,R0SETB TR1JMP NEXT1NEXT0: ;关闭定时器,停止发音CLR TR1SETB FMQNEXT1:INC R4MOV A,R4MOVC A,@A+DPTRMOV R2,ALOOP1:ACALL DELAY_1DJNZ R2,LOOP1INC R4JMP LOOOPEXT0:MOV TH1,R1MOV TL1,R0RETIDELAY_1:MOV R7,#02DD3:MOV R5,#248DJNZ R5,$DJNZ R6,DD3DJNZ R7,DD2RETMUSICTAB: ;DB 0FDH,0C6H,02H,0FEH,02H,02HDB 0FEH,2AH,04H,0FEH,02H,02HDB 0FEH,2AH,04H,0FEH,84H,04HDB 0FEH,02H,02HDB 00H,00H,04HDB 0FDH,08H,02H,0FDH,08H,02HDB 0FDH,0C6H,03H,0FDH,80H,02HDB 0FDH,0C6H,04H,0FEH,2AH,04HDB 0FDH,80H,04DB 00H,00H,04HDB 0FDH,08H,02H,0FDH,08H,02HDB 0FDH,30H,03H,0FDH,08H,02HDB 0FDH,30H,02H,0FEH,2AH,03HDB 0FDH,08H,04HDB 00H,00H,04HDB 0FEH,2AH,02H,0FEH,2AH,02HDB 0FEH,2AH,03H,0FEH,02H,03HDB 0FDH,30H,02H,0FDH,30H,04HDB 0FEH,02H,04H,0FEH,02H,04HDB 0FFH,0FFHLO1:CLR TR1SETB FMQ ;停止闹铃RETWATER:MOV A,TEMPMOV DPTR,#8FFFHMOVX @DPTR,ARL AMOV TEMP,AMOV DPTR,#MUSICTABRETDLY400US:MOV R5,#2D100:DJNZ R4,$DJNZ R5,D100RETDLY10MS:MOV R5,#30DD100: MOV R4,#150DJNZ R4,$DJNZ R5,DD100RETBZ:MOV R6,#250B1:ACALL DEXCPL FMQDJNZ R6,B1MOV R5,#30ACALL DELAYRETDELAY:MOV R4,#04HDL0: MOV R5,#0E9HDL1: NOPDJNZ R5,DL1DJNZ R4,DL0RETDEX:MOV R4,#200DJNZ R4,$RETSEGTAB: DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FH MONTHTAB:DB 0,32,29,32,31,32,31DB 32,32,31,32,31,32 RUNTAB:DB 0,32,30,32,31,32,31DB 32,32,31,32,31,32END。

单片机实时时钟实训报告

单片机实时时钟实训报告

一、引言随着单片机技术的不断发展,其在各个领域的应用越来越广泛。

实时时钟(Real-Time Clock,RTC)作为一种重要的功能模块,被广泛应用于嵌入式系统中,用于实现时间的记录、显示和控制等功能。

本实训报告以单片机为平台,设计并实现了一个实时时钟系统,旨在巩固和深化单片机相关知识,提高动手实践能力。

二、实训目的1. 理解实时时钟的工作原理和基本概念;2. 掌握单片机与实时时钟芯片的接口连接方法;3. 学会使用实时时钟芯片实现时间记录、显示和控制功能;4. 提高单片机编程能力和嵌入式系统设计能力。

三、实训内容1. 实时时钟芯片介绍本实训采用DS1302实时时钟芯片,该芯片具有以下特点:(1)低功耗设计,适用于电池供电的应用场景;(2)支持闰年、星期和夏令时等功能;(3)具有32.768kHz晶振振荡器,提供精确的时间基准;(4)具有64字节RAM,可用于存储数据。

2. 单片机与DS1302的接口连接本实训选用AT89C51单片机作为控制核心,与DS1302的接口连接如下:(1)VCC:连接单片机的5V电源;(2)GND:连接单片机的地;(3)RST:DS1302复位引脚,连接单片机的P1.0引脚;(4)CE:DS1302片选引脚,连接单片机的P1.1引脚;(5)IO:DS1302数据引脚,连接单片机的P1.2引脚;(6)SQW/OUT:DS1302闹钟输出引脚,连接单片机的P1.3引脚。

3. 实时时钟系统设计(1)时间记录通过DS1302芯片的RAM存储功能,实现时间的记录。

具体操作如下:① 初始化DS1302芯片,设置时间基准;② 设置闰年、星期和夏令时等信息;③ 读取当前时间,并存入单片机的内部RAM。

(2)时间显示使用单片机的并行I/O口,将时间数据输出到LED数码管或LCD液晶显示屏,实现时间显示。

具体操作如下:① 设计显示模块的硬件电路;② 编写显示模块的驱动程序,实现时间数据的读取和显示;③ 通过按键操作,实现时间的切换和调整。

单片机制作时钟实训报告

单片机制作时钟实训报告

随着科技的不断发展,单片机作为一种集计算机技术、微电子技术和自动控制技术于一体的综合性技术,已经在各个领域得到了广泛的应用。

为了提高我们的实践能力和创新意识,我们选择了单片机制作时钟这一实训项目,通过实际操作来深入了解单片机的应用和编程技巧。

二、实训目的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. 学会了使用常用电子元器件,为以后的学习和工作打下了基础。

六、实训总结通过本次单片机制作时钟实训,我们深入了解了单片机的应用和编程技巧,提高了实践能力和创新意识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机实验报告
实验名称:时钟综合实验
姓名:高知明
学号:110404320
班级:通信3班
时间:2014.5
南京理工大学紫金学院电光系
一、实验目的
1、学习Proteus软件基本使用方法;
2、掌握定时/计数器与外部中断工作原理;
3、学习设计单片机控制的多位数码管扫描显示电路;
4、理解数码管动态显示的原理。

二、实验原理
MAT89C51单片机为控制器,八位7段数码管分别显示小时的十位、小时的个位、连接符、分的十位、分的个位、连接符、秒的十位和秒的个位,其中数码管的位选口为P2口,段选口为P0口,小时、分和秒的能动态显示。

定时器实现1秒准确定时,外部中断0引脚外接键盘BUTTON1,实现手动校分功能;外部中断1外接键盘BUTTON2,实现清零功能。

三、实验内容
根据实验任务设计要求,在Keil软件中实现程序编辑、编译与执行等操作。

对编译通过的过程可选择单步调试的方式来观察运行的结果,以及各个寄存器的值如何变化。

参考程序流程:主程序流程:开始→变量赋初值→定时器T1赋计数初值→设置外部中断控制字→开中断→开计数器→送位选字→送段选码→延时→送位选字,定时器T1中断流程:定时器T1赋计数初值→到1秒了吗?→Y秒加1 or N结束→到1分钟了吗?→Y秒清零 or N结束→分钟加1→到60分钟了吗?→Y分钟清零 or N结束→结束,外部中断0流程:分钟加1→到60分钟了吗?→Y分钟清零 or N结束→结束,外部中断1:分钟清零→秒清零→结束。

1、程序代码:
#include<reg51.h>
#define ulong unsigned long
char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
#define LED P0
#define WS P2
ulong t;
ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi; void init();
void display();
void delay(int);
void main()
{
init();
while(1)
{
TR0=1;
display();
}
}
void init()
{
WS=t=0;
sec_ge=sec_shi,min_ge,min_shi,hour_ge,hour_shi=sec=min=hour=0; TMOD=0x01;
TH0=(65536-5536)/256;
TL0=(65536-5536)%256;
EA=1;
ET0=1;
}
void delay(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=255;j>0;j--);
}
void display()
{
int i=0;
if(TF0==1)
{
TF0=0;
t++;
if(t==10)
{
t=0;
sec++;
if(sec==60)
{
sec=0;
min++;
}
if(min==60)
{
min=0;
hour++;
}
if(hour==24)
{
hour=0;
}
}
}
sec_ge=sec%10;
sec_shi=sec/10;
min_ge=min%10; min_shi=min/10;
hour_ge=hour%10; hour_shi=hour/10; WS=0x80;
LED=tab[sec_ge];
delay(1);
WS=0x40;
LED=tab[sec_shi]; delay(1);
WS=0x20;
LED=0xbf;
delay(1);
WS=0x10;
LED=tab[min_ge];
delay(1);
WS=0x08;
LED=tab[min_shi]; delay(1);
WS=0x04;
LED=0xbf;
delay(1);
WS=0x02;
LED=tab[hour_ge]; delay(1);
WS=0x01;
LED=tab[hour_shi]; delay(1);
}
2.实验原理图
四、小结与体会
此次实验,我学会了利用定时/计数器与外部中断的工作原理,设计了一个
简单的时钟,具备时、分、秒计时与显示功能。

相关文档
最新文档