单片机AT89C51数码管数字时钟和闹钟二

详细代码讨论加我QQ:1271370903

一、课题的方案设计与论证

1.1摘要

  近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。,
  本次设计中以单片机的发展过程和发展方向为背景,介绍了单片机的输入输出的工作原理和操作方法,中断的工作原理和操作方法,电路设计及调试过程。本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(共阴极LED数码显示器、三极管、蜂鸣器、上拉电阻等),再配以相应的软件,达到制作简易数字钟的目的。数字时钟具备整点报时,手动校时、校分,还有闹钟功能。其软件部分使用proteus.仿真,难点在于中断的使用,硬件部分难点在于元器件的选择、布局及焊接。

1.2设计目的

  在日常生活和工作中,我们常常用到定时控制。早期常用的一些时间控制单元都是使用模拟电路设计而成的,它的定时准确性和重复精度都不很理想,而现在基本上都是一些基于数字技术的新型产品,随着单片机性本身价比的不断提高,新型产品的应用也越来越广泛。有的可以运用于大工业里的过程控制系统,具有强大的控制功能;有的可以运用于智能家居控制,甚至可以用于小孩的电子玩具中。它功能强大、体积小、质量轻、灵活好用,给它连接各种不同的控制芯片,就可以实现各种不同的功能。
  根据这些情况,设计了一个单片机电子时钟系统,它有基本的时间显示功能,还有定时功能,可扩展多种功能用来方便人们的生活。
①复习和巩固所学过的知识,利用此课程设计正好可以对所学习过的知识进行系统的回顾和总结
②拓展知识面,课堂的知识是远远满足不了设计的要求的,这就需要我们去主动找寻更多的资料,了解更多的知识.
③培养了设计能力和解决实际实际问题的能力,同时增强了自学能力,通过设计完整的单片机系统也初步掌握了组成系统、编程、调试等能力。
④通过本LCD电子种的设计初步了解了单片机应用系统开发研制过程,软件和硬件设计的方法.

1.3设计方案

  在硬件电路的搭建之前必须明确设计的方案,通过各个模块之间进行比较选择出最适合本设计的硬件,以发挥器件的最大功效。
1.3.1 主控芯片的选择
方案一:
  采用AT89C51单片机作为主控芯片。AT89C51是宏晶科技公司生产的一款低功耗、高性能的八位CMOS微处理器,片内具有8k在线编程Flash存储器。AT89C51单片机的内核采用的是MCS-51内核,指令完全兼容MCS-51,但是该单片机越做了升级使得芯片具有很多传统的51单片机不具备的功能,例如该芯片还有4K的EEPROM存储,在需要使用到掉电存储数据的时候就可以直接使用单片机内部的存储,不在需要在外接存储芯片进行存储。AT89C51单片机具有的开发简单、可在线编程下载、成本低是非常不错的选择。
方案二:
  采用MSP430单片机作为主控芯片。MSP430单片机称之为混合信号处理器,它可以将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,MSP430系列单片机是美国德州仪器 (TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。该系列单片机多应用于需要电池供电的便携式仪器仪表中。而却开发难度相对比较大、价格昂贵。所以在一些简单的设计中不宜采用。

1.3.2 显示器件的选择
方案一:
  采用LED数码管动态扫描显示。LED数码管的价格适中,对于显示数字或者简单的字母会比较合适。但是采用动态扫描法与单片机连接时占用CPU的I/O口较多,并且由于单片机的IO口输出电流不够,所以需要一个驱动电路,通过驱动电路放大电流后控制数码管,还有就是采用数码管进行显示的话显示的内容多了对于电路的焊接机会增大难得容易焊接错误。
方案二:
  采用LCD1602液晶显示屏。LCD1602液晶又叫LCD1602字符型液晶。液晶显示功能强大,可以同时显示出162即32个字符,可包括数字、字母、符号、或者自定义字符。LCD1602液晶显示器中的每一个字符都是由57的点阵组成。LCD1602采用并行数据传输也可以采用串行数据传输,控制简单,和市面上的大多基于HD44780液晶的控制原理完全相同。

1.4设计任务与要求

(1)8个数码管显示时分秒及按键校时。
(2)闹钟时间显示及设定闹钟。
(3)当设定闹钟的时间等于时钟时间,蜂鸣器间隔一秒响一次,响6秒停止报警。
  时间计数电路采用24进制,从00开始到23后再回到00;各用2位数码管显示时、分、秒;具有手动调整时间和闹钟时、分功能;具有闹钟功能,可以自由设定时间作为报时时间,实现任意报时作用,可以当作闹钟。
  本设计采用AT89C51单片机对电子时钟进行开发,通过Proteus软件来实现电子时钟系统的设计与仿真,并应用LED 显示相应的时间。

二、硬件设计

2.1设计系统简介

2.1.1单片机的发展历程
  单片机是计算机技术、大规模集成电路技术和控制技术的综合产物。经过30多年的发展历程,单片机应用已广泛深入人们生活中的方方面面。根据Motorola公司的统计,1990年,平均每辆汽车使用12个单片机,而到了2000年就增加到35个。所以可以毫不夸张的说,任何设备和产品的自动化、数字化和智能化都离不开单片机。现在,凡是电脑控制的设备和产品,必有单片机嵌入在其中。这一切表明,单片机已经成为人们生活中必不可少的助手。
单片机有两种基本结构:一种是在通用计算机中广泛应用的,程序和数据存储器共用一个存储器空间的结构,称为Von Neumann结构。另一种是将程序存储器和数据存储器分开,分别寻址的结构,称为Harvard结构,目前的单片机多采用这种结构"。
本文设计的单片机电子时钟系统的核心是当前应用很广泛的51系列单片机,配置了外围设备,构成了一个简单的计时系统,它具有体积小,可靠性比较高的特点,不仅能满足要求而且还可以扩展很多功能,在实际生活中应用很广泛。
2.1.2电子时钟的特点
  随着电子工业的发展,电子产品日新月异。钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的功能。诸如数字钟、万年历、电子表、定时自动报警、定时启闭电路、通断动力设备,甚至各种定时电气的自动启用、通信、网络等众多领域,所有这些都是以钟表数字化为基础的。由于其功能的不断增加,使用方便性不断提高,很多产品已经成为人类日常生活中不可或缺的助手。
  现在许多高精度的计时工具都使用了石英品体振荡器,由于电子钟,电子表,石英表都采用了石英技术,因此工作时精度高,稳定性能好,用起来方便,不需要经常调试,数字电子时钟用集成电路计时时,译码代替机械式传动,用LED显示代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示的功能,还可以进行时和分的校对,片选的灵活性好到。
2.1.3电子时钟的应用
  电子时钟除了在城市的主要营业场所、车站、码头等公共场所使用,还可以改装在摩托车和汽车上,LCD显示,带蓝色背光,白天在太阳光下也能非常清楚的看到显示时间,关钥匙可以关闭蓝色背光,时间还能显示也不会清零,因LCD的显示耗电量很省的,所以工作时也不用担心耗电问题。在行路上,如果司机看时间可能会很麻烦甚至影响其他人的生命安危。现在车上改装了一个蓝色的液晶电子钟,不管白天还是黑夜,随时可以看时间,非常方便W。
2.1.4电子钟的工作原理
  本设计的电子时钟是由AT89C51,八段数码管等构成,采用晶振电路作为驱动电路,由计时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。电路中的四个控制键拥有多种不同的功能,按下又松开,可以实现校对时间以及定时的功能,还可以达到省电的目的。
2.1.5电子时钟的设计流程
单片机AT89C51数码管数字时钟和闹钟二_第1张图片

2.2总体方案设计

2.2.1硬件电路的设计方案
本设计的硬件电路设计框图如图所示:
单片机AT89C51数码管数字时钟和闹钟二_第2张图片

          图 总体结构框图
  由图可以看出:本设计电路的硬件部分共由五部分组成,分别为按键模块、复位电路模块、振荡电路模块、发声模块、时间显示模块。
2.3仿真原理总图
由上面的设计框图可以进一步得出本系统的电路原理图。

单片机AT89C51数码管数字时钟和闹钟二_第3张图片

2.4电路各模块
2.4.1 AT89C51原理
  AT89C51是AT公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。AT89C51使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU和在系统可编程Flash,使得AT89C51为众多嵌入式控制应用系统提供高灵活、非常有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
  其次晶振电路,XTAL1和XTAL2 是独立的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。

单片机AT89C51数码管数字时钟和闹钟二_第4张图片

            图 晶振电路
  再来就是复位电路,复位电路分为:上电自动复位和开关复位。

单片机AT89C51数码管数字时钟和闹钟二_第5张图片

            图 复位电路
完整的AT89C51单片机最小系统电路图如图3-3所示。

单片机AT89C51数码管数字时钟和闹钟二_第6张图片

        图3-3 AT89C51单片机最小系统

2.4.2独立按键
  本设计中设置有按键电路,通过几个独立按键进行人机交互。按键通过一点连接单片机的I/O口一端连接电源地。
单片机AT89C51数码管数字时钟和闹钟二_第7张图片

2.4.3数码管
2.4.3.1数码管的接线
  数码管的段选端与AT89C51芯片P0引脚对应相连,数码管的位选端与AT89C51芯片P2引脚对应相连。
单片机AT89C51数码管数字时钟和闹钟二_第8张图片

2.4.4 蜂鸣器电路的设计

单片机AT89C51数码管数字时钟和闹钟二_第9张图片

三、软件设计
KEIL集成开发环境简介
  Keil C51是Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

3.1、 主流程图
单片机AT89C51数码管数字时钟和闹钟二_第10张图片

3.2按键流程图
单片机AT89C51数码管数字时钟和闹钟二_第11张图片

3.3闹钟流程图
单片机AT89C51数码管数字时钟和闹钟二_第12张图片

3.4设计过程
  利用keil编写代码,并进行编译、调试,生成.hex文件。在proteus中按照设计原理和设计框架画图。在proteus中加载.hex文件进行仿真,观察现象。若与预期不一致则检查电路或修改代码,直至与设计方案一致。

1if(setflag==0)
		{
			if(MODE != 1 || T_CYCLE)
			{
				display(HH/10,0);  //显示小时十位数
				display(HH%10,1);  //显示小时个位数
			}
			display(10,2);  //显示-
			if(MODE != 2  || T_CYCLE)
			{
				display(MM/10,3);  //显示分钟十位数
				display(MM%10,4);  //显示分钟个位数
			}
			display(10,5);  //显示-
			if(MODE != 3  || T_CYCLE)
			{
			display(SS/10,6);  //显示秒十位数
			display(SS%10,7);  //显示秒个位数
			}
		}
		 if(setflag==1)
		 {
			if(SET_MODE != 1 || T_CYCLE)
			{
				display(set_hour/10,0);  //显示闹钟小时十位数
				display(set_hour%10,1);  //显示闹钟小时个位数
			}
				display(10,2);  //显示-
			if(SET_MODE != 2  || T_CYCLE)
			{
				display(set_min/10,3);  //显示闹钟分钟十位数
				display(set_min%10,4);  //显示闹钟分钟个位数
			}	



此段为显示时间程序,通过时分秒变量把此时时钟时间一位一位发送到数码管中。
2void key()
{	
 	if(key1==0)
	{
		delay(2);
		if(key1==0)
		{
			while(!key1);
	      	TR0=0;
		 	setflag=0;
	      	if(MODE == 3) MODE = 1;
		 	else MODE ++;		
        }
   }			
  	if(key2==0)
	{
		delay(2);
		if(key2==0)
		{
			while(!key2);
			 if(MODE == 1) H_Increase() ;
			 if(MODE == 2) M_Increase() ;
			  if(MODE == 3) S_Increase() ;
			  if(SET_MODE==1)
			  {
				set_hour++;
				if(set_hour==24)set_hour=0;
			  }
			  if(SET_MODE==2)
			  {
				 set_min++;
				 if(set_min==60)set_min=0;
			  }		  
			  
     	}
	 }	
	if(key3==0)
	{
		delay(2);
		if(key3==0)
		{
			while(!key3);
		    if(MODE == 1) H() ;
			 if(MODE == 2) M() ;
			  if(MODE == 3) S() ;
			 if(SET_MODE==1)
			  {
				 set_hour--;
				if(set_hour==0)set_hour=23;
			  }
			  if(SET_MODE==2)
			  {
				 set_min--;
				if(set_min==0)set_min=59;
			  } 
           }
	 }
	 if(key4==0)
	  {
		delay(2);
		if(key4==0)
		{
			while(!key4);
	        TR0=1;
			MODE=0;	
			SET_MODE=0;
			setflag=0;
        }
	 }
	  if(key5==0)
	{
		delay(2);
		if(key5==0)
		{
			while(!key5);
			setflag=1;
			SET_MODE++;
			if(SET_MODE >2)SET_MODE =1;     	
         }
	 }
} 
此段是按键设置时间,设置闹钟函数,通过这个可以校正显示时间,以及设置闹钟。
3void T0_INTSrv(void) interrupt 1
{
	//定时器重新开始计时。
	TH0 = 0xd8;
	TL0 = 0xf0;
	u1_10ms ++;
	if (u1_10ms>99)	// 1000 ms = 1 second
	{
		u1_10ms = 0;
		SS++;
		if(SS==60)
		{
			SS=0;
			MM++;
			if(MM==60)
			{
				MM=0;
				HH++;
			    if(HH==24)
				HH=0;
    		}
		}
	}
}
此段为定时器计时函数,通过定时器0定时10MS,中断100次就是1秒,满60秒,分钟加1,分钟满60,小时加1,小时满24,清零。
4void beep ()	//闹钟检查
{
	if((set_hour==HH)&&(set_min==MM)&&(SS<6))// 判断走时与闹钟时间相等
	{
			 if(SS%2==0)
			 {
				BZ=0;
			 }
			 else
			 {
				BZ=1;
			 }	 
	}
}
此段为闹钟子函数,判断此时时钟时间是否与设定的闹钟时间相等,若相等则启动蜂鸣器报警,工作时间为6s,到时则蜂鸣器停止工作。

四、仿真及结果

  Proteus软件是目前世界上最先进的嵌入式系统设计与仿真平台,可以实现模拟电路、数字电路及各种电路系统的仿真和PCB设计等功能,是目前唯一一个能够对各种处理器进行实时仿真、调试与测试的EDA工具。微控制器系统相关的仿真需建立编译和调试环境,可选择Keil5软件。该软件支持许多芯片,集编辑、编译和程序仿真于一体,同时还支持汇编和C语言的程序设计。它的界面简单易学,在调试程序、软件仿真方面有很强大的功能。

4.1开始仿真

时间从12:59:50开始运行
单片机AT89C51数码管数字时钟和闹钟二_第13张图片

4.2调整时间
调为17:00:00
单片机AT89C51数码管数字时钟和闹钟二_第14张图片

设置闹钟17:51
单片机AT89C51数码管数字时钟和闹钟二_第15张图片

你可能感兴趣的:(51单片机,单片机,stm32,嵌入式硬件)