在写大模板之前,先讲一个函System_Init(),用于系统初始化关闭所有LED与外设,关闭所有LED就是传入0xff数据打开锁存器,关闭外设就是传入0x00打开锁存器。

    现在所有底层已经提供给大家了,先提供最简单版本的大模板,考前大家一定要把这个代码记熟。书写.h文件后代码可直接运行!

    好了,蓝桥杯更新到这里就告一段落了,接下来是省赛题的代码,不会每一个都讲,只会讲一些可能存在的难点。

1、Key底层

#include <STC15F2K60S2.H>unsigned char Key_Read(void)
{unsigned char Key_Num = 0;   //一定记得赋初始值0//	AUXR &= ~0x10;           //关闭定时器二(有串口时加上)//扫描第一列P44 = 0;P42 = 1;P35 = 1;//P34 = 1;        //有频率采样时必须注释if(P33 == 0) Key_Num = 4;if(P32 == 0) Key_Num = 5;if(P31 == 0) Key_Num = 6;if(P30 == 0) Key_Num = 7;//扫描第二列P44 = 1;P42 = 0;P35 = 1;//P34 = 1;if(P33 == 0) Key_Num = 8;if(P32 == 0) Key_Num = 9;if(P31 == 0) Key_Num = 10;if(P30 == 0) Key_Num = 11;//扫描第三列P44 = 1;P42 = 1;P35 = 0;//P34 = 1;if(P33 == 0) Key_Num = 12;if(P32 == 0) Key_Num = 13;if(P31 == 0) Key_Num = 14;if(P30 == 0) Key_Num = 15;//	P44 = 1;
//	P42 = 1;
//	P35 = 1;
//	P34 = 0;
//	
//	if(P33 == 0) Key_Num = 16;
//	if(P32 == 0) Key_Num = 17;
//	if(P31 == 0) Key_Num = 18;
//	if(P30 == 0) Key_Num = 19;//  AUXR |= 0x10;           //打开定时器二(有串口时加上)P3 = 0xff;return Key_Num;
}

2、Seg底层

#include <STC15F2K60S2.H>idata unsigned char duanselect[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};void Seg_Disp(unsigned char wei,duan,point)
{unsigned char temp;//段选消影P0 = 0xff;temp = P2 & 0x1f;temp = temp | 0xe0;P2 = temp;temp = P2 & 0x1f;P2 = temp;//先位选P0 = 0x01<<wei;temp = P2 & 0x1f;temp = temp | 0xc0;P2 = temp;temp = P2 & 0x1f;P2 = temp;//再段选P0 = duanselect[duan];if(point)  //判断小数点P0 = P0 & 0x7f;temp = P2 & 0x1f;temp = temp | 0xe0;P2 = temp;temp = P2 & 0x1f;P2 = temp;}

3、LED底层

#include <STC15F2K60S2.H>idata unsigned char temp_1 = 0x00;
idata unsigned char temp_old_1 = 0xff;
void LED_Disp(unsigned char *LED_Buf)
{unsigned char temp;temp_1 = 0x00;temp_1 = (LED_Buf[0]<<0) | (LED_Buf[1]<<1) |(LED_Buf[2]<<2) |(LED_Buf[3]<<3) |(LED_Buf[4]<<4) |(LED_Buf[5]<<5) |(LED_Buf[6]<<6) |(LED_Buf[7]<<7);if(temp_1 != temp_old_1){P0 = ~temp_1;    //一定记得取反temp = P2 & 0x1f;temp = temp | 0x80;P2 = temp;temp = P2 & 0x1f;P2 = temp;temp_old_1 = temp_1;}
}

4、.h文件书写格式


/*
#ifndef __LED_H__
#define __LED_H__void LED_Disp(unsigned char *LED_Buf);
#endif
*//*
#ifndef __KEY_H__
#define __KEY_H__unsigned char Key_Read(void);
#endif
*//*
#ifndef __SEG_H__
#define __SEG_H__void Seg_Disp(unsigned char wei,duan,point);
#endif
*/

5、main函数

#include <STC15F2K60S2.H>
#include "Seg.h"
#include "LED.h"
#include "Key.h"idata unsigned char Seg_Slow_Down;  //数码管延时变量
idata unsigned char Key_Slow_Down;  //按键延时变量
idata unsigned char Seg_Buf[8]={10,10,10,10,10,10,10,10};  //数码管显示内容
idata unsigned char Seg_Scan;   //数码管扫描
idata unsigned char LED_Buf[8]={0,0,0,0,0,0,0,0};    //LED亮灭数据
idata unsigned char Key_Val,Key_Down,Key_Up,Key_Old;  //按键参数void System_Init()  //系统初始化
{unsigned char temp;//关闭所有LEDP0 = 0xff;temp = P2 & 0x1f;temp = temp | 0x80;P2 = temp;temp = P2 & 0x1f;P2 = temp;//关闭外设P0 = 0x00;temp = P2 & 0x1f;temp = temp | 0xa0;P2 = temp;temp = P2 & 0x1f;P2 = temp;}//定时器一初始化,自己加上EA = 1;ET1 = 1;
void Timer1_Init(void)		//1毫秒@12.000MHz
{AUXR &= 0xBF;			//定时器时钟12T模式TMOD &= 0x0F;			//设置定时器模式TL1 = 0x18;				//设置定时初始值TH1 = 0xFC;				//设置定时初始值TF1 = 0;				//清除TF1标志TR1 = 1;				//定时器1开始计时EA = 1;                 //打开总中断ET1 = 1;                //打开定时器一中断允许位
}void Key_Proc()   //按键处理函数
{if(Key_Slow_Down <20) return;  //按键减速Key_Slow_Down = 0;Key_Val = Key_Read();     //读取键码值Key_Down = Key_Val & (Key_Old ^ Key_Val);  //判断按下Key_Up =  ~Key_Val & (Key_Old ^ Key_Val);  //判断松开Key_Old = Key_Val;       //判断长按switch(Key_Down){}
}void Seg_Proc()   //数码管处理函数
{if(Seg_Slow_Down <100) return;  //减速Seg_Slow_Down = 0;}void LED_Proc()  //LED处理函数
{}void main()
{System_Init();Timer1_Init();while(1){Key_Proc();Seg_Proc();LED_Proc();}}//定时器一中断打开---中断标志位3
void Timer1_Routine() interrupt 3
{Seg_Slow_Down++;Key_Slow_Down++;if(++Seg_Scan == 8) Seg_Scan = 0;if(Seg_Buf[Seg_Scan] > 20)  //判断带小数点的数据Seg_Disp(Seg_Scan,Seg_Buf[Seg_Scan]-',',1);elseSeg_Disp(Seg_Scan,Seg_Buf[Seg_Scan],0);LED_Disp(LED_Buf);         //LED扫描
}

 

结语:少年不惧岁月长,彼方尚有荣光在!保持谦卑的态度学习!

 

 

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

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

相关文章

科技写作改革我见:取消参考文献,以点读率取代引证率!

科技写作改革我见&#xff1a;综述应取消参考文献&#xff0c;学术成就评估以点读下载率取代参考文献引证率&#xff01;李升伟 张君飞 韩若兰引言在当今信息爆炸的时代&#xff0c;科技写作作为知识传播的核心载体&#xff0c;其形式与评价体系正面临前所未有的挑战。传统…

【Altium designer】快速建立原理图工程的步骤

快速建立原理图工程的步骤产品规格书分析 整理产品需求&#xff0c;明确主控芯片、外围接口类型、总线频率、电源需求及隔离要求、PCB尺寸等关键信息。使用文本清单列出所有需求&#xff0c;确保无遗漏。硬件需求架构图绘制 根据需求说明书和收集的信息&#xff0c;使用VISIO绘…

Origin2025b安装包免费,附Origin 2025安装教程

老规矩先放链接&#xff1a;origin2025b安装包 有位小粉丝问我有没有Origin2025b的安装包&#xff0c;有的兄弟有的&#xff0c;只有你想不到&#xff0c;没有小兔找不到的软件。 这个origin是OriginLab公司开发的一个科学绘图、数据分析的软件&#xff0c;Origin支持各种各样…

【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符

文章目录【C语法】输出的设置 iomanip 与 std::ios 中的流操纵符1. iomanip 中的流操纵方法1.1 位宽操作类1.1.1 std::setw(x)1.1.2 std::setfill(c)1.1.3 std::left1.1.4 std::right1.1.5 std::internal1.2 小数操作类1.2.1 std::fixed1.2.2 std::setprecision(x)1.2.3 std::s…

go语言学习笔记-Map

map 是一种无序的基于 key-value 的数据结构&#xff0c;Go 语言中的 map 是引用类型&#xff0c;必须初始化 才能使用。 Go 语言中 map 的定义语法如下map[KeyType]ValueType常见两种创建方法1 使用map初始化var scoreMap make(map[string]int, 8) scoreMap["陈翔"…

芯片安全标准驱动库,筑牢芯片功能安全基石

随着整车控制器功能日益复杂&#xff0c;为满足越发严格的功能安全认证要求&#xff0c;项目开发人员需要采取相应的安全措施对系统中电子元器件的单点故障&#xff08;Singel Point Fault&#xff09;和潜在故障&#xff08;Latent Fault&#xff09;进行检测和管理&#xff0…

rn相关ScrollView

一&#xff1a;ScrollView的style和contentContainerStyle二&#xff1a;flex:1,和flexGrow:1用处内容将纵向空间占满

Spark Core 3.3.2 略讲~

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/…

智能家居Agent:物联网设备的统一控制与管理

智能家居Agent&#xff1a;物联网设备的统一控制与管理 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一个特性都是我放飞的…

汉高携手SAP推出AI驱动的退换货与争议管理解决方案

2025年8月12日&#xff0c;SAP宣布与全球知名的胶黏剂、密封剂及消费品制造商汉高&#xff08;Henkel AG & Co. KGaA&#xff09;联合开发了一套基于SAP AI Services的定制化解决方案&#xff0c;用于优化退换货及争议管理流程。该方案旨在通过人工智能自动化索赔相关文件的…

[SC]SystemC中的SC_FORK和SC_JOIN用法详细介绍

SystemC中的SC_FORK和SC_JOIN用法详细介绍 摘要:SystemC是一个开源的C++库(由Accellera和IEEE标准化,IEEE 1666-2011),用于系统级建模、硬件描述和仿真。它扩展了C++以支持硬件概念,如模块(sc_module)、端口(sc_port)、信号(sc_signal)和进程(SC_METHOD、S…

工作流调度(草稿)

串行回复当我加上第三条分支&#xff0c;此时的输出就很混乱了&#xff0c;按理来说最后输出的第二波输出反而先结束了&#xff0c;调用LLM结果的第一波输出最后才输出&#xff0c;这是为什么&#xff1f;当我把LLM节点改为一个不耗时的节点的时候&#xff1a;初步猜测&#xf…

AI不再停留在概念阶段,而是在各行业核心业务场景产生实际价值。随着大模型、边缘计算等技术的突破,AI应用将向实时化、自主化、普惠化方向深度演进。

一、金融领域&#xff1a;智能风控与欺诈检测案例&#xff1a;某银行使用AI实时拦截信用卡欺诈交易&#xff0c;每年减少损失$2400万python# 使用XGBoost构建欺诈检测模型&#xff08;Python&#xff09; import pandas as pd from xgboost import XGBClassifier from sklearn.…

GStreamer中解复用器(Demuxer)

在 GStreamer 中,解复用器(Demuxer) 用于分离容器格式(如 MP4、MKV、AVI 等)中的 视频、音频、字幕等流。不同的容器格式需要不同的 Demuxer 元素。 一、常见的 GStreamer Demuxer 元素 1. MP4 / QuickTime 格式 qtdemux 用于解析 MP4(.mp4)、MOV(.mov) 等基于 Quic…

MySQL 存储过程终止执行的方法

在 MySQL 存储过程&#xff08;PROCEDURE&#xff09;开发中&#xff0c;我们常常遇到这样的需求&#xff1a; 在执行过程中&#xff0c;如果某些条件不满足&#xff0c;就要立即终止剩余逻辑&#xff0c;避免无效或错误的操作。不同于 Java、Python 等编程语言直接 return 退出…

鲲鹏arm服务器安装neo4j社区版,实现图书库自然语言检索基础

我在dify实施中&#xff0c;发现采用自然语言进行数据库检索效果还不错&#xff0c;我就想起来了图数据库的自然语言检索&#xff0c;以前图书库的算法我不熟悉&#xff0c;这次打算采用这种方式完成。我才用但是鲲鹏920&#xff0c;泰山服务器&#xff0c;2280主机&#xff0c…

小八的学习日记 -- 为什么kafka吞吐量大

1. 「顺序读写」—— 像开高速公路一样爽&#xff01;​​​​传统硬盘的痛点&#xff1a;​​ 普通硬盘&#xff08;HDD&#xff09;像在热闹的菜市场找东西&#xff0c;磁头要来回移动&#xff08;寻道&#xff09;&#xff0c;随机读写特别慢。​​Kafka 的妙招&#xff1a;…

5G NTN 卫星测试产品

5G NTN 卫星测试产品非地面网络测试解决方案卫星射频节点测试测量相控阵天线应对卫星基础设施测试挑战适用于 5G NTN 卫星测试的高性能解决方案卫星基础设施测试解决方案的优势5G NTN 卫星测试产品FSW 信号与频谱分析仪R&SSMW200A 矢量信号发生器非地面网络测试解决方案 透…

Redis 内存大页(Transparent Huge Pages, THP)与写时复制(COW)性能全解:原理、源码、调优与架构进阶

Redis 内存大页&#xff08;Transparent Huge Pages, THP&#xff09;与写时复制&#xff08;COW&#xff09;性能全解&#xff1a;原理、源码、调优与架构进阶 Redis 性能瓶颈常见于持久化时 fork 操作的延迟&#xff0c;但系统级“内存大页”&#xff08;THP&#xff09;配置…

爬虫与数据分析入门:从中国大学排名爬取到数据可视化全流程

在数据驱动的时代&#xff0c;掌握爬虫技术获取数据、运用数据分析工具处理数据并通过可视化呈现结果&#xff0c;已成为一项重要技能。本文以 “中国大学排名爬取与分析” 为例&#xff0c;带你走进爬虫与数据分析的世界&#xff0c;了解相关基础知识与实操流程。 一、爬虫基…