找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1820|回复: 4
收起左侧

各位各位大佬,单片机独立按键控制数码管为什么按下的时候也要加一呢?

[复制链接]
ID:696335 发表于 2020-8-15 16:14 | 显示全部楼层 |阅读模式
#include "main.h"


sbit S7=P3^0;//加
sbit S6=P3^1;//减
sbit S5=P3^2;//清0


uchar key_code,key_counts;//按键代码,按键计数
uchar num_buff[3]={0,0,0};//数码管显示内容
uchar dula[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};


void main()
{
allint();

while(1)
{
key_contrul_smg_display();
key_contrul_smg_display_buff();
}
}


void delay(uchar i)
{
while(i--);
}


void allint()
{
P2=0X80;P0=0XFF;P2=0X00;
P2=0XA0;P0=0X00;P2=0X00;
P2=0XC0;P0=0XFF;P2=0X00;
P2=0XE0;P0=0XFF;P2=0X00;
}

void key_contrul_smg_display()
{
uchar i,j=0x80;
num_buff[0]=key_counts/100;
num_buff[1]=key_counts%100/10;
num_buff[2]=key_counts%10;
for(i=0;i<3;i++)
{
j=_crol_(j,1);
P2=0XE0;P0=dula[num_buff[ i]];P2=0X00;
P0=0XFF;
P2=0XC0;P0=j;P2=0X00;
P0=0X00;
delay(1000);
}
}

void key_contrul_smg_display_buff()
{
uchar i;
P30=1;P31=1;P32=1;
key_code=P3;
if(key_code!=0xff)
{
for(i=0;i<30;i++)
{
key_contrul_smg_display();
switch(key_code)
{
case 0xfe:if(key_counts<9)key_counts++;break;
case 0xfd:if(key_counts>0)key_counts--;break;
case 0xfb:key_counts=0;break;
}
key_code=0xff;
}
}
}
回复

使用道具 举报

ID:701852 发表于 2020-8-15 19:33 | 显示全部楼层
你是什么意思?我不太懂
回复

使用道具 举报

ID:696335 发表于 2020-8-15 19:41 | 显示全部楼层
这个是代码是独立按键控制数码管加减的
回复

使用道具 举报

ID:695930 发表于 2020-8-15 21:06 | 显示全部楼层
因为你按下的时候key_counts++自加,数码管显示是把key_counts这个数字分别显示如这个num_buff[2]=key_counts%10;然后接着P0=dula[num_buff[ i]];所以按下的时候显示也会+1。再说了你显示的不就是按下的次数吗,按下不加一怎么检验你按下单片机是否收到,加1是为了给你现象,知道单片机收到了你的按键信息。
回复

使用道具 举报

ID:578842 发表于 2020-8-16 09:05 | 显示全部楼层
初学者请教,上个程序中 allint();是什么意思呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表