组合按键:四个按键实现个十百千每个位逐一增加减少,还要能清零
#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 #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);
}
}
} 兄弟,代码不是这样写的。奉劝你放弃STC吧。 cmjx 发表于 2022-11-7 17:17
兄弟,代码不是这样写的。奉劝你放弃STC吧。
那你说说?我不会才问的
页:
[1]