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

news/2024/9/24 21:26:20/

往期回顾

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

文章目录

  • 往期回顾
  • 一、前期准备
  • 二、代码详情
    • 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.ppmy.cn/news/1449033.html

相关文章

Android --- SQlite数据存储

使用 SQLite 保存数据 | Android Developers (google.cn) SQLiteOpenHelper 类包含一组用于管理数据库的实用 API。当您使用此类获取对数据库的引用时&#xff0c;系统仅在需要时才执行可能需要长时间运行的数据库创建和更新操作&#xff0c;而不是在应用启动期间执行。您仅需…

Postman 汉化安装及使用指南:快速上手 Postman 中文版

Postman 是一款常用的 API 测试工具&#xff0c;可以方便地进行接口测试、调试和文档编写。本文将详细介绍如何下载安装 Postman 并汉化&#xff0c;包括每个步骤的详细说明。 下载安装 Postman 1、打开浏览器&#xff0c;访问 Postman 官网&#xff0c;下载适用于自己系统的…

Grafana – unable to login “User already exists”

The Issue When trying to log into Grafana Web UI using an OIDC provider, in my case, Dex. The login would fail due to the error “User already exists”, after some time. This happened for any users given access via the OIDC. The Cause This looks to happ…

prime1--vulnhub靶场通关教程

一. 信息收集 1. 探测目标主机IP地址 arp-scan -l //查看网段 vm 编辑--查看虚拟网络编辑器&#xff0c;看到靶机的网段 网段是&#xff1a; 192.168.83.0 是c段网络 2. 全面检测目标IP nmap -sP 192.168.83.1/24 靶机ip是&#xff1a; 192.168.83.145 攻击机的ip是&…

python-基础(7)-判断结构

python专栏地址 上一篇: python-基础(6)-集合 本节主要介绍python的判断结构。 判断结构是编程的重点&#xff0c;程序之所以能做一些事&#xff0c;就是因为我们人为设定了一系列规则&#xff0c;当数据通过这些规则时&#xff0c;就通过判断进入符合的规则进行处理&#xff0…

Kubelet containerd 管理命令 ctr常用操作

镜像常用操作 1. 拉取镜像 ctr images pull docker.io/library/nginx:alpine 指定平台 --all-platforms&#xff1a;所有平台&#xff08;amd64 、arm、386 、ppc64le 等&#xff09;&#xff0c;不加的话下载当前平台架构 --platform&#xff1a;指定linux/amd64平台 ctr …

pycharm配置wsl开发环境(conda)

背景 在研究qanything项目的过程中&#xff0c;为了进行二次开发&#xff0c;需要在本地搭建开发环境。然后根据文档说明发现该项目并不能直接运行在windows开发环境&#xff0c;但可以运行在wsl环境中。于是我需要先创建wsl环境并配置pycharm。 wsl环境创建 WSL是“Windows Su…

Spring Boot项目中集成Logback作为日志框架-笔记

在Spring Boot项目中集成Logback作为日志框架是一个标准做法&#xff0c;因为Spring Boot默认就使用Logback作为日志系统。以下是集成Logback的步骤&#xff1a; 1. 默认集成 Spring Boot会自动配置Logback&#xff0c;所以通常情况下&#xff0c;你不需要添加任何额外的依赖或…