山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

这篇具有很好参考价值的文章主要介绍了山东大学单片机原理与应用实验 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 文件。

山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

图1:实验电路图

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

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

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

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

山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

图2:顺时针旋转

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

山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

图3:逆时针旋转

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

山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

图4:转速加快

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

山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

图5:转速减慢

四、实验流程图

实验流程图6如下所示:

山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

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

五、实验源代码

#include <reg51.h>   //预处理伪指令
#include <stdio.h>
#include <intrins.h>

typedef unsigned int uint;   //使用typedef函数定义数据类型
typedef unsigned char uchar;   //简化无符号整形和无符号字符型的标号

uint Speed_light[]={0xef,0xf7,0xfb,0xfd,0xfe};	  //定义速度的档位
uint Delay_time[]={1000,800,600,400,200};   // 定义延时数组

uint out=0xfe;    // 定义out输出,初始为 P1输出,D1亮
uchar dir=0;    // dir指示旋转的顺时针与逆时针,定义起始状态为顺时针
uchar speed=1; // 定义旋转速度,开始为一档
uchar key=8;   // 定义key,用于键盘键值

void delay(uint t)    //程序,传递参数t,延时tms
{
	uint x,y;    
	for(x = t;x > 0;x--)   //外层循环
   	for(y = 110;y > 0;y--);  // 内层循环
} 

void key_scan()	   //  定义键盘扫描子程序
{  uint temp;    // 定义变量temp
   P3 = 0Xf0;		//行扫描
   if(P3!=0xf0)	  //判断若P3值改变,说明有按键按下
   {
   	delay(10);	   //调用延时子程序去抖动
    if(P3!=0xf0)   //若不为0XF0,说明的确有按键按下
	{
	 temp=P3;	   
	 if(temp==0xe0)// 判断若P3的值为0xe0,说明按下的是KEY0或KEY2
	 {key=0;} //令key为0
	 else if(temp==0xd0)   //否则若P3的值为0XD0,说明按下的是KEY1或KEY3
	 {key=1;};   //令key为1
	}
   }
   P3=0x0f;   	 //列扫描
    if(P3!=0x0f) //判断P3值改变
   {
   	delay(10);	// 调用延时子程序去抖动
    if(P3!=0x0f)   // 判断若不为0X0F 
	{
	 temp=P3;    //令tmp等于P3
	 if(temp==0x0e)	 // 若为0x0e
	 {key=key;}		 
	 else if(temp==0x0d)  // 若为0x0d
	 {key=key+2;};	  //则成为key2或key3
	}
   }
}

void main()		 // main函数
{
  	while(1)			//始终循环
{
	  key_scan();		//调用子程序键盘扫描
   	  if(key==0)       //若按下的是key0
	  {dir=0;	        //则为顺时针
	  key=8;}      // 给key赋值
	  else if(key==1)	// 但若按下的是key1
	  {dir=1;			// 则为逆时针
	  key=8;}      // 给key赋值
	  else if(key==2&&speed<5)	 // 若按下的是key2且未达到最高速5
      {speed++;					//则使其加速
	  key=8;}           //key赋值
	  else if(key==2&&speed==5)	//若按下的是key2且已经是最高速5
	  {speed=5;					//保持原速
	  key=8;}
	  else if (key==3&&speed>1)	 // 若按下的是key3且不是最低速1
	  {speed--;					 // 则使其减速
	  key=8;} 
	  else if(key==3&&speed==1)	  // 若按下的是key3但是最低速1
	  {speed=1;				//保持原速
	  key=8;}; 
	 
	 	if(dir==0)    // 若为顺时针 
		{
			out=_crol_(out,1);   //P1左移一位,循环点亮
			P1=out;     // 输出
			P0=Speed_light[speed-1];   //控制点亮速度挡位指示灯
			delay(Delay_time[speed-1]);   // 调用延时程序
		}
		else if(dir==1)		  // 若是逆时针
		{
			out=_cror_(out,1);		 //右移一位,循环点亮
			P1=out;
			P0=Speed_light[speed-1];	   // 控制速度挡位的指示灯
			delay(Delay_time[speed-1]);
		}
	}
}

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

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

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

到了这里,关于山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 山东大学计算机科学与技术学院程序设计思维与实践作业 week8-图和树的性质与应用(下)

    山东大学计算机科学与技术学院程序设计思维与实践作业 山大程序设计思维与实践作业 sdu程序设计思维与实践 山东大学程序设计思维实践作业H8 山大程序设计思维实践作业H8 山东大学程序设计思维与实践 week8-图和树的性质与应用(下) 相关资料:GitHub 问题描述 现在有一个长

    2023年04月25日
    浏览(74)
  • 山东大学增强现实实验四

    注意:本人尚处在opencv的入门学习阶段,本博客仅为个人学习笔记见解,如有不当,欢迎指出 (实验/理论)平面标志物的视觉跟踪,要求: 选择一个标志物,可以是人工标志物,也可以是自然标志物;实现和实验二相同的效果。 用手机或摄像头拍摄标志物的影像,建议读取视

    2024年02月08日
    浏览(76)
  • 整数序列(山东大学考研机试题)

    题目链接:3717. 整数序列 - AcWing题库

    2024年02月13日
    浏览(50)
  • 山东大学计算机网络期末

    内容仅供参考。如有错误之处,敬请指正! 第一章 概述 第二章 物理层 第三章 数据链路层 第四章 介质访问子层 第五章 网络层 第六章 传输层 第七章 应用层 1.基本概念 计算机网络定义: 表示一组通过单一技术相互连接起来的自主计算机集合。 分布式系统: 是建立在网络

    2024年02月03日
    浏览(54)
  • 2021山东大学众智期末复习笔记

    目录 社交网络 同质性 正负关系 小世界 搜索引擎 博弈论 市场 权力 从众 新事物的扩散 信息不对称 流⾏病和线粒体夏娃 强连通图:有向图G中,任意两点可以相互到达。 有向图的强连通分量:有向图中的极大强连通子图。 三元闭包:如果两个互不相识的人有了一个共同的朋

    2023年04月08日
    浏览(53)
  • 山东大学数字图像处理实验(一)

    题目:加载并显示图像 imread 函数原型为 imread(const string filename, int flags=1) 这里的 filename 需要的是图像的路径。该函数从文件中加载图像并返回一个矩阵,如果图像不能被读取,则返回一个空的矩阵 这里介绍一下不同 flag 的效果 flag=-1 :8位深度,原通道 flag=0 :8位深度,

    2024年02月06日
    浏览(62)
  • 【山东大学】web数据管理——复习笔记

    写在前面 若有图片加载失败,请 科学上网 。 本文为对软件学院连老师的PPT课件总结所得的复习笔记,仅供参考。不保证对考点的全覆盖,以PPT为主。 对往年考过的题相关知识点前面都标注了“考过”,并高亮,供参考。 写的比较匆忙,有遗漏、错误之处敬请指正。 笔记中

    2024年02月08日
    浏览(55)
  • 山东理工大学单元测试2重现

    本次单元测试虽然较第一次机测难度增加,但整体难度与平时pta练习相比,难度并不大,一些细节同学们在考试时容易忽略,本次八道题,可关注第四题的简便公式,以及第七题的注意事项和第八题运行超时的解决办法。 7-1 sdut-C语言实验-A+B for Input-Output Practice (不确定次数循

    2024年02月05日
    浏览(47)
  • 【软件工程】山东大学软件工程复习提纲

    涵盖所有考点,复习绝对高效,点赞+留邮箱获取pdf版本 本提纲可以完全摘抄,考试命中率100%,先上考试带的A4纸: 1. 软件工程三要素 方法:为软件开发提供了“如何做 ”的技术,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计等; 工具:为软件工

    2024年02月13日
    浏览(39)
  • 山东大学众智科学与网络化产业复习笔记

    写在前面:鹿男神yyds,讲课诙谐有趣,条理清晰,给分可冲,总而言之,众智可冲,题主94,12/160,本文是复习时的总结,希望学弟学妹95+ 图 = 事物(节点) + 联系(边) 同构:图的画法不同,结构上相同,两图同构意味着可以找到一组对应的点,其关系也一致。 邻接矩阵

    2024年01月23日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包