zran 发表于 2022-11-6 20:21:22

组合按键:四个按键实现个十百千每个位逐一增加减少,还要能清零

#include<reg51.h>//我只能实现个位和十位的
#include<seg.h>//下面有seg包含内容
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
sbit beep=P2^5;
void main()
{
        int number=0;
        while(1)
        {
                displayInt(number);
                if(!K1)
                {
                        delay_ms(5);
                        if(!K4&&!K1)number+=10;
                        else number++;
                        while(!K1)
                                displayNzero(number);
                        delay_ms(5);
                }
                if(!K2)
                {
                        delay_ms(5);
                        if(!K4&&!K2)number-=10;
                        else number--;
                        while(!K2)
                                displayNzero(number);
                        delay_ms(5);
                }
                if(!K3)number=0;
        }
}
// k3+k4=+100,k3+k2=-100,k3+k1=+1000,k2+k1=-1000
//seg
#ifndef __SEG_H__
#define __SEG_H__
///////////////////////
#include <reg51.h>
unsigned char code seg_coma[]={0xc0,0xf9,0xa4,0xb0,0x99,
                               0x92,0x82,0xf8,0x80,0x90};
unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7};//λѡÂë
// oáÃ뼶Ñóê±oˉêy
void delay_ms(unsigned int time)
{
int i,j;
for(i=0;i<=time;i++)
for(j=0;j<=825;j++);
}
// ΢Ã뼶Ñóê±oˉêy
void delay_us(unsigned int time)
{
int i,j;
for(i=0;i<=time;i++)
for(j=0;j<=8;j++);
}
//êyÂë1ü2aêÔoˉêy£¬ËùóDμĶÎμãááéá˸èy′Î
void SEGTest()
{
int i;
for(i=0;i<3;i++)
{
P0=0;
P2=0XF0;
delay_ms(500);
P2=0XFF;
delay_ms(500);
}
}
/*************ÏÔê¾Õûêy£¬¸ßλ210********************/
void displayInt(int D)
{
int n;
for(n=3;n>=0;n--)
{
   P0=seg_coma;
   P2=wei;
   delay_us(2);
   P2=0xff;
   delay_us(2);
   D/=10;
}
}
/*************ÏÔê¾Õûêy£¬¸ßλÃe0********************/
void displayNzero(int D)
{
int n;
for(n=3;n>=0;n--)
{
   P0=seg_coma;
   P2=wei;
   delay_us(2);
   P2=0xff;
   delay_us(2);
   D/=10;
   if(D==0)        break;
}
}
/******D¡êyÏÔê¾£¬ËÄλóDD§êy×Ö************/
void displayFloat(float Data)
{
int temp,temp_Z;
float temp1;
if(Data<10.0)
{
   temp1=Data;
   temp_Z=Data;
   temp1*=1000;//1.234*1000=1234
   temp=temp1;
   displayInt(temp);
   P0=seg_coma-0X80;
   P2=wei;
   delay_us(2);
   P2=0XFF;
   delay_us(2);
   
}
if(Data>=10.0&&Data<100.0)
{
   temp1=Data;
   temp_Z=Data;
   temp1*=100;//12.34*100=1234
   temp=temp1;
   displayInt(temp);
   P0=seg_coma-0X80;
   P2=wei;
   delay_us(2);
   P2=0XFF;
   delay_us(2);
}
if(Data>=100.0&&Data<1000.0)
{
   temp1=Data;
   temp_Z=Data;
   temp1*=10;//123.4*10=1234
   temp=temp1;
   displayInt(temp);
   P0=seg_coma-0X80;
   P2=wei;
   delay_us(2);
   P2=0XFF;
   delay_us(2);
}
if(Data>=1000.0)
{
   temp=Data;
   displayInt(temp);
}//*/
}
/////////Ôú4λêyÂë1üéÏÏÔê¾ËÄλêy×ÖμÄ×Ö·û′®£¬èç¡°1234¡±»òÕß¡°12.34¡±/////////////
void displayString(unsigned char *string)
{
int i,flag;
int j=3;
for(i=0;i<5;i++) //"1.234"
{
if(string=='.') {flag=1;break;}
else flag=0;
}
if(flag==0)
   {
      for(i=0;i<4;i++)
               {
               P0=seg_coma-0x30]; //Ëí¶ÎÂë
               P2=wei;       
               delay_us(2);
               P2=0xFF;
               delay_us(2);
               }
       
   }
else
{
          for(i=4;i>=0;i--) //"1.234"
          {          
          if(string=='.')
          {i--;P0=seg_coma-0x30]-0x80;}
          else P0=seg_coma-0x30];
          P2=wei;
          j--;       
          delay_us(2);
          P2=0xFF;
          delay_us(2);
      }
}
}
#endif

zran 发表于 2022-11-7 10:26:14

#include <reg51.h>
#include <seg.h>
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
sbit beep=P2^5;
void main()
{
        int number=0;
while(1)
        {       
   displayNzero(number);
       if(!K1)
       {
                delay_ms(5);
               if(!K1&&!K4)number+=10;
           else number++;
          while(!K1)
                        displayNzero(number);
                delay_ms(5);
       }
       if(!K2)
       {
               delay_ms(5);
               if(!K2&&!K4)number+=100;
           else number--;
               while(!K2)
                       displayNzero(number);
               delay_ms(5);
       }
   if(!K3)
       {
                delay_ms(5);
               if(!K3&&!K4)number+=1000;
           else number=0;
                while(!K3)
                        displayNzero(number);
                delay_ms(5);
       }
        }
}

cmjx 发表于 2022-11-7 17:17:07

兄弟,代码不是这样写的。奉劝你放弃STC吧。

zran 发表于 2022-11-10 10:25:38

cmjx 发表于 2022-11-7 17:17
兄弟,代码不是这样写的。奉劝你放弃STC吧。

那你说说?我不会才问的
页: [1]
查看完整版本: 组合按键:四个按键实现个十百千每个位逐一增加减少,还要能清零