51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)_51单片机电子时钟-程序员宅基地

技术标签: 电子类  51单片机  嵌入式硬件  单片机  

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

首先展示硬件设计部分,此处采用proteus仿真演示。其中液晶屏上面一行显示的是实际时间,下面一行显示的是设定闹钟时间。通过调节单刀双掷开关来改变正在调整的时间是实际时间还是闹钟时间。下面的三个按键依次用来调节模式(模式即正在调节的量是时、分或秒,通过最上面的三个LED灯来表达出来),下面的两个按键分别用来进行加减一的操作。
在这里插入图片描述
以上是硬件设计部分,下面展示软件部分代码。
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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/creampang/article/details/125453460

智能推荐

wxpython,窗口,控件,事件_wxpython 调用窗口控件-程序员宅基地

文章浏览阅读2.3k次。介绍一个python的图形化界面,wxpython。 wxpython是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。 wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS_wxpython 调用窗口控件

PanDownload复活了!60MB/s!-程序员宅基地

文章浏览阅读405次。(软件下载方式在文末)自从 PanDownload 被处理之后一直没有超越它的可替代的应用出来但是最近,竟然有人接盘了!重新制作上线推出了更加强劲的复活版!放张图,大家先感受下60MB/..._.较好的容灾处理(眼神暗示)

俺也来祭祭熊猫-程序员宅基地

文章浏览阅读5.2k次。最近熊猫烧香肆虐,WC里CIM那群人集体中招,俺的机子裸奔竟然也没事,呵呵。刚好python的邮件列表上有人给“熊猫”玩文字游戏,觉得特有意思,拿出来和大家分享一下 。 床前明月光,熊猫在烧香。专杀杀不尽,两眼泪汪汪。 熊猫烧不尽,关机开又生。   宝剑锋从磨砺出,熊猫香自网上来。   无边香火烧烧下,不尽熊猫滚滚来。身心俱疲终不悔,为猫烧得人憔悴。 相见时难杀亦难,熊猫烧

影响力在职场的重要性_职权影响力-程序员宅基地

文章浏览阅读7.8k次。前端时间参加了公司的管理培训,讲非职权影响力。对于领导者来讲,如果不能提高自己的影响力,那么是没办法做到让下属信服和追随的。整理了一下培训的收获。 影响力的定义运用一些别人所乐于接受的方式,改变他人的思想和行动,具体有个性、思想,以及行动。这些方式包括:举例引证、造成恐惧、赞美肯定、权势财富等。 影响力的6大武器互惠 承诺一致 社会认同 喜好 权威 稀缺另外次要..._职权影响力

用Vue制作记事本_vue选中文字做笔记-程序员宅基地

文章浏览阅读765次,点赞2次,收藏7次。先放个效果图吧制作记事本一共分为五个部分。1、第一部分就是添加内容。目的是输入内容后按下enter能够在目录下出现对应的内容,此部分应用v-for,v-model以及v-text完成,html程序如下<div id="app"> <input id="text" type="text" v-model="addValue" @keyup.enter="add" placeholder="请输入内容"> <ul> <li v-f_vue选中文字做笔记

Web安全--反序列化漏洞详解(php篇)-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏9次。反序列化

随便推点

linux 磁盘盘符改变,硬盘盘符重启后 自动切换——根据UUID挂载磁盘-程序员宅基地

文章浏览阅读997次。[root@platform-103 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 60G 0 disk├─vda1 252:1 0 500M 0 part /boo..._linux重启后盘符交换

数据结构与算法详解——散列表篇(附c++实现代码)_设计算法,将数组a 进行散列存储,以解决-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏15次。目录散列表散列函数哈希冲突开放地址法线性探测二次探测双重散列链表法装载因子散列表  前面数组、链表、栈、队列都是序列式容器,存储的都是一个元素。而散列表又叫哈希表(hash table),是一种关联式容器,存储的是一对值,一般是一个key对应一个value(又叫键值对)。  c++ stl中的map就是一个散列表,举个例子:std::map<std::string,int> m;m["小明"]=170;std::cout<<"小明的身高是"<<m["小明"]&_设计算法,将数组a 进行散列存储,以解决

域名讲解(一)域名基础概念-程序员宅基地

文章浏览阅读8k次,点赞4次,收藏26次。它作为可以将域名和IP地址相互映射的一个分布式数据库,是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的系统,搭载域名系统的机器称之为域名服务器,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。..._域名

CVPR 2021 | 250 FPS!让实时语义分割飞起!重新思考BiSeNet-程序员宅基地

文章浏览阅读3.3k次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达本文转载自:AI人工智能初学者Rethinking BiSeNet For Real-time Semantic Seg..._语义分割的fps

VC++6.0 使用TeeChart v8.0 绘制多条曲线及圆滑处理._vc 6.0 teechart8-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏27次。 根据网络资源整合了一份, 并开发了自己的demo。http://download.csdn.net/detail/zdw86/9833470 一、添加控件(一)创建工程 (二)插入控件 (三)添加类 点完确认之后,要等很长一段时间.期间不要触碰VC++6.0否则程序..._vc 6.0 teechart8

分布式计算中的数据一致性:Paxos 与 Raft 对比-程序员宅基地

文章浏览阅读888次,点赞8次,收藏23次。1.背景介绍分布式系统是现代计算机系统的基础设施之一,它允许多个计算节点在网络中协同工作。随着分布式系统的发展和应用,数据一致性问题变得越来越重要。在分布式计算中,数据一致性是指在分布式系统中的多个节点能够同步获取和更新相同的数据,以确保数据的一致性。在分布式系统中,数据一致性问题主要由于节点之间的异步通信和故障导致的数据不一致。为了解决这个问题,人们提出了一种称为Paxos和Raft的一...

推荐文章

热门文章

相关标签