蓝桥杯单片机第十一届国赛

有问题欢迎指出,共同学习交流

#include <STC15F2K60S2.H>
#include "ds1302.h"
#include "iic.h"
#include "onewire.h"
#include "intrins.h"
#define TSMG 500
void SelectHC573(unsigned char channel,unsigned char dat);
void DisplaySMG_Info();
void read_myadc();
sbit h3 = P3^2;
sbit h4 = P3^3;
sbit s1 = P4^4;
sbit s2 = P4^2;
code unsigned char Seg_Table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
code unsigned char Seg_Dot[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
code unsigned char read_addre[7] = {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
code unsigned char write_addre[7] = {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char mytimer[7] = {0x50,0x59,0x16,0x06,0x05,0x01,0x24};
unsigned char t_h = 0;
unsigned char t_m = 0;
unsigned char t_s = 0;
unsigned int adc_smg = 0;
float temp_value = 0;
unsigned int temp_smg = 0;
unsigned char UI = 0;//0-数据界面 1-参数界面
unsigned char UI_data = 0;//0-时间 1-温度 2-亮暗状态
unsigned char UI_param = 0;//0-时间参数 1-温度参数 2-指示灯参数
unsigned char flag_light = 0;//灯亮暗标志
unsigned char h_param = 17;//小时参数
unsigned char temp_param = 25;//温度参数
unsigned char light_param = 4;//指示灯参数
unsigned char set_h = 0;//显示参数设置
unsigned char set_temp = 0;//温度参数设置
unsigned char set_light = 0;//指示灯参数设置
unsigned char stat_led = 0xff;
unsigned int count_3s = 0;
unsigned int count1_3s = 0;
unsigned char value_led;//临时状态0x01
unsigned char count_200ms = 0;
unsigned char hour = 0;//十进制小时
void Init_timer0()//10ms
{
	AUXR &= 0x7F;
	TMOD &= 0xf0;
	TMOD |= 0x01;
	TL0 = 0xf0;
	TH0 = 0xd8;
	TR0 = 1;
	ET0 = 1;
	EA = 1;
}
void sevice_timer0() interrupt 1
{
	TL0 = 0xf0;
	TH0 = 0xd8;
	DisplaySMG_Info();
	count_200ms++;
	if(flag_light == 1)
	{
		count_3s = 0;
		count1_3s++;
		if(count1_3s == 300)
		{
			count1_3s = 0;
			stat_led &= 0xfb;
			SelectHC573(4,stat_led);
		}
	}
	else if(flag_light == 0)
	{
		count1_3s = 0;
		count_3s++;
		if(count_3s == 300)
		{
			count_3s = 0;
			stat_led |= 0x04;
			SelectHC573(4,stat_led);
		}
		
	}
	if(count_200ms == 20)
	{
		count_200ms = 0;
		read_myadc();
	}
}
void Delay20ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 1;
	j = 234;
	k = 113;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void Init_mytemp()
{
	unsigned char LSB,MSB;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	do{
		init_ds18b20();
		Write_DS18B20(0xcc);
		Write_DS18B20(0xbe);
		LSB = Read_DS18B20();
		MSB = Read_DS18B20();
		MSB = (MSB << 4) | (LSB >> 4);
	}while(MSB == 85);
}
void read_mytemp()
{
	unsigned char LSB,MSB;
	unsigned int temp;
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0x44);
	
	init_ds18b20();
	Write_DS18B20(0xcc);
	Write_DS18B20(0xbe);
	LSB = Read_DS18B20();
	MSB = Read_DS18B20();
	temp = MSB << 8;
	temp = temp | LSB;
	if((temp & 0xf800) == 0x0000)
	{
		temp_value = temp * 0.0625;
		temp_smg = temp_value * 10;
	}
}
void read_myadc()
{
	unsigned char adc_value = 0;
	float adc_volt = 0;
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	I2CSendByte(0x01);
	I2CWaitAck();
	I2CStop();
	
	I2CStart();
	I2CSendByte(0x91);
	I2CWaitAck();
	adc_value = I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	adc_volt = adc_value * (5.0 / 255);
	adc_smg = adc_volt * 100;
	if(adc_volt < 1.0)
	{
		flag_light = 1;
	}
	else
	{
		flag_light = 0;
	}
}
void Init_mytimer()
{
	unsigned char i;
	Write_Ds1302_Byte(0x8e,0x00);
	for(i = 0;i < 7;i++)
	{
		Write_Ds1302_Byte(write_addre[i],mytimer[i]);
	}
	Write_Ds1302_Byte(0x8e,0x80);
}
void read_mytimer()
{
	t_h = Read_Ds1302_Byte(0x85);
	t_m = Read_Ds1302_Byte(0x83);
	t_s = Read_Ds1302_Byte(0x81);
}
void SelectHC573(unsigned char channel,unsigned char dat)
{
	P2 = (P2 & 0x1f) | 0x00;
	P0 = dat;
	switch(channel)
	{
		case 4:			
			P2 = (P2 & 0x1f) | 0x80;
		break;
		case 5:			
			P2 = (P2 & 0x1f) | 0xa0;
		break;
		case 6:			
			P2 = (P2 & 0x1f) | 0xc0;
		break;
		case 7:			
			P2 = (P2 & 0x1f) | 0xe0;
		break;
		case 0:			
			P2 = (P2 & 0x1f) | 0x00;
		break;
	}		
		P2 = (P2 & 0x1f) | 0x00;
}
void DelaySMG(unsigned int t)
{
	while(t--);
}
void DisplaySMG_Bit(unsigned char pos,unsigned char value)
{
	SelectHC573(6,0x01 << pos);
	SelectHC573(7,value);
	DelaySMG(TSMG);
	SelectHC573(6,0x01 << pos);
	SelectHC573(7,0xff);
}
void DisplaySMG_All(unsigned char value)
{
	SelectHC573(6,0xff);
	SelectHC573(7,value);
}
void DisplaySMG_Info()
{
	if(UI == 0)
	{
		switch(UI_data)
		{
			case 0:
				DisplaySMG_Bit(0,Seg_Table[t_h >> 4]);
				DisplaySMG_Bit(1,Seg_Table[t_h & 0x0f]);
				DisplaySMG_Bit(2,0xbf);
				DisplaySMG_Bit(3,Seg_Table[t_m >> 4]);
				DisplaySMG_Bit(4,Seg_Table[t_m & 0x0f]);
				DisplaySMG_Bit(5,0xbf);
				DisplaySMG_Bit(6,Seg_Table[(t_s >> 4) & 0x07]);
				DisplaySMG_Bit(7,Seg_Table[t_s & 0x0f]);	
			break;
			case 1:
				DisplaySMG_Bit(0,0xc6);
				DisplaySMG_Bit(5,Seg_Table[temp_smg / 100]);
				DisplaySMG_Bit(6,Seg_Dot[temp_smg / 10 % 10]);
				DisplaySMG_Bit(7,Seg_Table[temp_smg % 10]);
			break;
			case 2:
				DisplaySMG_Bit(0,0x86);
				DisplaySMG_Bit(2,Seg_Dot[adc_smg / 100]);
				DisplaySMG_Bit(3,Seg_Table[adc_smg / 10 % 10]);
				DisplaySMG_Bit(4,Seg_Table[adc_smg % 10]);
				DisplaySMG_Bit(7,Seg_Table[flag_light]);
			break;
		}
	}
	else if(UI == 1)
	{
		switch(UI_param)
		{
			case 0:
				DisplaySMG_Bit(0,0x8c);
				DisplaySMG_Bit(1,Seg_Table[1]);
				DisplaySMG_Bit(6,Seg_Table[set_h / 10]);
				DisplaySMG_Bit(7,Seg_Table[set_h % 10]);
			break;
			case 1:
				DisplaySMG_Bit(0,0x8c);
				DisplaySMG_Bit(1,Seg_Table[2]);
				DisplaySMG_Bit(6,Seg_Table[set_temp / 10]);
				DisplaySMG_Bit(7,Seg_Table[set_temp % 10]);
			break;
			case 2:
				DisplaySMG_Bit(0,0x8c);
				DisplaySMG_Bit(1,Seg_Table[3]);
				DisplaySMG_Bit(7,Seg_Table[set_light % 10]);
			break;
		}
	}
}
void sand_key()
{
	h3 = 0;
	h4 = s1 = s2 = 1;
	if(s1 == 0)//s5
	{
		Delay20ms();
		if(s1 == 0)
		{
			if(UI == 0)
			{
				if(UI_data == 0)
				{
					UI_data = 1;
				}
				else if(UI_data == 1)
				{
					UI_data = 2;
				}
				else
				{
					UI_data = 0;
				}
			}
			else if(UI == 1)
			{
				if(UI_param == 0)
				{
					UI_param = 1;
				}
				else if(UI_param == 1)
				{
					UI_param = 2;
				}
				else
				{
					UI_param = 0;
				}
			}
			while(s1 == 0)
			{
				
			}
		}
	}
	else if(s2 == 0)//s9
	{
		Delay20ms();
		if(s2 == 0)
		{
			if(UI == 1)
			{
				if(UI_param == 0)
				{
					if(set_h == 23)
					{
						set_h = 0;
					}
					else
					{
						set_h += 1;
					}
				}
				else if(UI_param == 1)
				{
					if(set_temp == 99)
					{
						set_temp = 0;
					}
					else
					{
						set_temp += 1;
					}
				}
				else if(UI_param == 2)
				{
					if(set_light == 8)
					{
						set_light = 4;
					}
					else
					{
						set_light += 1;
					}
				}
			}
			while(s2 == 0)
			{
				
			}
		}
	}
	
	h4 = 0;
	h3 = s1 = s2 = 1;
	if(s1 == 0)//s4
	{
		Delay20ms();
		if(s1 == 0)
		{
			if(UI == 0)
			{
				set_h = h_param;
				set_temp = temp_param;
				set_light = light_param;
				UI_param = 0;
				UI = 1;
			}
			else
			{
				h_param = set_h;
				temp_param = set_temp;
				light_param = set_light;
				UI_data = 0;
				UI = 0;
			}
			while(s1 == 0)
			{
				
			}
		}
	}
	else if(s2 == 0)//s8
	{
		Delay20ms();
		if(s2 == 0)
		{
			if(UI == 1)
			{
				if(UI_param == 0)
				{
					if(set_h == 0)
					{
						set_h = 23;
					}
					else
					{
						set_h -= 1;
					}
				}
				else if(UI_param == 1)
				{
					if(set_temp == 0)
					{
						set_temp = 99;
					}
					else
					{
						set_temp -= 1;
					}
				}
				else if(UI_param == 2)
				{
					if(set_light == 4)
					{
						set_light = 8;
					}
					else
					{
						set_light -= 1;
					}
				}
			}
			while(s2 == 0)
			{
				
			}
		}
	}
}
void led_control()
{
	hour = (t_h / 16)*10 + t_h % 16;
	if(h_param < 8)
	{
		if((hour < 8) && (hour > h_param))
		{
			stat_led &= 0xfe;
		}
		else
		{
			stat_led |= 0x01;
		}
	}
	else
	{
		if((hour > 8) && (hour < h_param))
		{
			stat_led |= 0x01;
		}
		else
		{
			stat_led &= 0xfe;
		}
	}
	if(temp_value < (float)temp_param)
	{
		stat_led &= 0xfd;
	}
	else
	{
		stat_led |= 0x02;
	}
	if(flag_light == 1)
	{
		stat_led |= 0xf8;
		value_led = 0x01;
		value_led = value_led << (light_param - 1);
		stat_led = stat_led & (~value_led);
	}
	else
	{
		stat_led |= 0xf8;
	}
	SelectHC573(4,stat_led);
}
void main()
{
	Init_mytimer();
	Init_mytemp();
	Init_timer0();
	DisplaySMG_All(0xff);
	SelectHC573(4,0xff);
	SelectHC573(5,0x00);
	while(1)
	{
		read_mytemp();
		read_mytimer();
		sand_key();
		led_control();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker的commit命令使用制作镜像

docker run -it ubuntu 最基础的ubuntu启动后安装vim 的命令 apt-get update apt-get -y install vim docker commit -m"my_test_ubuntu" -a"za" 80977284a998 atljw/myubuntu:1.0 将本地镜像推送到阿里云 首先登录阿里云服务-控制台 记得一定要设定设…

免费领取!最新2024中国行政区划数据(Shp)!审图号:GS(2024)0650号

最新2024中国行政区划数据&#xff08;Shp&#xff09; 最近&#xff0c;在天地图官网对外公布了带审图号的行政区划矢量&#xff0c;包含省、市、县。官网提供GeoJSON格式下载。 数据介绍 分为省、市、县三级尺度。通过格式转换&#xff0c;形成shape格式的边界线数据和面数…

springboot版本升级,及解决springsecurity漏洞问题

背景&#xff1a; 项目中要解决 Spring Security RegexRequestMatcher 认证绕过漏洞&#xff08;CVE-2022-22978&#xff09; 漏洞问题&#xff0c;并且需要将项目的版本整体升级到boot版本2.1.7&#xff0c;升级改造过程非常的痛苦&#xff0c;一方面对整个框架的代码不是很熟…

关于视频号小店,常见问题解答,开店做店各方面详解

大家好&#xff0c;我是电商笨笨熊 视频号小店作为今年风口&#xff0c;一个新推出的项目&#xff0c;凭借着自身流量加用户群体的优势吸引了不少的电商玩家。 但对于很多玩家来说&#xff0c;视频号小店完全是一个新的项目、新的领域&#xff0c;因此也会存在很多的疑问&…

后缀字串排序

直接sort: #include <iostream> #include <cstring> #include <algorithm> #include <vector>using namespace std;int main() {string str;cin >> str;int len str.size();vector<string> strings;for(int i 0; i < len; i){strin…

云原生专栏丨基于K8s集群网络策略的应用访问控制技术

在当今云计算时代&#xff0c;Kubernetes已经成为容器编排的事实标准&#xff0c;它为容器化应用提供了强大的自动化部署、扩展和管理能力。在Kubernetes集群中&#xff0c;网络策略(Network Policy)作为对Pod间通信进行控制的关键功能&#xff0c;对保障应用安全和隔离性起到了…

[报错解决]SpringBoot子项目打jar包启动报 XXX--1.0-SNAPSHOT.jar中没有主清单属性

目录 报错信息解决原因原因分析解决方案 报错信息 解决 原因 在使用SpringBoot架构搭建父子工程时&#xff0c;使用IDEA可以正常启动&#xff0c;对子项目打成jar包后使用jar方式启动时&#xff0c;会报错xx.jar中没有主清单属性。 原因分析 原因主要是在使用jar方式启动时…

使用nvm切换nodejs版本

查看可以安装的版本&#xff1a; 使用nvm list显示已安装的nodejs版本&#xff1a; 选择一个版本下载&#xff1a; 切换对应的版本&#xff1a;

3D+仿真分析:高效实现海底石油管道系统设计

Bentley AutoPIPE 助力节省寻找更佳管道路线所需的时间和成本 评估管道完整性以提高石油产量 从墨西哥湾浅水区开采石油通常需要铺设新的海底管道&#xff0c;从而在高压和高温条件下高效、安全地输送原油。 Grupo EspecializadoenObras Marinas (GEOMSA) 是墨西哥湾管道—土体…

MaxKB宝塔Docker安装并配置域名访问

准备 Linux系统 bt面板 默认环境LNMP随便装 服务器环境配置最好是4G&#xff0c; 占用硬盘存储大概1G 对于一些海外AI产品的对接需要使用香港或者海外的服务器 安装 在宝塔面板中打开SSH或者你本地使用SSH工具去链接服务器 运行docker命令 前提是放开服务器的8080端口 doc…

顶管机种类多样 国内产量不断增长

顶管机种类多样 国内产量不断增长 顶管机是一种用于非开挖管道铺设的机械设备&#xff0c;能够通过非开挖施工技术降低对地面活动的影响&#xff0c;具有工作效率高、安全性好、受地质条件限制小、环保性强等优点&#xff0c;在隧道修建、城市管网建设、地下管线敷设等场景中发…

html5动漫风二次元网站博客引导页模板

html5动漫风二次元网站博客引导页模板 效果图部分源码领取源码下期更新预报 效果图 部分源码 <!DOCTYPE html> <!--孤独 --> <html xmlns"http://www.w3.org/1999/xhtml" lang"en"><head><meta charset"utf-8" /&g…

v-for中的key是什么作用

在使用v-for进行列表渲染时&#xff0c;我们通常会给元素或者组件绑定一个key属性。 这个key属性有什么作用呢?我们先来看一下官方的解释&#xff1a; key属性主要用在Vue的虚拟DOM算法&#xff0c;在新Inodes对比时辨识VNodes&#xff1b; 如果不使用key&#xff0c;Vue会使用…

快速了解Oracle 数据库 23ai

Oracle Database 23ai 于2024年5月2日正式发布。快速了解可以看官网主页和官方博客。 官网主页 23ai的3个要点&#xff0c;核心都是数据&#xff1a; 数据的人工智能 主要指数据库内置机器学习和AI向量搜索。这实际是Oracle融合数据库策略的延续&#xff0c;避免了复杂的数据…

Python+Selenium 实现自动化测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 安装selenium 打开命令控制符输入&#xff1a;pip install -U …

软件测试必问的33个面试题

1.你为什么选择软件测试行业 因为之前有了解软件测试这个行业&#xff0c;觉得他的发展前景很好。 2.根据你以前的工作经验描述一下软件开发、测试过程&#xff0c;由那些角色负责&#xff0c;你做什么 要有架构师、开发经理、测试经理、程序员、测试员。我在里面主要是负责所…

鸿蒙组件样式复用简介

鸿蒙组件样式复用简介 使用Style进行复用在Component内部复用在Component外部复用使用Extend复用指定类型组件Extend支持参数传递 使用Style进行复用 在页面开发过程中&#xff0c;会遇到多个组件都在使用相同的样式&#xff0c;这时候就要考虑是不是可以将相同的样式的进行复…

【Linux】操作系统

上一篇博客我们从硬件的角度谈了计算机&#xff0c;我们说到了计算机的效率跟操作系统写的好不好有着直接的关系&#xff0c;那么这篇博客我们从软件的角度&#xff0c;就来谈一谈究竟什么是操作系统&#xff0c;为什么要有操作系统&#xff1f; 首先我们来大体的认识一下操作…

微信小程序原生代码实现小鱼早晚安打卡小程序

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 小鱼早晚安打卡小程序&#xff1a;开启健康生活&#xff0c;共享正能量 在这个快节奏的时代&#xff0c;我们常常被各种琐事和压力所困扰&#xff0c;以至于忽略了对健康生活方式的追求。然…

QLora 里的4-bit NormalFloat Quantization中的分位数量化

目录 正态分布的分位数函数详解 1. 正态分布简介 2. 分位数函数定义 3. 正态分布的分位数函数计算 4-bit NormalFloat Quantization 4-bit NormalFloat Quantization详解 1. 4-bit NormalFloat Quantization的定义和应用 2. 4-bit NormalFloat Quantization的工作原理 …
最新文章