stm32用一个按键控制两位数码管从00-99,代码怎么写

stm32用一个按键控制两位数码管从00-99,代码怎么写,第1张

/按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2

接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)

//

按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2

接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)//

#include<reg52h>

sbit P0_0=P0^0; //个位数字

sbit P0_1=P0^1; //十位数字

void delay(int k); //Tab为数码管显示值,存入一个数组内

void key_ccan(void); //声明按键扫描函数

unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}unsigned char i,shi,ge,num,count=10; //num为被显示的数字

void main()

{

P2=Tab[0];P0_0=0;P0_1=0;//显示00

num=0; //被显示的数置0

while(1)

{

key_ccan(); //调用按键扫描程序

for(i=0;i<count;i++) //显示个位、十位count次后显示的数加1

shi=num/10; //取出十位数

ge=num%10; //取出个位数

P0_0=1;P0_1=1; //关闭显示

P2=Tab[shi]; //P2口送出十位数据显示代码

P0_0=0; //打开十位显示

delay(10); //延时

P0_0=1; //关闭显示

P2=Tab[ge]; //P2口送出个位数据显示代码

P0_1=0; //打开个位显示

delay(10); //延时

P0_1=1; //关闭个位显示

}

}

void key_ccan(void)

{

unsigned char ii;

P1=0xff;

ii=P1;

if(ii!=0xff)

{

P1=0xff;

delay(50);

ii=P1;

if(ii!=0xff)

{

switch(ii)

{

case 0xfe: num++;if(num==100) num=0; break;

case 0xfd: if(num==0) num=99;else num--;break;

default: break;

}

}

}

}

void delay(int k) //最简单的C延时程序

{ unsigned char i;

while(k--) //直至K减为0则跳出

{for(i=100;i>0;i--);}

}

59

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

单片机_两个数码管显示00~99

/按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2

接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)

//

按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2

接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)//

#include<reg52h>

sbit P0_0=P0^0; //个位数字

STM32,ST是意法半导体、M是Microelectronics的缩写、32 表示32 位。所以,STM32就是指ST公司开发的32位微控制器。

准备软件环境:

意法半导体,已经开发出一套软件STM32CubeMX + keil,能够用来自动生成ST公司生产的全部stm单片机产品。

这两个软件都可以在官网或其他地方下载安装。

准备硬件环境:

需要有一个STM32单片机的开发板。这个可以根据个人需求选择,并且要注意STM的型号。以及一个能够将写好的程序安装进单片机的ST-LINK下载器,将他们链接到电脑即可。

相关的配件、如面包板、杜邦线、mini USB电源和线,也是必不可少的。对于初学者来说,做到这些基本上就可以开始编程了。而各种传感器、发光二极管、电阻、USB TTL 转接、等,是后续的深入学习可能用到的东西了。

有问题的那个程序

u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);

只在上面那条指令采集了一次按键数据。

等到执行到 while(!ReadValue);//等待按键被放开 这条指令时

数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新读取按键状态,像正确的程序那样用这样的指令

while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10));//等待按键被放开

另外因为你只读取了一次按键状态,所以下面那么多一堆软件消除抖动的程序白写了。

综上,正确的程序在每个判断的时刻都要重新读取下按键状态。

用两个定时器分别对两个LED灯闪烁,KEY1和KEY2要设置为外部中断输入,当进入中断时KEY1_DANG或KEY2_DANG指向下一个档位,并且发送串口。给你提供点思路。

void main()

{

while(1)

{

if(key1_dang==0x01)

中断定时1设置为02秒

if(key1_dang==0x02)

中断定时1设置为04秒

if(key1_dang==0x03)

中断定时1设置为06秒

if(key1_dang==0x04)

中断定时1设置为08秒

if(key1_dang==0x05)

中断定时1设置为10秒

if(key2_dang==0x01)

中断定时2设置为02秒

if(key2_dang==0x02)

中断定时2设置为04秒

if(key2_dang==0x03)

中断定时2设置为06秒

if(key2_dang==0x04)

中断定时2设置为08秒

if(key2_dang==0x05)

中断定时2设置为10秒

}

}

首先,对于基于STM32的超声波测距传感器,我们需要了解相关的硬件接口和通信协议,然后再进行相关程序的编写。一般来说,超声波测距传感器通过GPIO口或者外部中断口与STM32相连,然后通过STM32的定时器或者计数器进行信号的计数和处理。程序中需要定义相关的GPIO口、定时器或者计数器,以及外部中断的处理程序,并且需要控制超声波发送和接收的周期,计算距离,最后将距离输出。在Proteus中,我们可以通过模拟器来模拟整个过程,并且可以通过C语言模拟器来对程序进行调试和优化。我们需要将STM32和超声波传感器连接起来,并且定义相应的IO口,定时器和中断程序。通过模拟器和调试程序,我们可以验证程序的功能,并且对程序进行调优。在具体的编写中,我们需要参考STM32的文档和数据手册,了解相关的硬件细节和软件编程技巧,最终完成整个项目。总之,在对基于STM32的超声波测距传感器进行程序编写时,需要深入了解硬件细节以及相关的通信协议,掌握相关的C语言编程技巧,并且通过模拟器和调试程序来验证和优化程序的功能。

以上就是关于stm32用一个按键控制两位数码管从00-99,代码怎么写全部的内容,包括:stm32用一个按键控制两位数码管从00-99,代码怎么写、stm32编程快速入门、请教一个stm32程序:我写了一个按键控制LED灯翻转,调试成功的程序如下:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9322807.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存