51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)

这篇具有很好参考价值的文章主要介绍了51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)

首先展示硬件设计部分,此处采用proteus仿真演示。其中液晶屏上面一行显示的是实际时间,下面一行显示的是设定闹钟时间。通过调节单刀双掷开关来改变正在调整的时间是实际时间还是闹钟时间。下面的三个按键依次用来调节模式(模式即正在调节的量是时、分或秒,通过最上面的三个LED灯来表达出来),下面的两个按键分别用来进行加减一的操作。
51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)
以上是硬件设计部分,下面展示软件部分代码。
1、变量及函数定义

#include <reg51.h> 
#define uint unsigned int 
#define uchar unsigned char

uchar data Set[4]={'S','e','t',':'};//初始显示
uchar data Rel[4]={'R','e','l',':'};//初始显示
uchar data rel_time[8]={'0','0','-','0','0','-','0','0'};//初始显示
uchar data set_time[8]={'0','3','-','0','5','-','0','0'};//初始显示
/*液晶的使能、读写端定义*/
sbit lcden=P2^2;
sbit lcdrs=P2^1;	
sbit lcdrw=P2^0;
/*按键定义*/
sbit keymode=P2^7;
sbit keyadd=P2^6;
sbit keysub=P2^5;
sbit cho=P2^3;//开关定义
/*LED定义*/
sbit ledsec=P3^7;
sbit ledmin=P3^6;
sbit ledhour=P3^5;
sbit bee=P2^4;//蜂鸣器定义

uchar i=20;
uchar j;
uchar mode;
uchar choose;
uchar rel_sec=0,rel_min=0,rel_hour=0;
uchar set_sec=0,set_min=5,set_hour=3;

/*函数清单*/
void delay(uint x);		  //该延时大约100us
void baoshi();          //报时函数
void comp();            //闹钟函数,对实际值和设定闹钟值进行比较
void dis();             //显示函数
void Key();          //按键函数

/*液晶显示有关函数*/
void LCDdelay(uint x);//LCD延时函数
void write_com(uchar lcdcom);//写命令
void write_data(uchar lcddate);//写数据
void Init1602();//

2、与液晶显示有关的各种函数

void LCDdelay(uint x)		  //该延时大约100us(不精确,液晶操作的延时不要求很精确)
{
  uchar j;
	while(x--)
		for(j=0;j<120;j++);
}

//写命令
void write_com(uchar lcdcom)
{
  lcdrs=0;
  lcdrw=0;	
  P1=lcdcom;
  LCDdelay(5);
  lcden=1;
  LCDdelay(5);
  lcden=0;
}

//写数据
void write_data(uchar lcddate)
{
  lcdrs=1;
	lcdrw=0;
	P1=lcddate;
	LCDdelay(5);
	lcden=1;
	LCDdelay(5);
	lcden=0;
	
}

//1602初始化
void Init1602()
{
	lcden=0; 
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x06);//当读或写一个字符是指针后一一位
  write_com(0x01);//清屏
	write_com(0x80+2);
	for(j=0;j<4;j++){
		write_data(Rel[j]);
		LCDdelay(5);
	}
	write_com(0x80+0x40+2);
	for(j=0;j<4;j++){
		write_data(Set[j]);
		LCDdelay(5);
} 
	write_com(0x80+6);
  for(j=0;j<8;j++){
		write_data(rel_time[j]);
		LCDdelay(5);
	}
	write_com(0x80+0x40+6);
  for(j=0;j<8;j++){
		write_data(set_time[j]);
		LCDdelay(5);
	}

}

3、其他各定时、调节等函数(电子钟功能实现)

/*定时1s*/

void timer0()interrupt 1
{
	TH0=15536/256;
	TL0=15536%256;
	i--;
	if(i==0){
		i=20;
		rel_sec++;
		if(rel_sec==60){
			rel_sec=0;
			rel_min++;
			if(rel_min==60)
			{
				rel_min=0;
				rel_hour++;
				if(rel_hour==24){
					rel_hour=0;
				}
			}
		}	
	Key();
  comp();		
  baoshi();
	dis();	
	}
	
}	
	
void dis(){
	  rel_time[0]=rel_hour/10;
		rel_time[1]=rel_hour%10;
		rel_time[2]='-'-0x30;
		rel_time[3]=rel_min/10;
		rel_time[4]=rel_min%10;
		rel_time[5]='-'-0x30;
		rel_time[6]=rel_sec/10;
		rel_time[7]=rel_sec%10;
	
	  set_time[0]=set_hour/10;
		set_time[1]=set_hour%10;
		set_time[2]='-'-0x30;
		set_time[3]=set_min/10;
		set_time[4]=set_min%10;
		set_time[5]='-'-0x30;
		set_time[6]=set_sec/10;
		set_time[7]=set_sec%10;
	  write_com(0x80+6);
	  for(j=0;j<8;j++){
	    write_data(rel_time[j]+0x30);
		  LCDdelay(5);
	  }
	  write_com(0x80+0x40+6);
	  for(j=0;j<8;j++){
	    write_data(set_time[j]+0x30);
		  LCDdelay(5);
	  }
}	

void Key(){
		if(keymode==0){
		  mode++;
		  if(mode==4)
			mode=1;
		}
		if(mode==1){
			ledsec=1;
			ledmin=0;
			ledhour=0;
		}
		if(mode==2){
			ledsec=0;
			ledmin=1;
			ledhour=0;
		}
		if(mode==3){
			ledsec=0;
			ledmin=0;
			ledhour=1;
		}
			
		if(cho==0){
		choose=0;
	  }
	  else{
		choose=1;
	  }
	
	if(keyadd==0){
		if(mode==1){
			if(choose==0){
				rel_sec++;
			if(rel_sec==60){
			rel_sec=0;
		  }
			}
			else{
				set_sec++;
			if(set_sec==60){
			set_sec=0;
		  }
			}
		}
		else if(mode==2){
			if(choose==0){
				rel_min++;
			if(rel_min==60){
			rel_min=0;
		  }
			}
			else{
				set_min++;
			if(set_min==60){
			set_min=0;
		  }
			}
			
	  }
		if(mode==3){
			if(choose==0){
				rel_hour++;
			if(rel_hour==24){
			rel_hour=0;
		  }
			}
			else{
				set_hour++;
			if(set_hour==24){
			set_hour=0;
		  }
			}
			
	  }
  }
  if(keysub==0){
		if(mode==1){
			if(choose==0){
				if(rel_sec==0){
			rel_sec=59;
		  }
			else
			rel_sec--;
			}
			else{
				if(set_sec==0){
			set_sec=59;
		  }
			else
			set_sec--;
			}
			
		}
		else if(mode==2){
			if(choose==0){
				if(rel_min==0){
			rel_min=59;
		  }
			else
			rel_min--;
		  }
			else{
				if(set_min==0){
			set_min=59;
		  }
			else
			set_min--;
			}
			
			
	  }
		if(mode==3){
			if(choose==0){
			  if(rel_hour==0){
			rel_hour=23;
		  }
			else
			rel_hour--;
			
			}
			else{
				if(set_hour==0){
			set_hour=23;
		  }
			else
			set_hour--;
			
			}
	  }
  }
}


void delay(uint x)		  //该延时大约100us 
{
  uchar j;
	while(x--)
		for(j=0;j<120;j++);
}

void baoshi(){
	if(rel_min==0&&rel_sec==1){
		bee=1;
		delay(500);
		bee=0;
	}
}

void comp(){
	if(rel_hour==set_hour&&rel_min==set_min&&rel_sec==set_sec+1)
	{bee=1;
	delay(1000);
	bee=0;}
}

4、主函数

void main() { 
	cho=0;
	bee=0;
  ledsec=0;
	ledmin=0;
	ledhour=0;
	mode=1;
	keymode=1;
	keyadd=1;
	Init1602();
	TMOD=0X01;
	TH0=15536/256;
	TL0=15536%256;
	EA=1;
	ET0=1;
	TR0=1;
	while(1);

}

基于以上,即可实现51单片机数字电子钟的设计,全部代码及仿真文件下载链接:https://download.csdn.net/download/creampang/85674151?spm=1001.2014.3001.5503文章来源地址https://www.toymoban.com/news/detail-504396.html

到了这里,关于51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机应用实例:LED显示电脑电子钟

    本例介绍一种用LED制作的电脑电子钟(电脑万年历)。其制作完成装潢后的照片如下图: 上图中,年、月、日及时间选用的是1.2寸共阳数码管,星期选用的是2.3寸数码管,温度选用的是0.5寸数码管,也可根据个人的爱好选用不同规格的数码管。原理图如下图所示: 上图中,

    2024年02月04日
    浏览(34)
  • 基于STM32单片机的电子钟(Proteus仿真+程序)

    本设计由STM32单片机+液晶1602+按键+RTC时钟组成。 1、采用STM32F103最小系统板。 2、利用STM32内部自带RTC时钟提供时钟信号 3、液晶1602实时显示年月日、时分秒、星期等信息。 4、三个按键可实现年月日、时分秒的设定。 由于在仿真中运行CPU占用率较高,运行时,时间会变慢许多

    2024年02月12日
    浏览(40)
  • 【数字电子技术课程设计】多功能数字电子钟的设计

    摘要 1  设计任务要求 2  设计方案及论证 2.1  任务分析 2.1.1 晶体振荡器电路 2.1.2 分频器电路 2.1.3 时间计数器电路 2.1.4 译码驱动电路 2.1.5 校时电路 2.1.6 整点报时/闹钟电路 2.2  方案比较 2.3  系统结构设计 2.4  具体电路设计 3  电路仿真测试及结论分析 3.1  电路仿真测

    2024年02月03日
    浏览(42)
  • 数字电子钟—VHDL 设计

    设计任务 :设计一台能显示时、分、秒的数字钟。 具体要求如下: (1) 由实验箱上的时钟信号经分频产生秒脉冲; (2) 计时计数器用 24 进制计时电路; (3) 可手动校时,能分别进行时、分的校正; (4) 整点报时; 设计要求: (1) 采用 VHDL 语言描述系统功能,并在

    2024年02月11日
    浏览(39)
  • 电路与数字逻辑课程设计-电子钟功能

    以下内容为我电路与数字逻辑实验的实验报告内容。 实验部分采用的是logisim实现 本实验因时间问题做的比较仓促,有许多不足之处,还请谅解。 想要完整代码的可以在我的博客资源进行下载 电路与数字逻辑课程设计-电子钟-单片机文档类资源-CSDN文库 一、课程设计目的 设

    2023年04月21日
    浏览(36)
  • 基于FPGA的数字电子钟的设计与实现

    系统顶层模块设计   系统功能 基本功能:实现秒、分钟、小时、星期的计数,分频,时分秒检测时钟选择,实现8位数码管显示计数结果。 拓展功能:“6,9”补全,时钟暂停,时钟清零, 时钟加杠,星期,整点报时,秒表        的计时、暂停和清零 ,手动校时, 切换

    2024年02月10日
    浏览(40)
  • 电路设计(20)——数字电子钟的multism仿真

            使用数字芯片,设计一个电子钟,用数码管显示,可以显示星期,时、分、秒,可以有按键校准时间。有整点报警功能。         设计好的multism电路图如下所示         时基脉冲使用555芯片产生。在仿真里面是LM555,在实际电路中,使用NE555即可。 NE555是一种经典的

    2024年02月19日
    浏览(47)
  • 51单片机项目(9)——基于51单片机的电子琴设计

    简易电子琴设计设计内容: 1.用矩阵键盘代表琴键,至少能弹出8个音符,分别是:音符1.23.4.,5,6,  2.键按下的时间长短表征节拍的长短,用蜂鸣器发出声音 3.数码管显示出当前音符 4.音量可调 (代码及其工程文件放在最后) 电路图如下: 51单片机电子琴是一种基于51单片机(

    2024年02月09日
    浏览(32)
  • 基于51单片机的电子秤设计

    电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。 电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计

    2024年02月02日
    浏览(35)
  • 基于51单片机的电子密码锁设计

    一.硬件方案         本系统由STC89C52单片机、4*4矩阵键盘,蜂鸣器,复位电路和晶振电路、继电器等组成,4*4键盘主要用于密码的输入和修改,蜂鸣器报警,复位电路和晶振电路与STC89C52单片机组成单片机最小系统。它具有设置、修改6位用户密码、输错报警、密码错误报

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包