标题:
这个程序,编译没有错误.输入一位数据没事,第二位就乱了.哪位大神帮忙看看.谢谢!
[打印本页]
作者:
lch121516
时间:
2020-2-8 14:49
标题:
这个程序,编译没有错误.输入一位数据没事,第二位就乱了.哪位大神帮忙看看.谢谢!
#include<reg52.h>
uchar dx[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; //声明全局变量(段选)
uchar wx[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F}; //声明全局变量(位选)
void jzkey(); //声明矩阵键盘函数
uint sj,sj1,sj2; //声明(unsigned int)全局变量:数据,数据1,数据2.
uchar bzw,s[5]; //声明(unsigned char)全局变量:标志位,数.
/*****延时函数*****/
void delay1ms(c) //误差 0us
{
uchar a,b,d; //声明局部变量:a,b,d.
for(d=c;d>0;d--)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
/****数据显示*****/
sjxs(uint a)
{
uchar b[8];
b[7]=a/100000;b[6]=a/100000%10;b[5]=a/10000%10;b[4]=a/1000%10;
b[3]=a/1000%10;b[2]=a/100%10;b[1]=a/10%10;b[0]=a%10; //定义数据位
P2=dx[b[0]]; P1=wx[0];delay1ms(10); //定义P2口为段选,P1口为位选,延时10ms.
if(a>=10){P2=dx[b[1]];P1=wx[1];delay1ms(1);} //十位
if(a>=100){P2=dx[b[2]]; P1=wx[2];delay1ms(1);} //百位
if(a>=1000){P2=dx[b[3]]; P1=wx[3];delay1ms(1);} //千位
if(a>=10000){P2=dx[b[5]]; P1=wx[4];delay1ms(1);} //万位
if(a>=100000){P2=dx[b[6]]; P1=wx[4];delay1ms(1);} //十万
if(a>=1000000){P2=dx[b[7]]; P1=wx[4];delay1ms(1);} //百万
if(a>=10000000){P2=dx[b[8]]; P1=wx[4];delay1ms(1);} //千万
}
void main()
{
while(1)
{
jzkey(); //调用矩阵按键函数
sjxs(sj); //调用数据显示函数
}
}
/******数据移位*****/
void yw()
{
s[7]=s[6]=s[5]=s[4]=s[3]=s[2]=s[1]=s[0];
}
/******数据合成*****/
void sjhc()
{
sj=s[7]*10000000+s[6]*1000000+s[5]*100000+s[4]*10000+s[3]*1000+s[2]*100+s[1]*10+s[0]*1;
}
/*******数据复位*****/
void fw()
{
sj=s[4]=s[3]=s[2]=s[1]=s[0]=0;
}
/*****矩阵按键*****/
void jzkey()
{
P3=0XFE;if(P3!=0XFE) delay1ms(10);P3=0XFE;if(P3!=0XFE)
{
if(P3==0XEE){yw();s[0]=1;sjhc();}
if(P3==0XDE){yw();s[0]=2;sjhc();}
if(P3==0XBE){yw();s[0]=3;sjhc();}
if(P3==0X7E){yw();s[0]=4;sjhc();}delay1ms(500);}
P3=0XFD;if(P3!=0XFD) delay1ms(10);P3=0XFD;if(P3!=0XFD)
{
if(P3==0XED){yw();s[0]=5;sjhc();}
if(P3==0XDD){yw();s[0]=6;sjhc();}
if(P3==0XBD){yw();s[0]=7;sjhc();}
if(P3==0X7D){yw();s[0]=8;sjhc();}delay1ms(500);}
P3=0XFB;if(P3!=0XFB) delay1ms(10);P3=0XFB;if(P3!=0XFB)
{
if(P3==0XEB){yw();s[0]=9;sjhc();}
if(P3==0XDB){yw();s[0]=0;sjhc();}
if(P3==0XBB){fw(),sj1,sj2;}
if(P3==0X7B)
{
sj2=sj;
if(bzw==1)sj=sj1+sj2; //设置(+,-,*,/)
if(bzw==2)sj=sj1-sj2;
if(bzw==3)sj=sj1*sj2;
if(bzw==4)sj=sj1/sj2;
bzw=0;}
delay1ms(500);}
P3=0XF7;if(P3!=0XF7) delay1ms(10);P3=0XF7;if(P3!=0XF7)
{
if(P3==0XE7){bzw=1;sj1=sj;fw();}
if(P3==0XD7){bzw=2;sj1=sj;fw();}
if(P3==0XB7){bzw=3;sj1=sj;fw();}
if(P3==0X77){bzw=4;sj1=sj;fw();}delay1ms(500);}
}
作者:
csmyldl
时间:
2020-2-9 00:58
s数组只定义了5个却使用了8个,sj只定义了uint,却要存放8位十进制,不发生错误才怪
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1