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<reg52.h>

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=0P0_1=0//显示00

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

while(1)

{

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

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

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

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

P0_0=1P0_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=0break

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

default: break

}

}

}

}

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

{ unsigned char i

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

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

}

5.9

百度文库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<reg52.h>

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

proteusstm32利用独立按键数码管显示数字

实验环境

本次实验是通过Proteus+MDK一起模拟完成的。Proteus模拟实际电路,MDK编译代码。Proteus版本是8.13,MDK版本是5.21。需要注意的是,Proteus需要安装8.8以上版本,器件库里面要支持STM32F103C6。

• 实验目的

通过一个按键控制数码管0~9循环显示,并且把对应数字发给串口。通过接收串口数据,控制数码管0~9循环显示。实验目的,学会按键检测方法,这边用的是开源库multi_button,学会串口怎么用。

Proteus硬件电路

虚拟串口示意

• 主控:

STM32F103C6(本来想用C8的,但是Proteus只有C6,本质上只有Flash和SRAM大小的区别,所以没有必要纠结)

• 时钟:

没有用外部晶振,因为Proteus只支持一种时钟树,所以这里采用内部晶振,做实验够了,内部晶振配置为40MHz。

• 复位电路:

复位电路如图,包含了上电复位电路一个10K电阻(图上用的是100K实际应该都是可以的)+一个100nF电容。按键复位电路,包含了一个自复位按键,按下后,RST管脚就会短路到GND,MCU就会复位。

•电路上还要接一个Proteus虚拟串口,在自己电脑上也要用虚拟串口软件虚拟一对串口出来,上图所示,PC端我们用的是COM5,那么Proteus端我们用COM4。

• IO说明:

→ 我们利用PA0~PA6来控制7段数码管,高电平点亮;

→PB0用作LED的控制,指示程序状态;

→PB4作为按键输入状态读取;

→PA9,PA10是串口输入输出;

2.代码概述

目录结构

• 代码目录概述:

→APP文件夹:主要包含应用函数的.C文件。

→BSP文件夹:主要包含底层硬件驱动的.C文件。

→MDK-ARM文件夹:主要包含STM32的启动的.S文件。

→StdPeriph_Driver文件夹:主要包含ST官方提供的标准外设驱动.C文件(不是HAL库哦)。

→CMSIS文件夹:系统内核配置文件,标准库自带的。

→按键驱动使用的是multi_button。

→串口接收0x09这个代码1次就会反转数码管1次,0~9循环。

→按键按1次就会反转数码管1次,0~9循环。

→按键按下LED灯亮,松开灭。

【不用开发板学习STM32】串口收发+按键控制数码管显示(文末获取代码及工程文件)

要想实现你说的 *** 作

搭建好平台

初始化一个定时器用于获取按键值(添加防抖动效果处理)

跑马灯的几个IO初始化配置

数码管显示初始化以及显示程序

蜂鸣器初始化及其程序

主函数

int main(void)

{

  //按键定时器初始化

  // 跑马灯IO初始化

  // 数码管初始化

  // 蜂鸣器初始化

 uint16_t  keyId

 while(1)

 {

        keyId = GetKeyId()// GetKeyId函数是你定时器获取的按键值

         switch(keyId)

 {

             key1:   // 相应处理事件

.

.

.

break

.

.

.等等。。。。

}

}


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

原文地址: http://outofmemory.cn/yw/7755560.html

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

发表评论

登录后才能评论

评论列表(0条)

保存