单片机实现数字钟(LED显示小时
80C51单片机数字钟

(二)使用DS1302实现时钟一、实验原理:二、详细程序:/***********时钟,显示:时、分、秒;年,月,日。
可调时,使用1302**************/ /*********************2011,4,17***********************//********************* *****************************/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit sclk=P2^1;sbit rst=P2^2;sbit io=P2^3;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit CLKPIN = P1^6;sbit DIPIN = P1^3;sbit k1=P1^1;sbit k2=P1^2;sbit k3=P1^0;uchar miao,fen,year,month,day,shi,shi_shi,shi_ge,fen_shi,fen_ge,miao_shi,miao_ge,year_shi,year_ge,month_shi,month_ge,day_shi,day_ge;uchar s_shi,s_fen,s_miao; //转换进制时用uchar sfen,sshi,smiao; //调整分\时\秒uint num1,num2,num3,num4;uchar code riqi[]={0x11,0x04,0x17};//ss_year=0x10,ss_month=0x04,ss_day=0x17;void delay(){uchar x,y;for(x=110;x>0;x--)for(y=60;y>0;y--);}void delay1(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void transbit(bit d){ DIPIN = d;_nop_();_nop_();CLKPIN = 1;_nop_();_nop_();CLKPIN = 0;_nop_();_nop_();CLKPIN = 1;}void transbyte(unsigned char d){ unsigned char i;for(i=0;i<8;i++){ if((d&0x1) == 0x1)transbit(1);elsetransbit(0);d>>=1;}}unsigned char code NUMCODETAB[]={0xFC,0x60,0xDA,0xF2, //数字0,1,2,30x66,0xB6,0xBE,0xE0, //数字4,5,6,70xFE,0xF6,0x00,0x02, //数字8,9,字符空格,字符-0x9C,0xCE,0x9E,0x8E}; //字符C,字符P,字符E,字符F void transram(n1,n2,n3,n4,n5,n6,n7,n8) //显示程序{unsigned char buf;buf=0x00;buf=NUMCODETAB[n1];transbyte(buf);buf=NUMCODETAB[n2];transbyte(buf);buf=NUMCODETAB[n3];transbyte(buf);buf=NUMCODETAB[n4];transbyte(buf);buf=NUMCODETAB[n5];transbyte(buf);buf=NUMCODETAB[n6];transbyte(buf);buf=NUMCODETAB[n7];transbyte(buf);buf=NUMCODETAB[n8];transbyte(buf);delay();}void DS1302_Write(uchar D){ //DS1302写入函数uchar i;for(i=0;i<8;i++){io=D&0x01;sclk=1;sclk=0;D=D>>1;}}uchar DS1302_Read(){ //DS1302读出函数uchar TempDat=0,i;for(i=0;i<8;i++){TempDat>>=1;if(io) TempDat=TempDat|0x80;sclk=1;sclk=0;}return TempDat;}void wt_sb(uchar addr, uchar date) //DS1302单字节写入函数{rst = 0;sclk = 0;rst = 1;DS1302_Write(addr); // 写地址DS1302_Write(date); // 写1Byte数据sclk = 1;}uchar rd_sb(uchar addr) //DS1302单字节读出函数{uchar date;rst = 0;sclk = 0;rst = 1;DS1302_Write(addr);date=DS1302_Read();sclk = 1;rst = 0;return date;}void SetTime(uchar ss_miao,uchar ss_fen,uchar ss_shi) //时间设置函数{wt_sb(0x80,ss_miao&0x7f);wt_sb(0x82,ss_fen&0x7f);wt_sb(0x84,ss_shi&0xbf);}void set_riqi(){wt_sb(0x8c,riqi[0]);wt_sb(0x88,riqi[1]&0x1f);wt_sb(0x86,riqi[2]&0x3f);}void charge_mode(){wt_sb(0x90, 0xa6); //一个电阻,一个二极管充电}void DecToBCD() //二-十进制转换函数{s_shi=(((sshi)/10)<<4)+((sshi)%10);s_fen=(((sfen)/10)<<4)+((sfen)%10);s_miao=((smiao/10)<<4)+((smiao)%10);}void key_set(){if((k1==0)|(k2==0)) //判断是否有调整时间键按下{if (k1==0) //调分delay1(2); //消抖if(k1==0){while(!k1); //等待松手sfen++;if(sfen==60)sfen=0;}}if (k2==0) //调时{delay1(2);if(k2==0){while(!k2);sshi++;if(sshi==24)sshi=0;s_shi=((sshi/10)<<4)+(sshi%10);}}DecToBCD(); //十进制转换为BCD码SetTime(s_miao,s_fen,s_shi);//修改时间}if(k3==0){delay1(2);if(k3==0){while(!k3);transram(year_shi,year_ge,11,month_shi,month_ge,11,day_shi,day_ge);delay1(2000);}}}void rd_ntime() //读取当前时间{uchar temp;temp=rd_sb(0x81); //secondmiao=((temp&0x7f)>>4)*10+(temp&0x0f);miao_shi=miao/10;miao_ge=miao%10;temp=rd_sb(0x83); //minutefen=((temp&0x7f)>>4)*10+(temp&0x0f);fen_shi=fen/10;fen_ge=fen%10;temp=rd_sb(0x85);shi=((temp&0x3f)>>4)*10+(temp&0x0f); //hourshi_shi=shi/10;shi_ge=shi%10;}void read_ndate(){uchar temp;temp=rd_sb(0x87);day=((temp&0x3f)>>4)*10+(temp&0x0f); //dayday_shi=day/10;day_ge=day%10;temp=rd_sb(0x89);month=((temp&0x1f)>>4)*10+(temp&0x0f); //monthmonth_shi=month/10;month_ge=month%10;temp=rd_sb(0x8d);year=((temp&0xff)>>4)*10+(temp&0x0f); //yearyear_shi=year/10;year_ge=year%10;}void main(){charge_mode();set_riqi();while(1){rd_ntime();read_ndate();transram(shi_shi,shi_ge,11,fen_shi,fen_ge,11,miao_shi,miao_ge);key_set();}}三、硬件电路:。
基于单片机电子时钟的设计与实现

基于单片机电子时钟的设计与实现一、设计目标设计一个基于单片机的电子时钟,能够准确显示时间并能够进行设置和调整。
二、硬件设计1.时钟部分:采用晶振芯片提供准确的时钟信号2.数码管显示部分:使用共阴数码管进行数字显示3.按键部分:设计几个按键用于设置和调整时间4.电源部分:采用直流电源供电三、软件设计1.功能设计a.时间设置功能:通过按键可以设置当前的时间,包括小时、分钟和秒钟。
b.时间调整功能:通过按键可以调整当前的时间,包括小时、分钟和秒钟。
c.时间显示功能:通过数码管可以实时显示当前的时间。
2.代码实现以C语言为例,以下是一个基于单片机的电子时钟的代码实现示例:```c#include <reg51.h>sbit DS18B20=P1^3; // 定义18B20数据线接口sbit beep=P2^3; // 定义蜂鸣器接口unsigned char hour,min,sec; // 定义小时、分钟、秒钟变量//函数声明void Delay_1ms(unsigned int count);bit Ds18b20Init(;unsigned char Ds18b20ReadByte(;void ReadTime(;void WriteTime(;void DisplayTime(;//主函数void mainP2=0x00;WriteTime(; // 写入时间while(1)ReadTime(; // 读取时间DisplayTime(; // 显示时间Delay_1ms(1000); // 延时1秒}//毫秒延时函数void Delay_1ms(unsigned int count) unsigned int i, j;for(i=0; i<count; i++)for(j=0; j<1275; j++);//18B20初始化函数bit Ds18b20Initbit presence;DS18B20=0;Delay_1ms(100); // 延时450us~1000us DS18B20=1;Delay_1ms(10); // 延时15us~60us presence=DS18B20;Delay_1ms(30); // 延时60us~240us return presence;//18B20读取字节函数unsigned char Ds18b20ReadByte unsigned char i, dat;for(i=0; i<8; i++)DS18B20=0;//主机发起读时序_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usDS18B20=1;//主机释放总线_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usdat,=(DS18B20<<i); // 读取数据位,存放在dat变量中Delay_1ms(3); // 读时序完成后等待48us再接收下一位}return dat;//读取时间函数void ReadTimeunsigned char temp;temp=0x00;while(temp!=0xaa)Ds18b20Init(; // 初始化温度传感器Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0xbe;Delay_1ms(1);temp=Ds18b20ReadByte(; // 读取时间数组的标志位}for(temp=0; temp<7; temp++)//写入时间函数void WriteTimeunsigned char i,j;while(1)Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x4e;Delay_1ms(1);for(i=0; i<7; i++)DS18B20=0x55;Delay_1ms(1);DS18B20=0xaa;Delay_1ms(1);Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x48;Delay_1ms(1);j=Ds18b20ReadByte(; // 判断是否写入成功if(j==0x0a)break;}//显示时间函数void DisplayTimeP1=seg[hour/10]; // 显示十位小时P2=(P2&0xf0),0x08; // 点亮第一个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[hour%10]; // 显示个位小时P2=(P2&0xf0),0x04; // 点亮第二个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min/10]; // 显示十位分钟P2=(P2&0xf0),0x02; // 点亮第三个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min%10]; // 显示个位分钟P2=(P2&0xf0),0x01; // 点亮第四个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=0x00;//空显示P2=0x00;//熄灭数码管```四、总结通过以上的硬件设计和软件实现,可以实现一个基于单片机的电子时钟。
16位LED显示电子钟设计(可编辑)

16位LED显示电子钟设计摘要随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。
单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。
然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。
来自英国Labcenter Electronics 公司的Proteus软件很好地诠释了利用现代EDA工具方便快捷开发单片机系统的优势。
它包括PROTEUS VSM(Virtual System Modelling)、PROTEUS PCB DESIGN 两大组成部分,在PC机上就能实现原理图电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证以及形成PCB文件的完整嵌入式系统设计与研发过程。
单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面, 其调试过程一般分为软件调试、硬件测试、系统调试3个过程。
如果采用单片机系统的虚拟仿真软件??Proteus,则不用制作具体的电路板也能够完成以上工作。
关键词: 数字电子钟 STC89C52 LED 电子钟ABSTRCTWith the rapid development of semiconductor technology, and mobile communication, network technology, multimedia technology in embedded system design application, SCM from the4,8,16bit to 32 bit, its development course has been subject to the vast majority of electronic enthusiasts attention. Single chip computer is becoming more and more powerful, the price drops ceaselessly however advantage undoubtedly become embedded system design is preferred, while MCU application fields expand also makes more people to join the ranks of the development of SCM system based on SCM technology, promote innovation and progress.However, the traditional single chip microcomputer system development in addition to the need to purchase such as emulators, programmer, oscilloscopes and other expensive electronic equipment, the development process is tedious. From the UK Labcenter Electronics Proteus software, a good interpretation of the use of modern EDA tool convenient and quick development of the advantages of SCM system. It includes the PROTEUS VSM Virtual System Modelling , PROTEUS PCB DESIGN two components, in the PC machine can realize the schematic circuit design, circuit analysis and simulation code, debug and simulation, system testing and verification as well as the formation of PCB file full embedded system design and development process.SCM system as a typical embedded system, the system design including the hardware circuit design and software programming of two aspects ofthe design, the debugging process is generally divided into software debugging and hardware testing, system testing process of 3. If the use of single-chip microcomputer system of the virtual simulation software -- Proteus, without making specific circuit board also can be done.Keywords: digital electronic clock STC89C52LED electronic clock摘要 1ABSTRCT 1第一章绪论 11.1 设计背景 11.2 设计简介 11.2.1 电子钟简介11.2.2 电子钟的应用及发展 2第二章方案对比确定 32.1 主控芯片的选择 32.1.1 ATmega8简介 32.1.2 AT89S52简介 32.1.3 STC89C52简介 42.2 时钟芯片的选择 42.2.1 DS12887简介 42.2.2 DS1302简介 52.3 显示系统的选择 62.3.1 LED优势 62.3.2 LED显示屏 62.4 系统总体方案介绍 6第三章硬件电路设计93.1 Proteus 电路图设计9 3.2 原理图设计103.3 PCB图设计 10第四章系统软件设计134.1 概述134.1.1 主程序 134.1.2 调时程序134.1.3 LED显示模组显示数字13 第五章程序设计175.1 程序预览17结论25致谢27参考文献29绪论设计背景随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。
单片机实验报告数字时钟设计报告

单片机实验报告数字时钟设计报告一、实验目的本次单片机实验的目的是设计并实现一个基于单片机的数字时钟。
通过该实验,深入了解单片机的工作原理和编程方法,掌握定时器、中断、数码管显示等功能的应用,提高综合运用知识解决实际问题的能力。
二、实验原理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、单片机选择在单片机选择方面,我们选用AT89S52型号的单片机。
该单片机具有低功耗、高性能的特点,内部含有8K字节的Flash存储器和256字节的RAM,同时具有丰富的外设接口,如UART、SPI、I2C等。
2、时钟芯片选择时钟芯片选用DS1302型号,该芯片具有精度高、稳定性好的优点,可以提供年、月、日、时、分、秒等时间信息。
DS1302芯片通过SPI 接口与单片机进行通信。
3、显示模块选择显示模块选用LCD1602型号,该模块具有体积小、功耗低、显示内容丰富的优点,可以同时显示时间、日期和星期几等信息。
LCD1602模块通过并行接口与单片机进行通信。
4、按键模块选择按键模块选用四个独立按键,分别实现小时加、小时减、分钟加、分钟减功能。
按键通过单片机的外部中断引脚与单片机进行通信。
三、软件设计1、程序流程程序流程主要包括以下几个部分:系统初始化、读取DS1302芯片的时间数据、处理按键输入、控制LCD1602模块显示时间等。
具体流程如图1所示。
图1程序流程图2、关键代码实现在程序的关键部分,我们需要实现读取DS1302芯片的时间数据、处理按键输入、控制LCD1602模块显示时间等功能。
下面是一些关键代码的实现:(1)读取DS1302芯片的时间数据:MOV DPTR, #0x68 ; DPTR指向DS1302的空间MOV R7, #0x00 ;设置寄存器R7为0x00,用于读取时间数据MOV A, R7 ;将R7的值存入A寄存器MOVC A, @A+DPTR ;从DS1302中读取一个字节的数据,存入A寄存器中MOV B, A ;将A寄存器的值存入B寄存器,准备送入LCD1602模块中显示本文…(省略其他代码)…… ;处理其他数据和指令SJMP $ ;无限循环,等待下一次中断或指令执行完毕后再次回到此处执行下一轮循环。
单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
基于STC89C52单片机时钟的设计与实现
基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。
该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。
系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。
用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。
本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。
2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。
系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。
系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。
还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。
用户界面应简洁直观,便于用户快速理解和操作。
时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。
同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。
在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。
系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。
鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。
设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。
在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。
这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。
通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。
单片机 电子时钟实验报告
电子时钟设计实验报告姓名:学号:班级:指导老师:一、实验基本要求利用定时计数器,设计一个电子时钟,使用前面使用过的显示子程序。
从左到右依次显示时分秒。
有两种方法实现,一种是在中断程序中计数,产生时分秒计数,送显示缓冲区。
另一种是中断程序每一秒清除一个位变量,而主程序通过监视位变量的变化来知道每秒的时间。
进而要求: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口(打开位选→赋位选→关闭位选)。
基于C51单片机的数字时钟课程设计(C语言,带闹钟).
单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词:电子钟 AT89C52 硬件设计软件设计目录一、数字电子钟设计任务、功能要求说明及方案介绍 (4)1.1 设计课题设计任务 (4)1.2 设计课题的功能要求说明 (4)1.3 设计课的设计总体方案介绍及工作原理说明 (4)二、设计课题的硬件系统的设计 (5)2.1硬件系统各模块功能简要介绍 (5)2.1.1 AT89C52简介 (5)2.1.2 按键电路 (6)三、设计课题的软件系统的设计 (6)3.1 使用单片机资源的情况 (6)3.2 软件系统个模块功能简要介绍 (7)3.3 软件系统程序流程框图 (7)3.4 软件系统程序清单 (7)四、设计课题的设计结论、仿真结果、误差分析 (9)4.1 设计结论及使用说明 (9)4.2 仿真结果 (10)结束语 (12)参考文献 (12)附录 (13)附录A:程序清单 (13)一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。
具有时间显示,并有时间设定,时间调整功能。
1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。
LED数字倒计时器实验报告
淮阴师范学院物理与电子电气工程学院课程设计报告学生姓名靖洋学号171206011班级12级4班专业电子信息科学与技术题目LED数字倒计时器指导教师魏东旭、陈勇2014 年12 月一、设计任务与要求LED倒计时器设计以AT89S52单片机为核心,系统包括6位数码管显示电按键电路、电源电路、复位电路、晶振电路及蜂鸣器电路几部分。
要求:1)LED数码管显示倒计时时间;2)倒计时过程中能设置多个闹钟,当倒计时值倒计到定值时会发出约2s的报警声音;3)通过按键可以对倒计时设定初值,倒计时初始值范围在24:00:00---00:00:60之间,用户可根据需要对其进行设置,设置成功后复位初始值为成功设定值。
二、框图设计2.1 LED数字倒计时器主要由AT89C51单片机、晶振电路、复位电路、按键电路、数码管电路、蜂鸣电路组成(如图2.1)。
图2.1 LED数字倒计时器系统设计框图2.2 晶振电路分析1)晶振电路原理:晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。
当电路中的激励电信号和晶振的标称频率相同时,电路就能输出信号强大,频率稳定的正弦波。
整形电路再将正弦波变成方波送到数字电路中供其使用。
2)晶振电路的特点:晶振是石英振荡器的简称,英文名为Crystal,晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号。
它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。
由于制造工艺不断提高,现在晶振的频率偏差、温度稳定性、老化率、密封性等重要技术指标都很好,已不容易出现故障,但在选用时仍可留意一下晶振的质量。
图2.2晶振电路原理图2.3 复位电路的分析1)复位电路的原理:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。