我的第一个单片机程序!!!但是有些问题需要请教一下在座的各位大佬们

2023-10-14 01:59

本文主要是介绍我的第一个单片机程序!!!但是有些问题需要请教一下在座的各位大佬们,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

昨天晚上做的单片机实验,我平时看到单片机代码倒是挺多,但是没正真动手去写代码,去设计一个电路(我本来是有一个51的单片机板子的,但是学校不开学,我也没法回去拿,只能在家一直看代码,我可真是太难了)
实验的题目就是做一个4*4 的矩阵键盘(0~F),然后用两位数码管显示,比如按下了“1”,数码管显示“01”;按下了“F”,数码管显示“15”,下面把代码和proteus仿真的电路图给各位大佬双手奉上来:

代码:

#include <reg51.h>
#include <intrins.h>
#define  uchar  unsigned char
#define Time 50	sbit L1 = P1^0;	
sbit L2 = P1^1; 
sbit L3 = P1^2; 
sbit L4 = P1^3;
sbit L5 = P1^4;
sbit L6 = P1^5;
sbit L7 = P1^6;
sbit L8 = P1^7;uchar dis[16] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned  int  time;
void delay(time)     //delay_function	
{unsigned  int j,i;for( j=0;j<80;j++)for(i=0;i<time;i++);
}void display(i,k)    //display_function
{P2 = 0x01; P0 = dis[i];delay(Time);P2 = 0x02; P0 = dis[k];delay(Time);
}void judge(i,a,b,c,d) 
{if(L5 == 0) while(1) display(i,a);if(L6 == 0) while(1) display(i,b);if(L7 == 0) while(1) display(i,c);if(L8 == 0) while(1) display(i,d);
}main()
{uchar temp,i; while(1){P1= 0xef;for(i=0;i<4;i++){if(L1 == 0)        //press first linejudge(0,0,1,2,3);	if(L2 == 0)        //press second linejudge(0,4,5,6,7);if(L3 == 0)        //press third line{if(L5 == 0) while(1) display(0,8);if(L6 == 0) while(1) display(0,9);	if(L7 == 0) while(1) display(1,0);if(L8 == 0) while(1) display(1,1);}if(L4 == 0)        //press forth linejudge(1,2,3,4,5);temp = P1;temp = temp|0x0f;temp = temp<<1;temp = temp|0X0f;P1 = temp;}}
}

先解释某些代码吧,judge函数,它需要五个形参,分别是i,a,b,c,d,“i”在这里代表十位数,所以i只可能又“0”和“1”两个值,a,b,c,d分别代表个位数。

举个例子吧,假设按下了“F”,那么进入"if(L4 == 0)“条件语句,进入judge函数,再进入"if(L8 == 0)”,然后再进入while循环执行display函数,此时,传进display函数的两个参数i,d分别是 1,5,通过P2口控制数码管的亮灭(此处我用的是数码管的动态显示,因为延时时间很短,利用视觉暂留使我们看到的是两个数码管一直显示),P1口就是送1和5 对应的十六进制编码了,最终我们看到的数码管显示一直是15。

还要多说一点的是,当第三行有按键按下时,是没法放进judge函数的,因为第三行的按键在数码管显示的是08,09,10,11,十位数是不一样的,起初打算向judge函数里面传入六个参数,但是后来发现这样无法实现,所以单独拿了出来。

下面是proteus仿真的电路图:
在这里插入图片描述
电路比较简单(上面的晶振电路可以不用画,我看很多同学都没画),点击“F”后显示15

上面呢是标题的前半部分,标题后半部分的问题来了:
我这个电路无法循环检测,也就是说我按下“F”键后,数码管一直显示15,按下其他的键没有用,我被这个问题困扰了一下午也没想出解决方法,希望做单片机大佬给我解答一下!提前谢谢您了,在这先给您拜个早年啦!

这篇关于我的第一个单片机程序!!!但是有些问题需要请教一下在座的各位大佬们的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/207359

相关文章

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创