当前位置: 首页 > news >正文

51电子表

设计要求:

基本任务:

用单片机和数码管设计可调式电子钟,采用24小时制计时方式,要求能够稳定准确计时,并能调整时间。发光二极管每秒亮灭一次。电子钟显示格式为:时、分、秒各两位,中间有分隔符,格式为xx-xx-xx,共8位。采用三个按键调整时间,具体任务如下:

  1. 发光二极管每秒钟亮灭一次(亮500ms,灭500ms)。
  2. 上电自动显示初始时间 12-00-00。
  3. 实现时钟走时和显示时、分、秒。
  4. 当第一次按下第一个按键时进入时间调节状态,实现对显示时间的分钟调节,按下第二个按键时实现分钟的加1调节,按下第三个按键时实现分钟的减1调节。
  5. 当第二次按下第一个按键时进入显示时间的小时调节状态,按下第二个按键时实现小时的加1调节,按下第三个按键时实现小时的减1调节。

当第三次按下第一个按键时数字时钟恢复正常时间显示。

内容及步骤:

一、电路原理图

二、源代码(包括注释)
#include<reg51.h>
#define uChar unsigned char
#define uInt unsigned int
uChar a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //单个数码管字模
uChar b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};              //选通数码管位数
uChar second=00,minute=00,hour=12,count;                          //赋初始值
sbit one = P3^0;                                                  // 调节位
sbit two = P3^1;                                                  //加一位
sbit three = P3^2;                                                //减一位
sbit four= P3^3;                                                  //暂停位
sbit five= P1^0;                                                  //LED状态位
void Delay(unsigned int t)                            //时间延时函数
{
	int i,x;
	for(i=1;i<=x;x++);
while(t)
	{
		t--;
	}
}
void Dispaly1(uChar second,uChar minute,uChar hour)   //数码管显示函数
{
	P2=b[0];              //小时的显示
	P0=a[hour/10];        //小时的十位显示
	Delay(10);
	P2=b[1];
	P0=a[hour%10];        //小时的个位显示
	Delay(10);
	
	P2=b[2];              //--显示
	P0=0x40; 
	Delay(10);
	
	P2=b[3];              //分钟显示
	P0=a[minute/10];   
	Delay(10);
	
	P2=b[4];
	P0=a[minute%10]; 
	Delay(10);
	
	P2=b[5]; 
	P0=0x40; 
	Delay(10);
	
	P2=b[6];             //秒钟显示
	P0=a[second/10];    
	Delay(10);
	
	P2=b[7];; 
	P0=a[second%10]; 
	Delay(10);
}

void Keyscan1()      //调节函数
{
	static uChar i=0,j=0;   //定义初始值,以I,J分别实现暂停和调节功能 i是暂停位次数,j是调节标志位
	if(four==0)        //暂停键按下
		{
			while(!four);
			i++;
		}
		if(i%2==1)
			{
				TR0=0;     //关中断  停止计时
			}
			if(i%2==0)
				{
					TR0=1;  //开中断
				}
				if(one==0){     //当按下第一个键位
					while(!one);
					j++; 
				}
					if(j%3==1)    //j+1使进入到分钟的调节
						{
							if(two==0)
								{
									while(!two);
									minute++;
									if(minute==60)        //判断进位
										minute=0; 
								}
							if(three==0)
								{
									while(!three);
									
									if(minute==0)          //判断退位标志
										minute=60; 
                  minute--;
								}
						}
						if(j%3==2)  //进入到小时的调节
							{
								if(two==0)
									{ 
										while(!two);
										hour++;
										if(hour==24)
											hour=0; 
									}
								if(three==0)
									{ 
										while(!three);
										hour--;
										if(hour==0)
											hour=24; 
									}
							}
}

void main()   //主函数
{	void delay(int);
	int time = 50;
	TMOD=0x01; 	  //TO定时方式一
	TH0=(65536-10000)/256;  //高位值  定义10ms
	TL0=(65536-10000)%256;  //低位值
	EA=1;    //开总中断
	ET0=1;   //开TO中断
	TR0=1;   //启动TO
	while(1)
		{
			static uChar h=0;
			five=!five;
			delay(time);
			Dispaly1(second,minute,hour);  //函数初始化
			Keyscan1();    //函数初始化
		}
}

void time0_int(void) interrupt 1   //中断函数 循环进位
{
	TH0=(65536-10000)/256;
	TL0=(65536-10000)%256;
	count++;
	if(count==100)                // 一秒
		{
			count=0;
			second++;
			if(second==60)            //一分钟
				{
					second=0;
					minute++;
					if(minute==60)        //一小时
						{
							minute=0;
							hour++;
							if(hour==24)      //24小时
								{
									hour=0;
								}
						}
				}
		}
}

三、流程图

四、仿真运行结果及分析

初始值状态:

第一次按下K1并按下一次K2(分加)

第一次按下K1并按下两次K3(分减)

第二次按下K1并按下一次K2(时加)

第二次按下K1并按下两次K3(时减)

第三次按下K1(恢复正常计时)

 

相关文章:

  • AI 之 LLM(大语言模型)是如何生成文本的!
  • 力扣经典算法篇-11-除自身以外数组的乘积(总乘积求除法,左右乘积法)
  • 探索 C++ 中的 const 关键字
  • 美食推荐小程序
  • OpenFeign 的实现原理详解
  • 探索在视频深度伪造中的细微的表情变化或对特定面部特征的小改动检测方法
  • 使用numpy构建逻辑回归模型及训练流程
  • 关于哈希冲突的讨论
  • TDOA定位算法核心优势解析(2025年更新)
  • 【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与性能优化详解 - 3-5年Java开发必备知识
  • netty中的ChannelHandler详解
  • 【DB2】备份失败SQL1762N
  • python相关面试题
  • 算法系列——无监督学习——15.混合高斯分布
  • 光学工程考研调剂推荐
  • c++将jpg转换为灰度图
  • APCC:CloudberryDB和Greenplum数据库的管理利器
  • LLM_基于OpenAI的极简RAG
  • Django从零搭建卖家中心注册页面实战
  • 什么是 ForkJoinPool
  • 东莞品牌型网站建设价格/链接买卖平台
  • 东西湖网站建设/武汉seo优化分析
  • 政府部门网站建设方案/电商网站运营
  • app设计模板网站/三亚网络推广
  • 搜索引擎网站建设/seo外链在线工具
  • 做外贸做的很好的网站/什么是指数基金