刚学单片机,碰到个问题,通过按钮和复位控制数管数字+1,但是仿真里测试,按钮加0,1,7时正常,但是加到其余次数时,第一位数会变成8,仿真重新画了,程序看了又看,眼拙没发现啥问题,头都懵了,求解救!
#include
#define uint unsigned int
#define uchar unsigned char
sbit key1=P1^0;
sbit key2=P1^1;
sbit q=P3^0;
sbit b=P3^1;
sbit s=P3^2;
sbit g=P3^3;
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X89};
void delayms(uint k);
void main()
{
uint num;
while(1)
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
while(key1==0)
{
q=1;
P2=tab[num/1000];
delayms(5);
q=0;
b=1;
P2=tab[(num/100)%10];
delayms(5);
b=0;
s=1;
P2=tab[(num/10)%10];
delayms(5);
s=0;
g=1;
P2=tab[num%10];
delayms(5);
g=0;
}
num++;
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
while(key2==0)
{
q=1;
P2=tab[num/1000];
delayms(5);
q=0;
b=1;
P2=tab[(num/100)%10];
delayms(5);
b=0;
s=1;
P2=tab[(num/10)%10];
delayms(5);
s=0;
g=1;
P2=tab[num%10];
delayms(5);
g=0;
}
num=0;
}
}
q=1;
P2=tab[num/1000];
delayms(5);
q=0;
b=1;
P2=tab[(num/100)%10];
delayms(5);
b=0;
s=1;
P2=tab[(num/10)%10];
delayms(5);
s=0;
g=1;
P2=tab[num%10];
delayms(5);
g=0;
}
}
void delayms(uint k)
{
uint i,j;
for(i=0;ifor(j=0;j<125;j++);
}
没做段消隐,在每位打开前添加段消隐,依据数码管类型消隐值也不同或0或ff。
不知道你这个问题是否已经解决, 如果还没有解决的话:ADXL345是一款小尺寸、薄型、低功耗、完整的三轴加速度计,提供经过信号调理的电压输出。
说明:CS接高电平则选择IIC通信,反之则SPI通信。SDO(地址引脚)接高电平,根据手册器件的7位I2C地址是0x1D,后面跟上读取/写位(R/W),则写寄存器为0x3A,读寄存器为0x3B;接低电平,则7位I2C地址是0x53,同理,跟上读写标志位后写寄存器为0xA6,读寄存器为0xA7;