草庐IT

第十二届蓝桥杯大赛软件类省赛C++研究生组

_tomorrow 2023-04-08 原文

题目

题目是全的,但是由于能力有限,后面有题目没做,分值和完成情况在题目后说明

A 卡片(5分,√)

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。 例如,当小蓝有 30 张卡片,其中 0 到 9 各 3张,则小蓝可以拼出 1 到 10, 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。 现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1 拼到多少? 提示:建议使用计算机编程解决问题

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int arr[10] = {0};
    for(int i = 0; i < 10; i ++){
        arr[i] = 2021;
    }
    int minx = 2021;
    int n = 1;
    int flag;
    while(minx > 0){
        int m = n;
        while(m > 0 ){
            if(minx == 0){
                n --;
                break;
            }
            int tmp = m % 10;
            arr[tmp] -= 1;
            minx = min(minx, arr[tmp]);
            m /= 10;
        }
        n ++;
    }
    printf("%d\n", n);
    return 0;
}

B 直线(5分,√)

题目描述
在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。

给定平面上2×3个整点{(x,y)|0 ≤ x < 2, 0 ≤ y < 3, x ∈ Z, y ∈ Z},即横坐标 是0到1 (包含0和1)之间的整数、纵坐标是0到2 (包含0和2)之间的整数 的点。这些点一共确定了 11 条不同的直线。

给定平面上20×21个整点{(x,y)|0 ≤ x < 20,0 ≤ y < 21,x ∈ Z,y ∈ Z},即横 坐标是0到19 (包含0和19)之间的整数、纵坐标是0到20 (包含0和20)之 间的整数的点。请问这些点一共确定了多少条不同的直线。

利用两点式方程:(y - y1) / (x - x1) = (y2 - y1) / (x2 - x1),化简后得:
y = [(y2 - y1) / (x2 - x1)] *x + (x1 * y2 - x2 * y1) / (x2 - x1),
从而得到斜率和截距。
注意:不能用y = kx + b,如:先用两点求出斜率k,再将斜率k和任一点带入求得b,这样会因为精度不准而导致结果错误。
int a = 6;
double b = 1.99;
double c = 1.999999999999;
double d = a * 1.0 / b;
double e = a * 1.0 / c;
cout << "a / b = " << d << “\n”; //3.01508
cout << "(a / b) * 3 = " << d * 3 << “\n”; // 9.04523
cout << "a / c = " << e << “\n”; //3
cout << "(a / c) * 3 = " << e * 3 << “\n”; //9

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

vector<pair<int, int>> all; //存放所有的点
set<pair<double, double>> res; //存放所有直线的斜率和截距

int main()
{
    //获得所有的点
    for(int i = 0; i < 20; i ++){
        for(int j = 0; j < 21; j ++){
            all.push_back(make_pair(i, j));
        }
    }
    //每两个点组成一条直线
    for(int i = 0; i < all.size(); i ++){
        int x1 = all[i].first;
        int y1 = all[i].second;
        for(int j = 0; j < all.size(); j ++){
            int x2 = all[j].first;
            int y2 = all[j].second;
            if(x1 != x2){//确保分母不为0,即两点的x值不同
                double k = (y2 - y1) * 1.0 / (x2 - x1); //斜率
                double b = (x1 * y2 - x2 * y1) * 1.0 / (x2 - x1); //截距
                res.insert(make_pair(k, b));
            }
        }
    }
    //40257
    printf("%d\n", res.size() + 20); // 两点的x值相同的直线有20条(0<=x<20)
    return 0;
}

C 货物摆放(10分,√)

题目描述
小蓝有一个超大的仓库,可以摆放很多货物。

现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。

小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 L、W、H 的货物,满足 n=L×W×H。

给定 n,请问有多少种堆放货物的方案满足要求。

例如,当 n = 4 时,有以下 6 种方案:1×1×4、1×2×2、1×4×1、2×1×2、2 × 2 × 1、4 × 1 × 1。

请问,当 n = 2021041820210418 (注意有 16 位数字)时,总共有多少种方案?

提示:建议使用计算机编程解决问题。

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

int main()
{
  long long n = 2021041820210418;
  int nn = int(pow(n, 1.0 / 2));
  long long arr[3000] = {0};
  int nums = 0;
  for(int i = 1; i <= nn; i ++){
    if(n % i == 0){
        arr[nums ++] = i;
        if(i != nn){
            arr[nums ++] = n / i;
        }
    }
  }
  int countn = 0;
  for(int i = 0; i < nums ;i ++){
    for(int j = 0; j < nums; j ++){
        for(int k = 0; k < nums; k ++){
            if(arr[i] * arr[j] * arr[k] == n){
                countn ++;
            }
        }
    }
  }
  printf("%d\n", countn);
  return 0;
}

D 路径(10分,√)

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。

小蓝的图由 2021 个结点组成,依次编号 1 至 2021。

对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。

例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无向边,长度为 75。

请计算,结点 1 和结点 2021 之间的最短路径长度是多少。

提示:建议使用计算机编程解决问题。

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int arr[2025] = {0};
    memset(arr, 0x3f, sizeof(arr));
    arr[1] = 0;
    for(int i = 1; i <= 2021; i ++){
        for(int j = i + 1; j - i <= 21 && j <= 2021; j ++){
            arr[j] = min(arr[j], arr[i] + (i * j) / __gcd(i , j));
        }
    }
    printf("%d\n", arr[2021]);
    return 0;
}

E 回路计数(15分,√)

题目描述
蓝桥学院由 2121​​​ 栋教学楼组成,教学楼编号 11​​ 到 2121​​。对于两栋教学楼 aa​​ 和 bb​,当 aa​ 和 bb​ 互质时,aa 和 bb 之间有一条走廊直接相连,两个方向皆可通行,否则没有直接连接的走廊。

小蓝现在在第一栋教学楼,他想要访问每栋教学楼正好一次,最终回到第一栋教学楼(即走一条哈密尔顿回路),请问他有多少种不同的访问方案?

两个访问方案不同是指存在某个 ii,小蓝在两个访问方法中访问完教学楼 ii 后访问了不同的教学楼。

提示:建议使用计算机编程解决问题。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int all = 1 << 21;

int arr[25][25] = {0};
ll dp[all][21] = {0};  //dp[x][i]:在x状态时,到达i栋楼的路径数

int main()
{
    //若i, j最小公因数为1即两栋楼之间有通路,arr[i][j] = arr[j][i] = 1
    for(int i = 0; i < 21; i ++){
        for(int j = i + 1; j < 21; j ++){
            if( __gcd(i + 1, j + 1) == 1){
                arr[i][j] = arr[j][i] = 1;
            }
        }
    }
    dp[1][0] = 1;
    for(int x = 1; x < all; x ++){ //遍历所有情况
        //该情况下包括第0栋楼
        if(x & 1){
            for(int i = 0; i < 21; i ++){
                //某情况下包括第i栋楼
                if((x >> i) & 1){
                    //与第i栋楼相连的楼
                    for(int j = 0; j < 21; j ++){
                        int tmp = x ^ (1 << i);
                        //第i栋楼不在x状态下且j栋楼在x状态下,同时i与j之间有通路
                        if((tmp >> j) & 1 & arr[i][j]){
                            //到达i楼的路径数加经过j栋楼到达i的路径数
                            dp[x][i] += dp[tmp][j];
                        }
                    }
                }
            }
        }
    }
    ll countn = 0;
    for(int i = 1; i < 21; i ++){
        if(arr[0][i]){
            countn += dp[all - 1][i];
        }
    }
    printf("%lld\n", countn);
    return 0;
}


F时间显示(15分,√)

题目描述
小蓝要和朋友合作开发一个时间显示的网站。

在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 19701970 年 11 月 11 日 00:00:0000:00:00 到当前时刻经过的毫秒数。

现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。

给定一个用整数表示的时间,请将这个时间对应的时分秒输出。
输入
输入一行包含一个整数,表示时间。
输出
输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时,值为 00​​​​ 到 2323​​​​,MM 表示分,值为 00​​​​ 到 5959​​​,SS 表示秒,值为 00​​ 到 5959​。时、分、秒 不足两位时补前导 00。
样例:
输入1

46800999

输出1

13:00:00

输入2

1618708103123

输出2

01:08:23
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

int main()
{
    long long times;
    cin >> times;
    times /= 1000;
    times %= (24 * 60 * 60);
    int hh = times / (60 * 60);
    times %= (60 * 60);
    int mm = times / 60;
    int ss = times % 60;
    printf("%02d:%02d:%02d\n", hh, mm, ss);
    return 0;
}

G砝码称重(20分,√)

题目描述
你有一架天平和 N 个砝码,这 N 个砝码重量依次是W1、W2……Wn。请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。
输入
输入的第一行包含一个整数 NN。
第二行包含 N 个整数:W1,W2,W3……,Wn
输出
输出一个整数代表答案。
样例
输入:

3
1 4 6

输出

10

解释:
能称出的 10 种重量是:1、2、3、4、5、6、7、9、10、11。

1 = 1;
2 = 6 − 4 (天平一边放 6,另一边放 4);​
3 = 4 − 1;
4 = 4;
5 = 6 − 1;
6 = 6;
7 = 1 + 6;
9 = 4 + 6 − 1;
10 = 4 + 6;
11 = 1 + 4 + 6。

前i个砝码能组成的j重量的方案数,其实大于1即可,分三种情况:
1、前i-1个就可以达到重量j;
2、第i个才能达到重量j,则前i-1个只能达到重量j-arr[i];
3、前i-1个可达到j+arr[j];

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

int arr[105] = {0};
int dp[105][100005] = {0};

int main()
{
    int n;
    scanf("%d", &n);

    int sumn = 0;
    for(int i = 1; i <= n; i ++){
        scanf("%d", &arr[i]);
        sumn += arr[i];
    }
    dp[0][0] = 1;
    for(int i = 1; i <= n; i ++){
        for(int j = 0; j <= sumn; j ++){
            dp[i][j] = dp[i - 1][j] + dp[i - 1][ j + arr[i]] + dp[i - 1][abs(j - arr[i])];
        }
    }
    int countn = 0;
    for(int i = 1; i <= sumn; i ++){
        if(dp[n][i]){
            countn ++;
        }
    }
    printf("%d\n", countn);
    return 0;
}

H 异或数列(20分)

题目描述
Alice 和 Bob 正在玩一个异或数列的游戏。初始时,Alice 和 Bob 分别有一个整数 a 和 b,初始值均为 0。

有一个给定的长度为 nn​​的公共数列 X1,X2,……,Xn​​。Alice 和 Bob 轮流操作,Alice 先手,每步可以在以下两种选项中选一种:

选项 1:从数列中选一个Xi给 Alice 的数异或上,或者说令 a⊕Xi ​​。(其中⊕​​ 表示按位异或);
选项 2:从数列中选一个Xi给 Bob 的数异或上,或者说令 b​​ 变为 b ⊕Xi​​。

每个数 Xi都只能用一次,当所有 Xi均被使用后(n​​ 轮后)游戏结束。游戏结束时,拥有的数比较大的一方获胜,如果双方数值相同,即为平手。 现在双方都足够聪明,都采用最优策略,请问谁能获胜?
输入描述
每个评测用例包含多组询问。询问之间彼此独立。
输入的第一行包含一个整数 T,表示询问数。
接下来 T​ 行每行包含一组询问。其中第 i​ 行的第一个整数 ni表示数列长度,随后 ni个整数 X1, X2, …… , Xni表示数列中的每个数。
输出描述
输出 T​​ 行,依次对应每组询问的答案。每行包含一个整数 1​​、0​ 或−1 分别表示 Alice 胜、平局或败。
样例
输入

4
1 1
1 0
2 2 1
7 992438 1006399 781139 985280 4729 872779 563580

输出

1
0
1
1

I 双向排序(25分)



J 分果果(25分)

题目描述
小蓝要在自己的生日宴会上将 n​​​​ 包糖果分给 m​​​​ 个小朋友。每包糖果都要分出去,每个小朋友至少要分一包,也可以分多包。

小蓝已经提前将糖果准备好了,为了在宴会当天能把糖果分得更平均一些,小蓝要先计算好分配方案。 小蓝将糖果从 1​​​ 到 nn​编号,第 i​ 包糖果重 wi。小朋友从 1 到 m​​ 编号。每个小朋友只能分到编号连续的糖果。小蓝想了很久没想出合适的分配方案使得每个小朋友分到的糖果差不多重。因此需要你帮他一起想办法。为了更好的分配糖果,他可以再买一些糖果,让某一些编号的糖果有两份。当某个编号的糖果有两份时,一个小朋友最多只能分其中的一份。

请找一个方案,使得小朋友分到的糖果的最大重量和最小重量的差最小,请输出这个差。

例如,小蓝现在有 5​​​​ 包糖果,重量分别为 6, 1, 2, 7, 9,如果小蓝要分给两个小朋友,则他可以将所有糖果再买一份,两个小朋友都分到 11​​​ 至 55​​ 包糖果,重量都是 25​,差为 0。

再如,小蓝现在有 55​​​​​​​ 包糖果,重量分别为 6, 1, 2, 7, 9,如果小蓝要分给三个小朋友,则他可以将第 3 包糖果再买一份,第一个小朋友分 1​​​​​​ 至 33​​​​ 包,第二个小朋友分 3​​​​ 至 4​​​ 包,第三个小朋友分第 5​​ 包,每个小朋友分到的重量都是 9​,差为 0。

再如,小蓝现在有 5​ 包糖果,重量分别为 6, 1, 2, 7, 9,如果小蓝要分给四个小朋友,则他可以将第 3 包和第 5 包糖果再买一份,仍然可以每个小朋友分到的重量都是 9,差为 0。

再如,小蓝现在有 5​​​​​​​​​​​​​ 包糖果,重量分别为 6, 1, 2, 7, 9​​​​​​​​​​​​,如果小蓝要分给五个小朋友,则他可以将第 4 包和第 5​​​​​​​​​​​ 包糖果再买一份,第一个小朋友分第 1​​​​​​​​​​ 至 2​​​​​​​​​ 包重量为 7​​​​​​​​,第二个小朋友分第 3​​​​​​​ 至 4​​​​​​ 包重量为 9​​​​​,第三个小朋友分第 4​​​​ 包重量为 7​​​,第四个和第五个小朋友都分第 5​​ 包重量为 9​。差为 2。
输入描述
输入第一行包含两个整数 n 和 m,分别表示糖果包数和小朋友数量。
第二行包含 n 个整数 w1, w2, · · · , wn ,表示每包糖果的重量。
输出描述
输出一个整数,表示在最优情况下小朋友分到的糖果的最大重量和最小重量的差。
样例
输入1:

5 2
6 1 2 7 9

输出1

0

输入2:

5 5
6 1 2 7 9

输出2

2

有关第十二届蓝桥杯大赛软件类省赛C++研究生组的更多相关文章

  1. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  2. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  3. 蓝桥杯备赛(二) - 2

    目录前言: 一、ASC分析代码实现二、 卡片分析代码实现三、 直线分析代码实现四、货物摆放分析代码实现小结:前言:  在刷题的过程中,发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉,蓝桥杯题目偏向对于实际问题用编程去的解决,而力扣给人感觉很锻炼自己的编程思维,逻辑能力。两者结合去刷,相信会有不一样的收获。 一、ASC  已知大写字母A的ASCII码为65,请问大写字母L的ASCII码是多少?分析  这道题目看上去很简单,我们需确定自己计算的准确,所以我建议用编程去解决。代码实现publicclassTest8{publicstaticvoidmain(String[]args){Sy

  4. 【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了.... - 2

    谈到现状,国内的软件测试行情目前呈现了两极分化的极端情况。一个是早期的手工测试人员吐槽工作不好做,即使有工作也是外包,而且薪资太低;一方面是很多互联网企业感叹自动化测试人才难找,有技术的自动化测试工程师,高薪难聘。这两者其实并不矛盾。手工测试工作难找也确实是目前真实的行情早期从事功能测试的手工测试人员,在测试方面大多采用手动、人工执行的方式查找软件缺陷和BUG,用行业术语来描述就是“点点点”。这种测试方式耗费大量人力和资源,工作效率却十分低下。在早期软件复杂和迭代程度不高的情况下,有资本的企业会“供养”一批这样的手工测试人员。但对测试员本身来讲,毫无技术难度的工作,和几乎没有保障的薪资水平,直

  5. 蓝桥杯C/C++VIP试题每日一练之报时助手 - 2

    ?作者主页:静Yu?简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者?社区地址:前端知识交流社区?博主的个人博客:静Yu的个人博客?博主的个人笔记本:前端面试题个人笔记本只记录前端领域的面试题目,项目总结,面试技巧等等。接下来会更新蓝桥杯官方系统基础练习的VIP试题,依然包括解题思路,源代码等等。问题描述:给定当前的时间,请用英文的读法将它读出来。时间用时h和分m表示,在英文的读法中,读一个时间的方法是:  如果m为0,则将时读出来,然后加上“o’clock”,如3:00读作“threeo’clock”。  如果m不为0,则将时读出来,然后将分读出来,如5

  6. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

  7. “网安三人行”盘点:软件供应链安全的那些事儿 - 2

    2022年伊始,默安科技联合数世咨询举办以“软件供应链安全的时与势”为主题的访谈活动,由数世咨询创始人李少鹏主持,邀请贝壳安全研发负责人李文鹏、北京邮电大学副教授张文博、默安科技副总裁沈锡镛三位行业大咖做客网安小酒馆,从产业、企业、学术的不同维度,共同探讨软件供应链安全建设的新思路,为业界呈现了一场开年网安盛宴。随着全球软件供应链安全事件频发,软件供应链安全逐渐成为业界关注焦点,也成为影响国家重要信息系统安全与关键信息基础设施安全的重要因素,以及网络安全保障体系和能力建设的重要环节。嘉宾们围绕软件供应链安全发展的主要驱动力、关基行业中的实施现状和落地难点、产学研成果转化、软件供应链安全的重要性

  8. 十四届蓝桥青少组模拟赛Python-20221108 - 2

    十四届蓝桥青少组模拟赛Python-20221108T1.二进制位数十进制整数2在十进制中是1位数,在二进制中对应10,是2位数。十进制整数22在十进制中是2位数,在二进制中对应10110,是5位数。请问十进制整数2022在二进制中是几位数?print(len(bin(2022))-2)#运行结果:11T2.晨跑小蓝每周六、周日都晨跑,每月的1、11、21、31日也晨跑。其它时间不晨跑。已知2022年1月1日是周六,请问小蓝整个2022年晨跑多少天?#样例代码1ls=[0,31,28,31,30,31,30,31,31,30,31,30,31]ans=0k=6foriinrange(1,13)

  9. 蓝桥杯 stm32 MCP4017 - 2

    本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B&#

  10. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

随机推荐