蓝桥杯单片机省赛——第八届“基于单片机的电子钟程序设计与调试”程序部分

往期回顾

第三届蓝桥杯单片机省赛
第四届蓝桥杯单片机省赛
第五届蓝桥杯单片机省赛
第六届蓝桥杯单片机省赛
第七届蓝桥杯单片机省赛

文章目录

  • 往期回顾
  • 一、前期准备
  • 二、代码详情
    • 1.基础代码
      • 蜂鸣器/继电器/led/定时器之类的代码
    • 2.按键详解
      • 按键写法讲解
    • 3.驱动的处理
      • 驱动写法讲解
    • 4.温度/数码管部分处理
    • 5.DS1302部分处理
    • 6.总代码



在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

一、前期准备

1:本文使用的头文件是由stc生成
在这里插入图片描述
点击保存文件之后,保存至自己文件目录下方即可
在这里插入图片描述
2:本文使用的都是官方提供的底层驱动代码
在这里插入图片描述

二、代码详情

1.基础代码

蜂鸣器/继电器/led/定时器之类的代码

参考之前写的文章
第四届蓝桥杯代码讲解

2.按键详解

按键写法讲解

直接跳转以前的文章即可
多种蓝桥杯/51按键写法详解

3.驱动的处理

驱动写法讲解

直接跳转以前的文章即可
蓝桥杯驱动处理

4.温度/数码管部分处理

直接跳转以前的文章即可
蓝桥杯温度部分处理

5.DS1302部分处理

DS1302部分详解

6.总代码

#include<stc15f2k.h>
#include<ds1302.h>
#include<onewire.h>
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
char ds1302_write[]={0x80,0x82,0x84};
char ds1302_read[]={0x81,0x83,0x85};
char time[]={50,59,23};
char time_1[]={0,0,0};
char clock[]={0,0,0};
char dula[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6};
char disdula[]={0,0,0,0,0,0,0,0};int diswela,key,ms,wei=9,sign,con;
int temp;
bit flag,light,light_1;
void renwu_2();
void buzz(bit on)
{P2=((P2&0X1F)|0XA0);if(on)P0=0X40;elseP0=0X00;P2&=0X1F;
}void led(int i)
{P2=((P2&0X1F)|0X80);P0=i;P2&=0X1F;
}void delay(int x)
{int i;while(x--)for(i=0;i<5*123;i++);
}void din()
{TMOD=0X10;TH1=(65536-11059/12)/256;TL1=(65536-11059/12)%256;EA=1;TR1=1;ET1=1;
}void display()
{if(diswela==wei&&ms>=1000)diswela=diswela+2;P2=((P2&0X1F)|0XE0);P0=0xff;P2&=0X1F;P2=((P2&0X1F)|0Xc0);P0=1<<diswela;P2&=0X1F;P2=((P2&0X1F)|0Xe0);P0=dula[disdula[diswela]];P2&=0X1F;if(++diswela>=8)diswela=0;
}void display_ds1302()
{disdula[0]=time[2]/16;disdula[1]=time[2]%16;disdula[2]=10;disdula[3]=time[1]/16;disdula[4]=time[1]%16;disdula[5]=10;disdula[6]=time[0]/16;disdula[7]=time[0]%16;
}void bcddce(bit on)
{int i;for(i=0;i<3;i++){if(on)time_1[i]=((time[i]/10)<<4)|(time[i]%10);elsetime[i]=((time_1[i]/16)*10)+time_1[i]%16;}
}void ds_write()
{int i;bcddce(1);Write_Ds1302_Byte(0x8e,0x00);for(i=0;i<3;i++){Write_Ds1302_Byte(ds1302_write[i],time_1[i]);}Write_Ds1302_Byte(0x8e,0x80);
}void ds_read()
{int i;for(i=0;i<3;i++){time[i]=Read_Ds1302_Byte(ds1302_read[i]);}
}char anjian()
{int keyscan=0;if(s4==0||s5==0||s6==0||s7==0){delay(10);if(s4==0)keyscan=4;else if(s5==0)keyscan=5;else if(s6==0)keyscan=6;else if(s7==0)keyscan=7;}while(s5==0||s6==0||s7==0);return keyscan;
}void wendu()
{int LSB,MSB;Init_DS18B20();Write_DS18B20(0xcc);Write_DS18B20(0x44);delay(100);Init_DS18B20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);LSB=Read_DS18B20();MSB=Read_DS18B20();Init_DS18B20();temp=MSB;temp=(temp<<8)|LSB;if((temp&0xf800)==0x0000){temp>>=4;temp=temp*100;temp=temp+(LSB&0x0f)*6.25;}
}void display_18b20()
{disdula[0]=11;disdula[1]=11;disdula[2]=11;disdula[3]=11;disdula[4]=11;disdula[5]=temp/1000%10;disdula[6]=temp/100%10;disdula[7]=12;
}void display_clock()
{disdula[0]=clock[2]/10;disdula[1]=clock[2]%10;disdula[2]=10;disdula[3]=clock[1]/10;disdula[4]=clock[1]%10;disdula[5]=10;disdula[6]=clock[0]/10;disdula[7]=clock[0]%10;
}void jia()
{if(wei==0){clock[2]++;if(clock[2]>=24)clock[2]=0;}if(wei==3){clock[1]++;if(clock[1]>=60)clock[1]=0;}if(wei==6){clock[0]++;if(clock[0]>=60)clock[0]=0;}
}void jian()
{if(wei==0){clock[2]--;if(clock[2]<=-1)clock[2]=23;}if(wei==3){clock[1]--;if(clock[1]<=-1)clock[1]=59;}if(wei==6){clock[0]--;if(clock[0]<=-1)clock[0]=59;}while(!s4);
}void renwu_6()
{char n=0;while(1){display_clock();if(flag==1){flag=0;key=anjian();switch(key){case 4:jia();break;case 5:jian();break;case 6:renwu_2();n++;break;}}if(n>=4)break;}
}char bcdtodce(char on)
{on=((on/16)*10)+on%16;return on;
}void ledrun()
{if(light_1==1)led(0xfe);if(light_1==0)led(0xff);if(light==0)led(0xff);
}void renwu_1()
{while(1){wendu();display_18b20();if(s4==1)break;}
}void renwu_2()
{++sign;if(sign<=1)wei=0;if(sign==2)wei=3;if(sign==3)wei=6;if(sign==4){wei=9;sign=0;}
}void renwu_3()
{bcddce(0);if(wei==0){time[2]++;if(time[2]>=24)time[2]=0;}if(wei==3){time[1]++;if(time[1]>=60)time[1]=0;}if(wei==6){time[0]++;if(time[0]>=60)time[0]=0;}ds_write();
}void renwu_4()
{bcddce(0);if(wei==0){time[2]--;if(time[2]<=-1)time[2]=23;}if(wei==3){time[1]--;if(time[1]<=-1)time[1]=59;}if(wei==6){time[0]--;if(time[0]<=-1)time[0]=59;}ds_write();while(!s4);
}void main()
{int i;din();buzz(0);led(0xff);ds_write();while(1){for(i=0;i<3;i++){time_1[i]=time[i];}		if(light==1)ledrun();		display_ds1302();ds_read();		if(flag==1){flag=0;key=anjian();switch(key){case 4:if(wei==9)	renwu_1();elserenwu_4();break;case 7:renwu_2();break;case 5:renwu_3();break;	case 6:renwu_6();break;					}}		}
}void qa() interrupt 3
{TH1=(65536-11059/12)/256;TL1=(65536-11059/12)%256;ms++;if(!(ms%100))flag=1;if(ms==1500)ms=0;display();if(bcdtodce(time[2])==clock[2]&&bcdtodce(time[1])==clock[1]&&bcdtodce(time[0])==clock[0])light=1;	if(light==1)con++;if(con>=5000){con=0;light=0;led(0xff);
}if(!(con%200)){if(light_1==0)light_1=1;else light_1=0;}
}

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

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

相关文章

程序员缓解工作压力——方法分享

前言 作为一名初级程序员&#xff0c;我承认自己在应对工作压力方面还有待提高。在日常工作中&#xff0c;我时常感到压力山大&#xff0c;尤其是在面对复杂问题或紧迫的项目期限时。然而&#xff0c;为了保持高效和持久的工作热情&#xff0c;我还是积极寻求并使用了一…

Scala应用 —— JDBC的创建

文章目录 Scala应用 —— JDBC的创建前言一、JDBC的创建过程1.初始化连接1.1 配置驱动1.2 创建连接对象 2. 初始化执行器2.1 创建执行器对象2.2 初始化执行器参数 3. 执行操作并返回结果 二、Scala JDBC的基本设计思路1. 操作步骤设计2. 解决结果差异化3.实现jdbc方法并输出结果…

WPF之创建无外观控件

1&#xff0c;定义无外观控件。 定义默认样式&#xff0c;在其静态构造函数中调用DefaultStyleKeyProperty.OverrideMetadata()。 //设置默认样式DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorPicker), new FrameworkPropertyMetadata(typeof(ColorPicker))); 在项目…

UE4_Niagara_两个模型之间的粒子幻化

学习笔记&#xff0c;仅供参考&#xff01; 操作步骤&#xff1a; 1、新建niagara system&#xff0c;添加空的发射器&#xff0c;渲染改为网格体渲染器&#xff0c;网格体为1M_Cube. 2、创建粒子材质重载。 3、渲染网格体的材质设置&#xff1a; 4、在发射器属性面板&#x…

基于MSOGI的交叉对消谐波信号提取网络MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 此模型利用二阶广义积分器&#xff08;SOGI&#xff09;对基波电流和相应次的谐波电流进行取 &#xff0c;具体是通过多个基于二阶广义积分器的正交信号发生器 &#xff08; S&#xf…

docker挂载数据卷-以nginx为例

目录 一、什么是数据卷 二、数据卷的作用 三、如何挂载数据卷 1、创建nginx容器挂载数据卷 2、查看数据卷 3、查看数据卷详情 4、尝试在宿主机修改数据卷 5、查看容器内对应的数据卷目录 6、 访问nginx查看效果 ​​​​​​​一、什么是数据卷 挂载数据卷本质上就是实…

【跟马少平老师学AI】-【神经网络是怎么实现的】(八)循环神经网络

一句话归纳&#xff1a; 1&#xff09;词向量与句子向量的循环神经网络&#xff1a; x(i)为词向量。h(i)为含前i个词信息的向量。h(t)为句向量。 2&#xff09;循环神经网络的局部。 每个子网络都是标准的全连接神经网络。 3&#xff09;对句向量增加全连接层和激活函数。 每个…

嵌入式开发三:STM32初体验

本节主要向大家介绍如何开发过程中的基本操作&#xff0c;如编译、串口下载、仿真器下载、仿真调试程序&#xff0c;体验一下 STM32 的开发流程&#xff0c;并介绍 MDK5 的一些使用技巧&#xff0c;通过本节的学习&#xff0c;将对 STM32 的开发流程和 MDK5 使用有个大概了解&a…

安装部署大语言模型 | 通义千问

下载安装 进入ollama的仓库下载 「 qwen 7b 」 libraryGet up and running with large language models.https://ollama.com/library查找阿里的 「 qwen 」 根据自己的电脑配置情况&#xff0c;选择合适的模型 总体来说&#xff0c;模型是越大&#xff0c;效果越好&#xff0c…

019、Python+fastapi,第一个Python项目走向第19步:windows 11 下的pycharm远程连接ubuntu 24.04 服务器

一、说明 欲善其事,必先利其器&#xff0c;先把环境整好&#xff0c;我开发的环境是ubuntu是没有gui的服务器版本&#xff0c;所以必须远程搞才行&#xff0c;今天就是安装一下&#xff0c;链接连接&#xff0c;网上有很多文章&#xff0c;能成功&#xff0c;不过我也弄了一个…

SQL——高级教程【菜鸟教程】

SQL连接 左连接&#xff1a;SQL LEFT JOIN 关键字 左表相当于主表&#xff0c;不管与右表匹不匹配都会显示所有数据 右表就只会显示和左表匹配的内容。 //例显示&#xff1a;左表的name&#xff0c;有表的总数&#xff0c;时间 SELECT Websites.name, access_log.count, acc…

GitHub Copilot Workspace:欢迎进入原生Copilot开发环境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Vue 组件的三大组成部分

Vue 组件通常由三大组成部分构成&#xff1a;模板&#xff08;Template&#xff09;、脚本&#xff08;Script&#xff09;、样式&#xff08;Style&#xff09; 模板部分是组件的 HTML 结构&#xff0c;它定义了组件的外观和布局。Vue 使用基于 HTML 的模板语法来声明组件的模…

【Vulhub靶场】Nginx 漏洞复现

Nginx 漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09;1、影响版本2、漏洞原理3、漏洞复现 二、Nginx 解析漏洞1、版本信息&#xff1a;2、漏洞详情3、漏洞复现 一、Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 1、影响版本 Nginx …

网际协议IP

一、概念导入 网际协议IP是TCP/IP体系中最重要的协议之一。与IP协议配套使用的还有三个协议&#xff1a; 地址解析协议ARP网际控制报文协议ICMP网际组管理协议IGMP 二、虚拟互联网络 &#xff08;1&#xff09;定义 现实世界中&#xff0c;不同网络的主机进行通信&#xf…

Centos7.9系统MySQL5.7.32升级为5.7.44(生成环境操作)

1.背景 由于客户进行等保漏扫和渗透&#xff0c;生成环境mysql数据库被扫描出了 高危漏洞。 如图&#xff1a;部分漏洞 查看漏洞详细信息&#xff0c;建议升级到指定版本解决&#xff1a; 说明&#xff1a; 本文仅适合使用当前数据库为 RPM 安装方式 2.升级前准备 查看环…

nginx的前世今生(三)

高手对决&#xff1a;武林盟主之路 1.不败之地&#xff0c;高可用江湖 技术角度讲&#xff0c;高可用&#xff08;High Availability, HA&#xff09;是指系统或服务能够在预定的时间内&#xff0c;以极高的概率持续提供服务的能力。具体来说&#xff0c;这通常涉及到系统的架…

32.Docker认识

Docker介绍 Docker是一个快速交付应用&#xff0c;运行应用的技术。 1.可以将程序、依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统。 2.运行时利用沙箱机制行程隔离容器&#xff0c;各个应用互不干扰。 3.启动、移除都可以通过一行命令完成&am…

I2C接口18路LED呼吸灯驱动IS31FL3218互相替代SN3218替换HTR3218

I2C接口18路LED呼吸灯控制电路IC 该型号IC为QFN24接口&#xff0c;属于小众产品&#xff0c;IS31FL3218、SN3218、HTR3218S管脚兼容&#xff0c;需要注意的是HTR3218管脚与其他型号不兼容。 I2C接口可实现多个LED灯的呼吸灯控制&#xff0c;可实现单色控制18个LED灯&#xff0…

Kubernetes - Dashboard 配置用户名密码方式登录

Kubernetes - Dashboard 配置用户名密码方式登录 前言&#xff1a; 为了 K8s 集群安全&#xff0c;默认情况下 Dashboard 以 Token的形式登录的&#xff0c;那如果我们想以用户名/密码的方式登录该怎么操作呢&#xff1f;其实只需要我们创建用户并进行 ClusterRoleBinding绑定即…