单片机——时间表程序加仿真

news2024/9/22 15:45:35

一、程序 

#include <REG52.h>
#include "main.h"
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit SW=P1^0;
unsigned char code SEG[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8E,0x86};
unsigned char i,cp,cp1,flash,key1flag,key2flag,key3flag,key4flag,MODE,dingshiflag=1;
char hour=23,min=29,sec=56,hour_t=23,min_t=30;
void delay(unsigned int x)
{
	while(x--);
}

void display(void)
{
	P0=0xFF; // proteus 仿真需要消隐
	if(MODE==0)
	{
		switch(i)
			// 共阳极,低电平显示
		{ // 位或运算符:| 任意一个为1,结果就为1,否则为0
			// 位与运算符:& 都为1,结果就为1,否则为0
			// 当flash为0xFF(11111111)时,0x7F|flash为0xFF,运算后仍为SEG[min%0]
			// 当flash为0x00(00000000)时,0x7F|flash为0x7F,运算后SEG[min%10]的
			// 最高位变为0,小数点显示
			case 0:P0=SEG[sec%10];P2=0xFE;break; // P2:1111 1110,最后一位为0,最后一位显示
			case 1:P0=SEG[sec/10];P2=0xFD;break;                //0000 0000  P2:1111 1101
			case 2:P0=SEG[min%10]&(0x7F|flash);P2=0xFB;break;   //0111 1111
			case 3:P0=SEG[min/10];P2=0xF7;break;
			case 4:P0=SEG[hour%10]&(0x7F|flash);P2=0xEF;break;
			case 5:P0=SEG[hour/10];P2=0xDF;break;
		}
	}
	if(MODE==1)
	{
		switch(i)
		{
			case 0:P0=SEG[sec%10];P2=0xFE;break;
			case 1:P0=SEG[sec/10];P2=0xFD;break;               //0000 0000
			case 2:P0=SEG[min%10]&(0x7F|flash);P2=0xFB;break;  //0111 1111
			case 3:P0=SEG[min/10];P2=0xF7;break;
			case 4:P0=SEG[hour%10]|flash;P2=0xEF;break;
			case 5:P0=SEG[hour/10]|flash;P2=0xDF;break;
		}
	}
	if(MODE==2)
	{
		switch(i)
		{
			case 0:P0=SEG[sec%10];P2=0xFE;break;
			case 1:P0=SEG[sec/10];P2=0xFD;break;               //0000 0000
			case 2:P0=SEG[min%10]|flash;P2=0xFB;break;         //0111 1111
			case 3:P0=SEG[min/10]|flash;P2=0xF7;break;
			case 4:P0=SEG[hour%10]&(0x7F|flash);P2=0xEF;break;
			case 5:P0=SEG[hour/10];P2=0xDF;break;
		}
	}
	if(MODE==3)
	{
		switch(i)
		{
			case 0:P0=SEG[sec%10]|flash;P2=0xFE;break;
			case 1:P0=SEG[sec/10]|flash;P2=0xFD;break;         //0000 0000
			case 2:P0=SEG[min%10]&(0x7F|flash);P2=0xFB;break;  //0111 1111
			case 3:P0=SEG[min/10];P2=0xF7;break;
			case 4:P0=SEG[hour%10]&(0x7F|flash);P2=0xEF;break;
			case 5:P0=SEG[hour/10];P2=0xDF;break;
		}
	}
	if(MODE==4)
	{
		switch(i)
		{
			case 0: if(dingshiflag==0) P0=SEG[10];
				      else P0=SEG[11]; P2=0xFE;break;
			case 1:P0=0xFF;P2=0xFD;break;         //0000 0000
			case 2:P0=SEG[min_t%10]&(0x7F|flash);P2=0xFB;break;  //0111 1111
			case 3:P0=SEG[min_t/10];P2=0xF7;break;
			case 4:P0=SEG[hour_t%10]|flash;P2=0xEF;break;
			case 5:P0=SEG[hour_t/10]|flash;P2=0xDF;break;
		}
	}
	if(MODE==5)
	{
		switch(i)
		{
			case 0: if(dingshiflag==0) P0=SEG[10];
				      else P0=SEG[11]; P2=0xFE;break;
			case 1:P0=0xFF;P2=0xFD;break;         //0000 0000
			case 2:P0=SEG[min_t%10]|flash;P2=0xFB;break;  //0111 1111
			case 3:P0=SEG[min_t/10]|flash;P2=0xF7;break;
			case 4:P0=SEG[hour_t%10]&(0x7F|flash);P2=0xEF;break;
			case 5:P0=SEG[hour_t/10];P2=0xDF;break;
		}
	}
	if(MODE==6)
	{
		switch(i)
		{
			case 0: if(dingshiflag==0) P0=SEG[10]|flash;
				      else P0=SEG[11]|flash; P2=0xFE;break;
			case 1:P0=0xFF;P2=0xFD;break;         //0000 0000
			case 2:P0=SEG[min_t%10];P2=0xFB;break;  //0111 1111
			case 3:P0=SEG[min_t/10];P2=0xF7;break;
			case 4:P0=SEG[hour_t%10]&(0x7F|flash);P2=0xEF;break;
			case 5:P0=SEG[hour_t/10];P2=0xDF;break;
		}
	}
	i++;
	if(i>=6) i=0;
}

void key(void)
{
	if(key1==0)  //MODE
	{
		delay(300); // 延迟为了消抖
		{
			if(key1==0)
			{
				key1flag=1; // 消抖
			}
		}
	}
	
	if((key1==1)&&(key1flag==1)) // 消完抖之后要进行的行为
	{
		key1flag=0;
		MODE++;
		if(MODE>=7) MODE=0;
	}
	
	if(key2==0)  // ++
	{
		delay(300);
		{
			if(key2==0)
			{
				key2flag=1;
			}
		}
	}
	
	if((key2==1)&&(key2flag==1))
	{
		key2flag=0;
		if(MODE==1)
		{
			hour++;
			if(hour>=24) hour=0;
		}
		if(MODE==2)
		{
			min++;
			if(min>=60) min=0;
		}
		if(MODE==3)
		{
			sec++;
			if(sec>=60) sec=0;
		}
		if(MODE==4)
		{
			hour_t++;
			if(hour_t>=24) hour_t=0;
		}
		if(MODE==5)
		{
			min_t++;
			if(min_t>=60) min_t=0;
		}
		if(MODE==6)
		{
			dingshiflag=!dingshiflag;
		}
	}
	
	if(key3==0)  // --
	{
		delay(300);
		{
			if(key3==0)
			{
				key3flag=1;
			}
		}
	}
	if((key3==1)&&(key3flag==1))
	{
		key3flag=0;
		if(MODE==1)
		{
			hour--;
			if(hour<0) hour=23;
		}
		if(MODE==2)
		{
			min--;
			if(min<0) min=59;
		}
		if(MODE==3)
		{
			sec--;
			if(sec<0) sec=59;
		}
		if(MODE==4)
		{
			hour_t--;
			if(hour_t<0) hour_t=23;
		}
		if(MODE==5)
		{
			min_t--;
			if(min_t<0) min_t=59;
		}
		if(MODE==2)
		{
			dingshiflag=!dingshiflag;
		}
	}
	if(key4==0)
	{
		delay(300);
		{
			if(key4==0)
			{
				key4flag=1;
			}
		}
	}
	if((key4==1)&&(key4flag==1))
	{
		key4flag=0;
		dingshiflag=!dingshiflag;
	}
}

void main(void)
{
	EA=1;   // 打开中断总开关
	ET0=1;  // 设置中断允许寄存器IE中ET0的位,开启中断小开关
	TMOD=0X01; // 设置计时器模式控制寄存器,Time0工作在定时方式1
	TH0=(65536-5000)/256;
	TL0=(65536-5000)%256;
	TR0=1;  // 开始计数
	SW=0;
	while(1)
	{
		key();
		if((hour==hour_t)&&(min==min_t)&(dingshiflag==1)) SW=1;
		else SW=0;
	}
}

void T0_ISP(void) interrupt 1 // 中断100次,为0.5秒
{
	TH0=(65536-5000)/256; // 重装初值
	TL0=(65536-5000)%256; // 重装初值
	display();
	cp++;
	if(cp>=100)
	{
		cp=0;
		flash=~flash;
		cp1++;
		if(cp1>=2)
		{
			cp1=0;
			if(MODE==0) sec++;// 就是在不按模式的情况下,时间表才走
			if(sec>=60)
			{
				sec=0;
				min++;
				if(min>=60)
				{
					min=0;
					hour++;
					if(hour>=24) hour=0;
				}
			}
		}
	}
}

二、仿真 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/690341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python小白必看

Python学习计划&#xff1a; 1.先学习Python基础知识&#xff0c;包括&#xff1a; 变量、数据类型、运算符条件语句、循环语句函数、模块、包 2.掌握Python的常用库和框架&#xff0c;例如&#xff1a; NumPy&#xff1a;用于科学计算、数据分析等Pandas&#xff1a;用于数…

Vue表单验证,表单填写完成无法通过rules验证问题

表单校验使用的是ElementUI官网的表单校验规则&#xff0c;但是表单在填写完成后还是通不过校验&#xff0c;这就需要进行相应的检查 1.检查rules与ref&#xff0c;rules与ref的名字可以随便定义&#xff0c;但是要确保在这块写的与在data中定义的一致 2.检查<el-form-ite…

Pandas 解决保存H5文件发生异常问题

代码&#xff1a; #保存h5文件 #指定文件路径和读写模式 hdpd.HDFStore(mystock.h5,w) #将my的数据存入到hd中 hd[data]my #关闭文件 hd.close() 发生异常&#xff1a; 原因&#xff1a;缺少pytables 解决&#xff1a; 执行命令 pip install tables 安装好之后重启jupyter内核…

2023年1月至4月天猫平台美妆品类销售数据分析

如今&#xff0c;随着人们消费观念的突破&#xff0c;越来越多的人用美妆来诠释个性表达&#xff0c;美丽经济获得更多关注&#xff0c;化妆品消费理念逐渐增强&#xff0c;因此&#xff0c;美妆市场也形成了较大的规模。 根据鲸参谋电商数据显示&#xff0c;2023年1月至4月&am…

争取一文说透NuGet

一、NuGet是什么? NuGet是一个为大家所熟知的Visual Studio扩展&#xff0c;通过这个扩展&#xff0c;开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件&#xff0c;同时也可以通过NuGet来安装一些Visual Studio的插件等。 二、官网&#xff1a;…

驱动开发:内核读写内存多级偏移

让我们继续在《内核读写内存浮点数》的基础之上做一个简单的延申&#xff0c;如何实现多级偏移读写&#xff0c;其实很简单&#xff0c;读写函数无需改变&#xff0c;只是在读写之前提前做好计算工作&#xff0c;以此来得到一个内存偏移值&#xff0c;并通过调用内存写入原函数…

Qt绘图高级编程-绘制文本

注意&#xff1a;以下代码是在paintEvent函数中使用的&#xff0c;坐标是在文本的左下角。 1、设置字体样式 /*-----------1、设置字体样式-----------*///设置画家写字的字体//字体名&#xff0c; 字体大小&#xff0c;粗体&#xff0c;是否斜体QFont font( "楷体"…

芝奇幻锋戟Z5 RGB DDR5-7200 24GB内存评测:稳上7800MHz、温度只有56度

一、前言&#xff1a;7200MHz CL36高频内存仅需1.35V电压 在DDR4年代&#xff0c;三星B-Die是当之无愧的超频王者&#xff0c;而今DDR5已然成为主流&#xff0c;大家公认的最好超频的颗粒是SK海力士A-Die。 但并不是每一款采用了海力士A-Die颗粒的内存条都会有强悍的超频能力&a…

B+数的设计步骤

1.节点的结构&#xff08;如下图&#xff09; &#xff08;1&#xff09;键值对--key是标识&#xff1b;value是存储的具体数据 &#xff08;2&#xff09;节点的子节点--存储的是具体的子节点 &#xff08;3&#xff09;节点的后节点--标记后一个节点 &#xff08;4&#xff0…

9 MFC CFileDialog

// SystemWndDlg.cpp: 实现文件 //#include "pch.h" #include "framework.h" #include "SystemWnd.h" #include "SystemWndDlg.h" #include "afxdialogex.h"#ifdef _DEBUG #define new DEBUG_NEW #endif// CSystemWndDlg 对…

git提交忽略target文件

背景 项目如果没有设置.ignore文件&#xff0c;则我们的idea待提交区域有好多红色的新增的target文件、.iml文件等。 解决 本来未忽略前如下&#xff1a; 在.ignore文件中新增如下命令 #忽略所有.svn目录 .svn/ #忽略所有target目录 target/ #忽略所有.idea目录 .idea/ #…

C#,保持亮度的动态直方图均衡化(Brightness Preserving Dynamic Histogram Equalization:BPDHE)源代码

图像增强的主要目的是显示隐藏的图像细节&#xff0c;或者用新的动态范围增加图像对比度。直方图均衡&#xff08;HE&#xff09;是用于图像对比度增强的最流行的技术之一&#xff0c;因为HE在计算上快速且易于实现。HE通过基于输入灰度级的概率分布重新映射图像的灰度级来执行…

学生使用的台灯该怎么选择?学生台灯应该这样选

随着时代快速发展&#xff0c;目前我国近视人数达到了7亿&#xff0c;呈现低龄化趋势&#xff0c;儿童及青少年人数占了53.8%。而且现在的学生学业负担都很重&#xff0c;每个家长都不希望自己的孩子近视或加深近视了&#xff0c;都会想尽一切办法保护视力。而护眼台灯就成了家…

光伏储能电能管理系统解决方案蓄电池管理

概述 在我国新型电力系统中&#xff0c;新能源装机容量逐年提高&#xff0c;但是新能源比如光伏发电、风力发电是不稳定的能源&#xff0c;所以要维持电网稳定&#xff0c;促进新能源发电的消纳&#xff0c;储能将成为至关重要的一环&#xff0c;是分布式光伏、风电等新能源消…

怎么用ai作图?简单几步教会你ai绘画

当我和我的朋友们闲聊的时候&#xff0c;一个话题引起了我们的兴趣——更新社交媒体头像。其中有一个朋友提出&#xff0c;想要制作一个与真人无异、美观大方的头像&#xff0c;但是却不知道该如何下手。于是乎&#xff0c;我们开始讨论ai绘画头像软件。大家都纷纷表示听说过&a…

基于Java+SpringBoot+vue的实验室管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

cubemx hal stm32 atgm336h GPS 北斗 定位 模块 驱动代码

代码部分 atgm336h.c #include "atgm336h.h" #include "stdio.h" #include "string.h"char rxdatabufer; u16 point1 0;_SaveData Save_Data; LatitudeAndLongitude_s g_LatAndLongData {.E_W 0,.N_S 0,.latitude 0.0,.longitude 0.0 };…

Docker网络架构三剑客CNM,Libnetwork和Driver

Docker网络架构主要由三部分组成&#xff1a;CNM&#xff0c;Libnetwork和Driver。 1.CNM CNM&#xff08;Container Network Model&#xff09;是一种网络模型&#xff0c;用于定义容器的网络架构和实现容器之间的通信。 这其中也有三要素&#xff1a; 沙盒&#xff1a;Sand…

基于matlab使用无限阵列分析对大型阵列中的互耦进行建模(附源码)

一、前言 此示例使用无限数组分析对大型有限数组进行建模。晶胞上的无限阵列分析揭示了特定频率下的扫描阻抗行为。此信息与隔离元件图案和阻抗的知识一起使用&#xff0c;以计算扫描元件图案。然后&#xff0c;使用数组中的每个元素都具有相同扫描元素模式的假设对大型有限数组…

造纸工厂配电室环境监控系统的应用案例与硬件选型

摘要&#xff1a;智能配电室环境监控系统可实现自动巡检、自动预警等功能&#xff0c;减少人员到现场巡视次数&#xff0c;能及早发现设备的潜在风险&#xff0c;迅速检测故障&#xff0c;节约维护保养时长&#xff0c;为配电生产检修、运行、各业务的标准化、规范化管理提供有…