精华内容
下载资源
问答
  • 数字钟原理图 数字钟原理图 数字钟原理图 数字钟原理图 数字钟原理图
  • 本资源包含整个工程的源代码、原理图及proteus仿真 设计摘要:本设计使用11.0592MHZ晶振与单片机AT89C52相连接,以AT89C52芯片为核心,采用LCD1602的并行操作方式显示。通过使用该单片机,实现把时间和温度显示在...
  • 基于Quartus II软件和Cyclone EP1C60240C8NL芯片的多功能电子钟原理图设计。采用8组LED数码管显示,功能为时间显示、星期显示、日期显示、秒表。通过非自锁按键可控制校时。详细注释在顶层bdf文件中,打开项目工程...
  • 共26页 设计过程的流程图 框图 原理图 很详尽 而且使用了仿真软件 进行测试后 成绩为优
  • C语言 万年历 温控 单片机
  • 多功能数字电路原理图多功能数字电路原理图多功能数字电路原理图多功能数字电路原理图
  • 通过STC89C52RC芯片控制的多功能时钟,可以显示时间,设置时间等功能
  • 设计中将采用单片机中最为典型也是我们在课堂上学习过的51系列的单片机,本次设计以STC89C52单片机为核心,以时钟芯片DS1302为依托,借助外围少量的按键电路实时校准,通过OLED液晶显示器来显示日期和时间。...
  • 多功能电子钟系统方案 ...多功能电子钟原理图电路 多功能电子钟PCB 电路城语:此资料为卖家免费分享,不提供技术支持,请大家使用前验证资料的正确性!如涉及版权问题,请联系管理员删除! 附件包含以下资料
  • YS18-3的荧光管电子时钟曾是饱含了我所有期待的完美的荧光管电子时钟,它的功能比较完备,也受到了很DIYer的关注与支持。应很朋友的要求,今天我将所有源代码(包括完整的Keil工程)全部无偿放送,希望能与大家...
  • 多功能数字时钟课程设计报告,设计目的: 熟悉数字逻辑设计的基本概念和原理。 掌握计数器、定时器等逻辑芯片的工作原理及应用设计。 熟悉数字逻辑集成芯片的外围电路设计与使用。 设计任务及要求: 设计一个数字电子...
  • 1.本课程设计的目的 (1) 掌握EDA技术及CPLD/FPGA的开发流程 (2) 掌握自顶向下的设计思想,, (3) 掌握实用电子钟设计原理 (4) 掌握系统设计的分析方法 (5) 提高学生的科技论文写作能力。
  • 2.1 设计题目:基于PIC16F877A单片机的多功能电子时钟2.2 功能实现:实时时钟显示,时间可调;实时温度显示,并具有超限报警功能。输出显示采用LCD1602或LED七段数码显示器。2.3 设计要求:自己设计硬件和程序编程,...

    2.1 设计题目:

    基于PIC16F877A单片机的多功能电子时钟

    2.2 功能实现:

    实时时钟显示,时间可调;实时温度显示,并具有超限报警功能。输出显示采用LCD1602LED七段数码显示器。

    2.3 设计要求:

    自己设计硬件和程序编程,画出完整的电路原理图,用MultisimProteus仿真,最终可实现脱机运行。

    展开全文
  • 基于proteus的多功能数字电子钟设计
  • 基于STM8S003K3微控制器 闹铃和钟声功能 自动光感应 更技术咨询请联系weixing:ahsssxd 技术交流QQ:1270036753
  •    2.1为电话拨号报警器的系统构成方框,由单片机控制器、键盘输入、数码管显示、触发电路、拨号电路及电源等6部分组成。    单片机控制器是整个系统的核心,负责控制检测输入/输出显示、模拟摘机、拨号摘机...

    文末下载完整资料

    二 硬件系统方案设计
    2.1电话拨号防盗报警器硬件系统方案
    2.1.1 硬件系统方案设计
       图2.1为电话拨号报警器的系统构成方框图,由单片机控制器、键盘输入、数码管显示、触发电路、拨号电路及电源等6部分组成。
       单片机控制器是整个系统的核心,负责控制检测输入/输出显示、模拟摘机、拨号摘机、拨号报警、挂机等一系列的程序动作。这里使用了小引脚、高性能、低价位的AT89S2052。
       键盘输入电路负责输入电片机中一系列工作参数及功能设定。
       发光二极管数码管显示器在整个系统工作过程中充当一个简单的人机界面,用以显示工作状况及输入/输出的数据等。
       电话拨号防盗报警器的触发电路用磁性开关(门磁开关),简单可靠,也可用红外探测器或无线门磁,以实现全方位远距离监测。报警器应采用隐蔽安装,防止小偷发现。
       拨号及报警电路用来完成模拟摘机、拨号、发出报警音、挂机等工作过程,它的工作由单片机控制。
      &emsp电源部分负责对整个系统供电。平时由电话线上取得工作电流并对后备电池充电,拨号报警时转由后备电池供电。
    在这里插入图片描述
    2.1.2 脉冲拨号原理
       脉冲拨号是目前电话机两种拨号方式中的一种,另一种为双音多频拨号方式。
       脉冲拨号就是指在电话机上拨入的电话号码以脉冲个数的形式发出,也就是说,在已经通以直流电流的回路上,利用拨号盘及发号电路将回路断开、再接通而形成的脉冲信号,来完成输入电话号码的发送。在操作中,若用户拨1,则送出1个脉冲,回路中断一次、接通一次;拨2,则发出2个脉冲,回路断一次、接通一次、再断一次;……;而拨0时,则发出10个脉冲,回路断、接通轮流10次。图2.2为电话号码“32”的脉冲波形。
    在这里插入图片描述
       正常拨号时,电路电流中断的时间一般在58~65ms之间,视断续比的不同而不同。快速拨号时,只要取一半时间即可。电路电流接通的时间(即在同一位号码中的2个断脉冲之间的接通电流时间)约在32~42ms之间,视断续比的不同而不同。快速拨号时,只要取一半时间即可。显然脉冲周期等于脉冲中断时间和脉冲接通时间之和,每一个周期的时间为100ms左右。快速拨号时,在50ms左右。2位号码(即2组脉冲串)之间的最小时间间隔,通常为800ms左右;而快速拨号时,其值减半,为400ms左右。
       我国目前采用的电话脉冲拨号的速率是10PPS(每秒的脉冲数),即每秒发出10个脉冲,因此上述各参数不存在快速拨号时的值。
       为了提高拨号的可靠性及稳定性,这里设计时选定更低的脉冲拨号速率:1个脉冲代表播出1,2个脉冲代表拨出2,……,10个脉冲代表拨出0,每个脉冲的宽度和间隔为100ms。工作时首先进行模拟摘机,然后开始脉冲拨号,拨出1位号码后停顿500ms(保持接通)再拨下一位,直至全部拨完后再发报警音,……,最后挂机。
    2.1.3 脉冲拨号实现过程
       图2.3为脉冲拨号的实现电路。平时电话线上的电压约为50~60V左右。未拨号时电片机的P3.0、P3.1 均输出低电平。
    拨号过程如下:
       ①单片机的P3.0输出高电平,使TR1导通,由于电话线路上接入了负载R1,这样电话线的电压下降,模拟摘机。
       ②单片机的P3.0开始输出拨号脉冲,使电话线的电压(电平)也呈高、低变化。1个脉冲代表拨出1,2个脉冲代表拨出2,……,10个脉冲代表拨出0,每个脉冲的宽度和间隔均为100ms。拨出1位号码后停顿500ms(保持P3.0高电平)再拨下一位,直至全部拨完。
       ③P3.0 保持高电平(保持电话线路接通),P3.1输出1KHz的报警音脉冲驱动TR2,以2Hz进行调制(即接通1kHz信号0.5s、断开1kHz信号0.5s),这样从接听方的电话中就会听到“嘟、嘟……”的报警声。报警音的时间根据设计为60s。
       ④60后,P3.1输出低电平,TR2 截止,停止报警。随后P3.0也输出低电平,模拟挂机。完成一次报警过程。
    在这里插入图片描述

    2.2 时钟计时器的硬件设计方案论证分析
    2.2.1 功能要求
       时钟计时器要求用六位LED数码管显示时、分、秒、以二十四小时方式运行,使用按键开关实现时,分调整功能。
    2.2.2 方案论证
       为实现LED显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些,考虑到时钟显示只有六位,且系统没有其它复杂的处理任务,所以决定用动态扫描实现LED显示。单片机采用易购的AT89S52系列,这种单片机可具有足够的空余硬件资源,以实现其它的扩充功能。若使用电池供电,可采用低电压的LV系列单片机时钟计时器电路系统的总体设计框架如图3.1所示。
    在这里插入图片描述
    2.2.3 系统硬件电路设计
       电话拨号防盗报警器的硬件电路设计描述
       为了发挥电片机强大的计算、控制能力,充分发挥软件的优势,这里极大地简化了电路,但可实现以前需要几片甚至十几片小规模数字电路才能完成的任务。
       电路原理如图所示,共有4个按键,即rst、ok、up、set。
       rst:系统复位键。
       ok:输入数据确认键。
       up:显示的数字增加键。
       set:工作模式设定键,可设定管机、工作、输入时间t1、输入时间t2及输入电话号码5种模式。
       磁性开关即为装于门或窗口的防盗感应开关,门关闭时常开,门打开时闭合接通。当然也可改用其他的感应器件,如激光探测、超声波感应、热释电感应、主动红外线探测或无线门磁等,以实现全方位远距离检测。为了防止磁性开关离控制器较远而产生引入干扰,使用了光耦作信号传递,效果良好。LED数码管用于工作状态指示或输入数据指示。L1、L2接电话线,ZND为击穿电压120V的压敏二极管,防止电路受雷电干扰。平时系统处于低功耗待机状态(此时耗电仅2mA左右),由电话线上取电工作,并对3.6V/60mA镍铬电池充电,当输入数据进行设定或进行拨号报警时,耗电会达到10mA,这时主要由镍铬电池供电。由于有镍铬电池后备供电,即使电话线断电也不会使已输入的数据丢失。该机除用于防盗报警外,若对软件进行一些修改,也可通过电话线进行远程数据传递。三极管T1、T2及电阻R1、R2构成拨号及报警电路,其工作原理前面已作详细介绍。
    4.1.2时钟计时器的硬件电路设计描述
       时钟计时器的硬件电路,采用AT89S52单片机最小化应用设计,显示采用共阳七段LED显示器,P0口输出段数码数据,P2.0~P2.5口作列扫描输出,P1.0,P1.1和P1.2口接三个按钮开关用以实现调时,调分功能.为了提供共阳LED数码管的驱动电压,用三极管8550作电源驱动输出。采用12MHZ晶振有利于提高秒计时的精确性。硬件电路图如图3.2示。
    在这里插入图片描述

    三 系统的软件设计
    3.1电话拨号防盗报警器程序设计
    3.1.1主程序设计
       主程序的工作过程为:先进行初始化工作,随后根据输入的键值分别散转输入的键值分别散转至对应的子程序(管机、警戒工作、输入时间t1、输入时间t2、输入电话号码)循环工作。T0为100ms定时中断服务子程序,它实现精确的拨号脉冲时序。INT0外中断服务子函数用于实现功能选择;而INT1外中断服务子函数则检测防盗触发开关的状态。
       主程序状态流程图如图3.6所示。INT0外中断服务子函数状态流程图及INT1外中断服务子函数的状态流程图分别如图3.7、图3.8所示。
    在这里插入图片描述


    全套资料免费下载:
    关注v-x-公-众-号:【嵌入式基地
    后-台-回-复:【毕业设计】 即可获资料
    回复【编程】即可获取
    包括有:C、C++、C#、JAVA、Python、JavaScript、PHP、数据库、微信小程序、人工智能、嵌入式、Linux、Unix、QT、物联网、算法导论、大数据等资料
    在这里插入图片描述

    展开全文
  • 基于单片机的多功能时钟设计 目的 设计一款可显示时间、日历和闹钟的多功能数字时钟 元器件 AT89C51单片机 数码管 74HC138译码器、74HC573锁存器、74HC02或非门 按键若干、电阻若干、电源若干 蜂鸣器等 电路...

    基于单片机的多功能时钟设计


    目的

    设计一款可显示时间、日历和闹钟的多功能数字时钟

    元器件

    • AT89C51单片机
    • 数码管
    • 74HC138译码器、74HC573锁存器、74HC02或非门
    • 按键若干、电阻若干、电源若干
    • 蜂鸣器等

    电路原理图

    在这里插入图片描述

    功能

    初始化:默认为时钟状态为00—00—00,日历为20—07—02,闹钟为00—00—00。

    按键功能

    • 按键s1定义为状态切换键,可以按顺序切换时钟界面,日历界面,闹钟界面;
      在这里插入图片描述
    • 在设置状态下,按键s1定义为确认功能,完成设置;
    • 按键s2定义为设置键,在时钟界面下 通过该键可以进入时钟设置界面,通过该键可以切换新选择待调>整的时、分、秒,当前选择的显示单元以0.5s为间隔亮灭。在日历界面下同样做此功能 。在闹钟设置>界面下,在上述功能外增加调节闹钟持续时长功能;
    • 在这里插入图片描述
    • 按键s3定义为“加”按键;
    • 按键s4定义为“减”按键;
    • 特殊说明:
      按键s3,s4只在时钟设置,日历设置或者闹钟设置状态下有效。
    • 闹钟提示功能
    1. 用1KHZ的方波驱动蜂鸣器,初始持续时间为10s,可通过按键s2进行设置;
    2. 闹钟提示状态下,按任意键可关闭蜂鸣器。

    代码:

    #include <reg51.h>
    #include <absacc.h>
    sbit s1=P3^0;
    sbit s2=P3^1;
    sbit s3=P3^2;
    sbit s4=P3^3;
    sbit buzzer=P1^0;
    unsigned char code SMG_duanma[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//共阳极数码管
    unsigned char code SMG_position[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选
    unsigned char yi,er,san,si,wu,liu,qi,ba;
    unsigned char SMGflag=1,s1_flag=1,s2_flag=1;
    unsigned char cnt,state=1,alarm1=0;//state:0.5s闪烁标志,alarm1:闹钟状态标志
    signed char Timer[3]={0,0,0},Timer_set[3]={0,0,0};Alarm[3]={0,0,0},Calendar[3]={20,7,2},time=10;//time为闹钟时长
    void Time_set();
    void Rili_set();
    void Alarm_set();
    void delay_ms(unsigned int n)
    {
    	unsigned int i=0,j=0;
    	for(i=0;i<n;i++)
    	for(j=0;j<123;j++);
    }
    void SMG_select(unsigned char pos,unsigned char dat)
    {
    	XBYTE[0Xc000]=SMG_position[pos];
    	XBYTE[0Xe000]=SMG_duanma[dat];
    }
    void SMG_control() //数码管控制
    {
    	if(SMGflag==1)      Time_set();
    	else if(SMGflag==2) Rili_set();
    	else if(SMGflag==3) Alarm_set();
    }
    void SMG_Display()
    {
    	SMG_control();
    	SMG_select(1,yi) ;delay_ms(2);
    	SMG_select(2,er) ;delay_ms(2);
    	SMG_select(3,san);delay_ms(2);
    	SMG_select(4,si) ;delay_ms(2);
    	SMG_select(5,wu) ;delay_ms(2);
    	SMG_select(6,liu);delay_ms(2);
    	SMG_select(7,qi) ;delay_ms(2);
    	SMG_select(8,ba) ;delay_ms(2);
    }
    void InitTimer()//初始化定时器
    {
    	TMOD=0X11;            //定时器0,工作方式1
    	TH0=(65536-50000)/256;//定时50ms
    	TL0=(65536-50000)%256;
    	TH1=(65536-500)/256;//定时0.5ms产生1KHZ方波
    	TL1=(65536-500)%256;
    	ET0=1;
    	TR0=1;
    	ET1=1;
    	EA=1;
    	PT0=1;//定时器0优先级高
    }
    void Timer0() interrupt 1 //定时器0中断
    {
    	TH0=(65536-50000)/256;//定时50ms,装载初值
    	TL0=(65536-50000)%256;
    	cnt++;
    	if(cnt%10==0) state=!state;//0.5s闪烁一次
    	if(cnt==20)
    	{
    		cnt1=0;
    		Timer[2]++; //秒++
    		if(Timer[2]==60)//60s时间到
    		{
    			Timer[2]=0;//秒清零
    			Timer[1]++;//分++
    			if(Timer[1]==60)//60min时间到
    			{
    				Timer[1]=0;//分清零
    				Timer[0]++;//时++
    				if(Timer[0]==24)//24小时时间到
    				{
    					Timer[0]=0;//时清零
    					Calendar[2]++; //日++
    					if(Calendar[1]==1||Calendar[1]==3||Calendar[1]==5||Calendar[1]==7||Calendar[1]==8||Calendar[1]==10||Calendar[1]==12)
    					{//大月
    						if(Calendar[2]==32)
    						{
    							Calendar[2]=1;
    							Calendar[1]++;//月++
    							if(Calendar[1]==13)
    							{
    								Calendar[1]=1;
    								Calendar[0]++;//年清0
    								if(Calendar[0]==100)Calendar[0]=0;
    							}
    						}
    					}
    					else if((Calendar[1]==4)||(Calendar[1]==6)||(Calendar[1]==9)||(Calendar[1]==11)&&(Calendar[2]==31))
    					{//小月
    						Calendar[2]=1;
    						Calendar[1]++;
    						if(Calendar[1]==13)
    						{
    							Calendar[1]=1;
    							Calendar[0]++;
    							if(Calendar[0]==100)Calendar[0]=0;
    						}
    					}
    					else if(Calendar[0]%4==0&Calendar[0]%100!=0||Calendar[0]%400==0&Calendar[1]==2&Calendar[2]==30)
    					{//闰二月
    						Calendar[2]=1;
    						Calendar[1]++;
    						if(Calendar[1]==13)
    						{
    							Calendar[1]=1;
    							Calendar[0]++;
    							if(Calendar[0]==100)Calendar[0]=0;
    						}
    					}
    					else if(Calendar[1]==2&Calendar[2]==29)
    					{//非闰二月
    						Calendar[2]=1;
    						Calendar[1]++;
    						if(Calendar[1]==13)
    						{
    							Calendar[1]=1;
    							Calendar[0]++;
    							if(Calendar[0]==100)Calendar[0]=0;
    						}
    					}
    				}
    			}
    		}
    	}
    }
    void Timer1() interrupt 3
    {
    	TH1=(65536-500)/256;
    	TL1=(65536-500)%256;
    	buzzer=!buzzer;//buzzer=0,蜂鸣器打开;buzzer=1,蜂鸣器关闭。
    	if((Timer[2]-Alarm[2])>time)//闹钟持续时长为time
    	{
    		alarm1=0;
    		TR1=0;
    		buzzer=1;
    	}
    }
    void Time_set() //时间设置
    {
    	if(s1_flag==1)//时间设置界面
    	{
    		if(s2_flag==1) //时钟开启
    		{	//时钟状态‘-’字符1s闪烁一次
    			if(Timer[2]%2==0){yi=Timer[0]/10;er=Timer[0]%10;san=liu=10;si=Timer[1]/10;wu=Timer[1]%10;qi=Timer[2]/10;ba=Timer[2]%10;}
    				else {yi=Timer[0]/10;er=Timer[0]%10;san=liu=11;si=Timer[1]/10;wu=Timer[1]%10;qi=Timer[2]/10;ba=Timer[2]%10;}
    		}
    		else if (s2_flag==2)//时设置,时0.5s闪烁一次
    		{
    			san=liu=10;si=Timer_set[1]/10;wu=Timer_set[1]%10;qi=Timer_set[2]/10;ba=Timer_set[2]%10;
    			if(state==1){yi=Timer_set[0]/10;er=Timer_set[0]%10;}
    			else if(state==0) {yi=11;er=11;} //熄灭
    		}
    		else if(s2_flag==3)//分设置,分0.5s闪烁一次
    		{
    			yi=Timer_set[0]/10;er=Timer_set[0]%10;san=liu=10;qi=Timer_set[2]/10;ba=Timer_set[2]%10;
    			if(state==1){si=Timer_set[1]/10;wu=Timer_set[1]%10;}
    			else if(state==0) {si=11;wu=11;}
    		}
    			else if(s2_flag==4)//秒设置,秒0.5s闪烁一次
    			{
    				yi=Timer_set[0]/10;er=Timer_set[0]%10;san=liu=10;si=Timer_set[1]/10;wu=Timer_set[1]%10;
    				if(state==1){qi=Timer_set[2]/10;ba=Timer_set[2]%10;}
    				else if(state==0) {qi=11;ba=11;}
    			}
    	}
    }
    void Rili_set() //日历设置
    {
    	if(s1_flag==2)//日历设置界面
    	{
    		 if(s2_flag==1) {yi=Calendar[0]/10;er=Calendar[0]%10;san=liu=10;si=Calendar[1]/10;wu=Calendar[1]%10;qi=Calendar[2]/10;ba=Calendar[2]%10;}
    		 else if(s2_flag==2) //年设置
    		 {
    			 san=liu=10;si=Calendar[1]/10;wu=Calendar[1]%10;qi=Calendar[2]/10;ba=Calendar[2]%10;
    			 if(state==1) {yi=Calendar[0]/10;er=Calendar[0]%10;}
    			 else {yi=11;er=11;}
    		 }
    		 else if(s2_flag==3) //月设置
    		 {
    			 yi=Calendar[0]/10;er=Calendar[0]%10;san=liu=10;qi=Calendar[2]/10;ba=Calendar[2]%10;
    			 if(state==1) {si=Calendar[1]/10;wu=Calendar[1]%10;}
    			 else {si=11;wu=11;}
    		 }
    		 else if(s2_flag==4) //日设置
    		 {
    			 yi=Calendar[0]/10;er=Calendar[0]%10;san=liu=10;si=Calendar[1]/10;wu=Calendar[1]%10;
    			 if(state==1) {qi=Calendar[2]/10;ba=Calendar[2]%10;}
    			 else {qi=11;ba=11;}
    		 }
    	}
    }
    void Alarm_set() //闹钟设置
    {
    	if(s1_flag==3)//闹钟设置界面
    	{
    		if(s2_flag==1) {yi=Alarm[0]/10;er=Alarm[0]%10;san=liu=10;si=Alarm[1]/10;wu=Alarm[1]%10;qi=Alarm[2]/10;ba=Alarm[2]%10;}
    		else if (s2_flag==2)//时设置,时单元0.5s闪烁一次
    		{
    			san=liu=10;si=Alarm[1]/10;wu=Alarm[1]%10;qi=Alarm[2]/10;ba=Alarm[2]%10;
    			if(state==1){yi=Alarm[0]/10;er=Alarm[0]%10;}
    			else if(state==0) {yi=11;er=11;} //熄灭
    		}
    		else if(s2_flag==3)//分设置,分单元0.5s闪烁一次
    		{
    			yi=Alarm[0]/10;er=Alarm[0]%10;san=liu=10;qi=Alarm[2]/10;ba=Alarm[2]%10;
    			if(state==1){si=Alarm[1]/10;wu=Alarm[1]%10;}
    			else if(state==0) {si=11;wu=11;}
    		}
    		else if(s2_flag==4)//秒设置,秒单元0.5s闪烁一次
    		{
    			yi=Alarm[0]/10;er=Alarm[0]%10;san=liu=10;si=Alarm[1]/10;wu=Alarm[1]%10;
    			if(state==1){qi=Alarm[2]/10;ba=Alarm[2]%10;}
    			else if(state==0) {qi=11;ba=11;}
    		}
    		else if(s2_flag==5)//闹钟时长设置界面
    		{
    			yi=er=san=si=wu=liu=11;qi=time/10;ba=time%10;
    		}
    	}
    }
    void Alarming() //闹钟提醒模式
    {
    	if(Timer[0]==Alarm[0]&Timer[1]==Alarm[1]&Timer[2]==Alarm[2])
    	{
    			alarm1=1; //闹钟标志位置1
    			TR1=1;		//开启定时器T1
    	}
    }
    void keyscan()//按键扫描函数
    {
    	if(s1==0)  //时钟、日历、闹钟切换
    	{
    		delay_ms(10);//按键消抖
    		if(s1==0)
    		{
    			if(alarm1==0) //非闹钟提醒状态
    			{
    				if(s2_flag==1)//非设置状态下,s1切换界面
    				{
    					switch(s1_flag)
    					{
    						case 1:s1_flag=2;SMGflag=2;break;//日历界面
    						case 2:s1_flag=3;SMGflag=3;break;//闹钟界面
    						case 3:s1_flag=1;SMGflag=1;break;//时间界面
    					}
    				}
    				else if(s2_flag!=1)//设置状态下,s1为确认键
    				{
    					 s2_flag=1;
    					 if(s1_flag==1) {Timer[0]=Timer_set[0];Timer[1]=Timer_set[1];Timer[2]=Timer_set[2];}
    				}
    			}
    			else {alarm1=0;buzzer=1;TR1=0;} //任意键关闭闹钟
    		}
    		while(s1==0) SMG_Display(); //松手检测
    	}
    	if(s2==0)  //设置位置切换
    	{
    		delay_ms(10);//按键消抖
    		if(s2==0)
    		{
    			if(alarm1==0)//非闹钟提醒状态
    			{
    				if(s1_flag==1)//时间界面下
    				{
    					switch(s2_flag)
    					{
    						case 1:s2_flag=2;break;//设置时
    						case 2:s2_flag=3;break;//设置分
    						case 3:s2_flag=4;break;//设置秒
    						case 4:s2_flag=2;break;//循环设置
    					}
    				}
    				else if(s1_flag==2)//日历界面下
    				{
    					switch(s2_flag)
    					{
    						case 1:s2_flag=2;break;//设置年
    						case 2:s2_flag=3;break;//设置月
    						case 3:s2_flag=4;break;//设置日
    						case 4:s2_flag=2;break;//循环设置
    					}
    				}
    				else if(s1_flag==3)//闹钟界面下
    				{
    					switch(s2_flag)
    					{
    						case 1:s2_flag=2;break;//设置时
    						case 2:s2_flag=3;break;//设置分
    						case 3:s2_flag=4;break;//设置秒
    						case 4:s2_flag=5;break;//设置闹钟持续时长
    						case 5:s2_flag=2;break;//循环设置
    					}
    				}
    			} 
    			else if(alarm1==1)
    				{alarm1=0;buzzer=1;TR1=0;}//任意键关闭闹钟
    		}
    		while(s2==0)SMG_Display();//松手检测
    	}
    	if(s3==0)  // s3 +
    	{
    		delay_ms(10);//按键消抖
    		if(s3==0)
    		{
    			if(alarm1==0) //非闹铃提醒状态
    			{
    				if(s1_flag==1)//时间界面
    				{
    					switch(s2_flag)
    					{
    						case 2:Timer_set[0]++;if(Timer_set[0]==24) Timer_set[0]=0;break;//时+
    						case 3:Timer_set[1]++;if(Timer_set[1]==60) Timer_set[1]=0;break;//分+
    						case 4:Timer_set[2]++;if(Timer_set[2]==60) Timer_set[2]=0;break;//秒+
    					}
    				}
    				else if(s1_flag==2)//日历界面
    				{
    					switch(s2_flag)
    					{
    						case 2:Calendar[0]++;if(Calendar[0]==100) Calendar[0]=0; break;//年+
    						case 3:Calendar[1]++;if(Calendar[1]==13 ) Calendar[1]=1; break;//月+
    						case 4:Calendar[2]++;if(Calendar[2]==31 ) Calendar[2]=0; break;//日+
    					}
    				}
    				else if(s1_flag==3)//闹钟界面
    				{
    					switch(s2_flag)
    					{
    						case 2:Alarm[0]++;if(Alarm[0]==24) Alarm[0]=0;break;//时+
    						case 3:Alarm[1]++;if(Alarm[1]==60) Alarm[1]=0;break;//分+
    						case 4:Alarm[2]++;if(Alarm[2]==60) Alarm[2]=0;break;//秒+
    						case 5:time++    ;if(time==61)     time=0;    break;//设置闹钟时长,最长为60s
    					}
    				}
    			}
    			else if(alarm1==1)
    				{alarm1=0;buzzer=1;TR1=0;}//任意按键关闭闹钟
    		}
    		while(s3==0)SMG_Display();//松手检测
    	}
    	if(s4==0)  // s4 -
    	{
    		delay_ms(10);//按键消抖
    		if(s4==0)
    		{
    			if(alarm1==0)//非闹铃提醒状态
    			{
    				if(s1_flag==1)//时间界面
    				{
    					switch(s2_flag)
    					{
    						case 2:Timer_set[0]--;if(Timer_set[0]==-1) Timer_set[0]=23;break;//时-
    						case 3:Timer_set[1]--;if(Timer_set[1]==-1) Timer_set[1]=59;break;//分-
    						case 4:Timer_set[2]--;if(Timer_set[2]==-1) Timer_set[2]=59;break;//秒-
    					}
    				}
    				else if(s1_flag==2)//日历界面
    				{
    					switch(s2_flag)
    					{
    						case 2:Calendar[0]--;if(Calendar[0]==0) Calendar[0]=99; break;//年-
    						case 3:Calendar[1]--;if(Calendar[1]==0) Calendar[1]=12; break;//月-
    						case 4:Calendar[2]--;if(Calendar[2]==0) Calendar[2]=31; break;//日-
    					}
    				}
    				else if(s1_flag==3)//闹钟界面
    				{
    					switch(s2_flag)
    					{
    						case 2:Alarm[0]--;if(Alarm[0]==-1) Alarm[0]=23;break;//时-
    						case 3:Alarm[1]--;if(Alarm[1]==-1) Alarm[1]=59;break;//分-
    						case 4:Alarm[2]--;if(Alarm[2]==-1) Alarm[2]=59;break;//秒-
    						case 5:time--    ;if(time==-1)     time=60;    break;//设置闹钟时长-
    					}
    				}
    			}
    			else if(alarm1==1) 
    				{alarm1=0;buzzer=1;TR1=0;}//闹钟状态下,任意键可以关闭闹钟
    		}
    		while(s4==0)SMG_Display();//松手检测
    	}
    }
    void main()
    {
    	InitTimer();
    	while(1)
    	{
    		SMG_Display();
    		keyscan();
    		Alarming();
    	}
    }
    

    代码和proteus原理图
    有问题的朋友可以来戳我哟

    展开全文
  • 首先分析了多功能数字设计要求、所需实现的功能,然后分析了实现每个功能所需要的基础模块,最后进一步分析了各种基础模块。在具体设计时,采用的是自底向上的设计方法。首先设计各种基础模块,然后设计各种功能...
  • 系统硬件设备及芯片简介数字电子钟系统设计已经成熟,但是目前系统设计时基本 都是采用 LED 作为显示电路,造成硬件电路复杂、功耗高、产 品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、 体积小、...

    .

    ..

    单片机电子时钟设计报告

    设计任务

    本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。

    系统硬件设备及芯片简介

    数字电子钟系统设计已经成熟,但是目前系统设计时基本 都是采用 LED 作为显示电路,造成硬件电路复杂、功耗高、产 品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、 体积小、显示内容丰富、价格低、接口控制方便等优点,因此 在各类电子产品中被极广泛地推广和应用。字符型液晶显示模 块是一类专门用于显示字母、数字、符号等点阵式液晶显示模 块。本系统设计采用字符型液品显示模块 LCD1602 作为显示器 件,这样不仅简化了系统的硬件设计,而且极大地提高了系统 的可靠性。

    1LCD1602 简介

    字符型液晶显示模块 LCD1602 已经是单片机应用设计中 最常用的信息显示器件。LCD1602 可以显示两行,每行 16 个 字符,采用+5V 电源供电,外围电路配置简单,价格便宜,具 有很高的性价比。

    2LCD1602 功能介绍

    2.1 引脚功能

    LCD1602 采用标准 14 脚(无背光)或 16 脚(带背光)接

    口,各引脚功能见表 1。

    表 1 引脚功能

    编号

    编号

    符号

    引脚说明

    编号

    符号

    引脚说明

    1

    VSS

    电源地

    9

    D2

    Data I/O

    2

    VDD

    电源正极

    10

    D3

    Data I/O

    3

    VL

    液晶显示偏压信号

    11

    D4

    Data I/O

    4

    RS

    数据/命令选择端

    12

    D5

    Data I/O

    5

    R/W

    读/写选择端

    13

    D6

    Data I/O

    6

    E

    使能信号

    14

    D7

    Data I/O

    7

    D0

    Data I/O

    15

    BLA

    背光源正极

    8

    D1

    Data I/O

    16

    BLK

    背光源负极

    2.2 LCD1602 读写指令

    LCD1602 读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:①写指令 38H:显示模式设置;②写指令 08H:显示关闭;③写指令 01H:显示清屏;④写指令 06H:显示光标移动设置;⑤写指令 0CH:显示开及光标设置。

    2.3 LCD1602 读写操作时序

    LCD1602 读写操作时序总体上来说是比较简单的,掌握其有两种方法:一种是只看时序图,另外一种方法是直接记忆和总结读写时电平高低和变化。很显然第二种更简单和直接,下面就列出典型读写的时序要求,以方便编写程序。

    读状态:输入:RS=L,RW=H,E=H。

    输出:D0-D7=状态字。

    写指令:输入:RS=L,RW=L,D0-D7=指令码,E=上升沿。

    输出:无。

    (3)读数据:输入:RS=H,RW=H,E=H。

    输出:D0-D7=数据。

    (4)写 数 据:输入:RS=H,RW=L,D0-D7=数据,E=上升沿。

    输出:无。

    2.4 LCD1602 显示方法

    液晶显示模块是慢速显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平(即不忙),否则该指令失效。显示字符时,要先输入显示字符地址,即告诉模块在哪里显示字符。因为写入显示地址时要求最高位 D7 恒定为高电平,所以实际写入的数据应该是要显示地址值加上 80H,即将最高位 D7 置为 1。在使用此显示模块时一般要对其进行初始化,设置所需要的显示参数。液晶模块在显示字符时光标是自动右移的,无需人工干预。每次输入指令前,都要判断液晶模块是否处于忙状态。

    3数字电子钟硬件电路设计

    硬件电路系统设计主要由单片机最小系统、输入电路、输 出电路等组成。单片机最小系统同所有单片机系统,在此不作 讨论。输入电路主要时间调节电路,为简化系统我们使两个外 部中断来调节“时”和“分”数值,即将 INT0、INT1 分别接 两个按钮。LCD 显示器和单片机接口电路可以采用总线方式或 者是模拟口线方式,本设计采用第二种方式,即以单片机 I/O 模拟控制信号。具体电路见图 1,P0 口作为数据,并接上拉电 阻提升电压,P2.0 接 LCD 的 RS 端、P2.1 接 LCD 的 R/W 端、 P2.2 接 LCD 的 E 端,“分”调节按钮接 INT0,“时”调节按钮 接 INT1,图 1 省略了电源和单片机最小系统电路。

    图 1 数字电子钟硬件电路

    设计电路图及程序

    电路图如下

    原理图如下:

    程序

    共有四段程序,用Keil仿真是程序列表如图

    Regx52.h程序为:

    #ifndef __AT89X52_H__

    #define __AT89X52_H__

    sfr P0 = 0x80;

    sfr SP = 0x81;

    sfr DPL

    展开全文
  • 计算机组成原理实验电子科技大学教务处制表电子科技大学实验报告学生姓名: 郫县尼克杨学号: 66 指导教师:陈虹实验地点: 主楼A2-411 实验时间:12周-15周实验室名称:主楼A2-411实验项目名称:单周期CPU的设计与实现。...
  • 以AT89S52单片机为控制核心,通过实时时钟芯片DS1307和数字温度传感器DS18B20构成了一个多功能的数字时钟系统。详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。系统采用液晶LCD1602作为显示器,...
  • 多功能电子表的计时原理为:上电后,电子表显示P.提示符,按下A键后,电子表从00:00:00开始计时。当定时器0的定时时间满62.5ms后,定时器0溢出一次,溢出满16次后,电子表的秒加1,满60秒后,分加1,满60分后,时...
  • 时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有
  • 设计多功能电子钟在下载验证之后能实现整点报时、校时、设置闹钟等功能。
  • 时钟电路由内部时钟电路外接晶振提供,它是一种高性能、低功耗、带RAM的可随时调整时钟电路,工作电压为3V~5V;所以采用DS1302作为本设计的日历芯片;显示部份使用LCD1602B液晶模块进行数字显示,1602B液晶模块可以...
  • 摘要:随着电子科技的飞速发展,尤其是超大规模集成电路的出现,给我国的经济带来了实质性的改变...本文通过对普通单片机电子时钟设计分析,从而达到对单片机进行更深入的学习与设计。关键词:单片机;电子时钟;...
  • 本实验利用QuartusII软件,结合所学的数字电路的知识设计一个24时多功能数字,具有正常分、秒计时,动态显示,保持、清零、快速校分、整点报时、闹钟功能。 文章分析了整个电路的工作原理,还分别说明了各子模块...
  • 设计内容:设计并实现以实时交替显示日期和时间的实时日历/时钟。 设计要求: 1 按一定规律交替显示日期和时间(如每分钟显示一次日期,持续10秒,其余显示时间 ...本人需要些程序设计原理图,调试过程,
  • 学生首先在PC上利用Proteus软件自己搭建硬件电路,并利用系统提供的功能完成电路分析、系统调试和输出显示的硬件设计部分;同时在Keil软件中编制程序,进行相应的编译和仿真,完成系统的软件设计部分。当系统的设计...
  • 这是基于51单片机的时钟电路的原理图 对于喜欢单片机的朋友很有帮助

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,469
精华内容 5,387
关键字:

多功能电子时钟设计原理图