码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验


    目录

    一、实验题目

    二、实验要求

    三、实验过程及结果记录

    1. 在Proteus 环境下建立图1所示原理图,并将其保存为keyscan_self.DSN 文件。

    2. 编写控制源程序,将其保存为keyscan_self.asm 或keyscan_self.c。

    3. 将源程序添加到U1 中,并构造(build)该程序,将asm文件编译成hex文件,将可执行文件hex写入芯片

    4. 执行仿真过程观察秒表程序功能是否正确。

    四、实验流程图

    五、实验源代码


    一、实验题目

    3.4矩阵键盘扫描实验

    二、实验要求

    1、画出实验的流程图

    2、编写源程序并进行注释

    3、记录实验过程

    4、记录程序运行结果截图

    三、实验过程及结果记录

    1. 在Proteus 环境下建立图1所示原理图,并将其保存为keyscan_self.DSN 文件。

    图1:实验电路图

    2. 编写控制源程序,将其保存为keyscan_self.asm 或keyscan_self.c。

    3. 将源程序添加到U1 中,并构造(build)该程序,将asm文件编译成hex文件,将可执行文件hex写入芯片

    4. 执行仿真过程观察秒表程序功能是否正确。

       1)可见实验开始时,顺时针旋转,且速度为最慢,如图2所示:

    图2:顺时针旋转

       2)当按下逆时针按钮,灯泡逆时针亮起,如图3:

    图3:逆时针旋转

       3)按下加速按钮,观察到灯泡亮灭的速度加快,如图4:

    图4:转速加快

       4)按下减速按钮,灯泡明灭的速度变慢,如图5:

    图5:转速减慢

    四、实验流程图

    实验流程图6如下所示:

    图6:旋转彩灯线反转法C 语言程序控制流程图

    五、实验源代码

    1. #include <reg51.h> //预处理伪指令
    2. #include <stdio.h>
    3. #include <intrins.h>
    4. typedef unsigned int uint; //使用typedef函数定义数据类型
    5. typedef unsigned char uchar; //简化无符号整形和无符号字符型的标号
    6. uint Speed_light[]={0xef,0xf7,0xfb,0xfd,0xfe}; //定义速度的档位
    7. uint Delay_time[]={1000,800,600,400,200}; // 定义延时数组
    8. uint out=0xfe; // 定义out输出,初始为 P1输出,D1亮
    9. uchar dir=0; // dir指示旋转的顺时针与逆时针,定义起始状态为顺时针
    10. uchar speed=1; // 定义旋转速度,开始为一档
    11. uchar key=8; // 定义key,用于键盘键值
    12. void delay(uint t) //程序,传递参数t,延时tms
    13. {
    14. uint x,y;
    15. for(x = t;x > 0;x--) //外层循环
    16. for(y = 110;y > 0;y--); // 内层循环
    17. }
    18. void key_scan() // 定义键盘扫描子程序
    19. { uint temp; // 定义变量temp
    20. P3 = 0Xf0; //行扫描
    21. if(P3!=0xf0) //判断若P3值改变,说明有按键按下
    22. {
    23. delay(10); //调用延时子程序去抖动
    24. if(P3!=0xf0) //若不为0XF0,说明的确有按键按下
    25. {
    26. temp=P3;
    27. if(temp==0xe0)// 判断若P3的值为0xe0,说明按下的是KEY0或KEY2
    28. {key=0;} //令key为0
    29. else if(temp==0xd0) //否则若P3的值为0XD0,说明按下的是KEY1或KEY3
    30. {key=1;}; //令key为1
    31. }
    32. }
    33. P3=0x0f; //列扫描
    34. if(P3!=0x0f) //判断P3值改变
    35. {
    36. delay(10); // 调用延时子程序去抖动
    37. if(P3!=0x0f) // 判断若不为0X0F
    38. {
    39. temp=P3; //令tmp等于P3
    40. if(temp==0x0e) // 若为0x0e
    41. {key=key;}
    42. else if(temp==0x0d) // 若为0x0d
    43. {key=key+2;}; //则成为key2或key3
    44. }
    45. }
    46. }
    47. void main() // main函数
    48. {
    49. while(1) //始终循环
    50. {
    51. key_scan(); //调用子程序键盘扫描
    52. if(key==0) //若按下的是key0
    53. {dir=0; //则为顺时针
    54. key=8;} // 给key赋值
    55. else if(key==1) // 但若按下的是key1
    56. {dir=1; // 则为逆时针
    57. key=8;} // 给key赋值
    58. else if(key==2&&speed<5) // 若按下的是key2且未达到最高速5
    59. {speed++; //则使其加速
    60. key=8;} //key赋值
    61. else if(key==2&&speed==5) //若按下的是key2且已经是最高速5
    62. {speed=5; //保持原速
    63. key=8;}
    64. else if (key==3&&speed>1) // 若按下的是key3且不是最低速1
    65. {speed--; // 则使其减速
    66. key=8;}
    67. else if(key==3&&speed==1) // 若按下的是key3但是最低速1
    68. {speed=1; //保持原速
    69. key=8;};
    70. if(dir==0) // 若为顺时针
    71. {
    72. out=_crol_(out,1); //P1左移一位,循环点亮
    73. P1=out; // 输出
    74. P0=Speed_light[speed-1]; //控制点亮速度挡位指示灯
    75. delay(Delay_time[speed-1]); // 调用延时程序
    76. }
    77. else if(dir==1) // 若是逆时针
    78. {
    79. out=_cror_(out,1); //右移一位,循环点亮
    80. P1=out;
    81. P0=Speed_light[speed-1]; // 控制速度挡位的指示灯
    82. delay(Delay_time[speed-1]);
    83. }
    84. }
    85. }

    初学单片机,可能存在错误之处,还请各位不吝赐教。

    受于文本原因,本文相关实验工程无法展示出来,现已将资源上传,可自行下载。

    山东大学单片机原理与应用实验工程文件3.4矩阵键盘扫描实验-单片机文档类资源-CSDN下载山东大学单片机原理与应用实验工程文件3.4矩阵键盘扫描实验详解博客地址:https://blo更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/m0_52316372/85916257

  • 相关阅读:
    springboot大学生就业招聘网站java ssm
    iNFTnews|Web3正在重新定义粉丝的意义
    gunicorn日志系列2-日志格式配置,输出接口入参,出参详细信息
    来用Vite+React快速开发浏览器插件
    拟合平面再思考
    [复现 | 论文】Seg4Reg Networks for Automated Spinal Curvature Estimation
    uni-app 中的 picker 组件基于后台对象数组数据格式的使用
    freeswitch之媒体协商模式
    从零开始学习线性回归:理论、实践与PyTorch实现
    路由转发的过程
  • 原文地址:https://blog.csdn.net/m0_52316372/article/details/125630386
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号