本帖最后由 hkeg8y 于 2012-4-22 21:33 编辑
a[]={0,1,2,3}
为什么if(-1<a[0])的条件为假
而if(-1<0)却为真。
不明白-1<a[0]表达式是怎么计算的
求指点~!!谢谢
仿真.rar
(52.32 KB, 下载次数: 1)
2012-4-22 21:27 上传
点击文件名下载附件
程序和仿真
程序和仿真图
我是想设置一个加减计数器,步长、初始值和终止值可设置。
现在程序就是在设置初始值为0的时候。无法从0循环到终止值
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P1^0; //轻触开关
sbit s2=P1^1;
sbit s3=P1^2;
sbit s4=P1^3;
uint a[]={0,100,200,300,400,500,600,700,800,900,999};
uint b=0; //显示数值
uint d=0;
uint n=0;
uint k=0;
uint c=0;
uint m=0;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8, //共阳数码管数值0-9
0x80,0x90
/*0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07, //共阴数码管数值0-9
0x7f,0x6f*/
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void xianshi() //计数时数码管显示
{
P3=0x08; //共阴为0 共阳为1
P2=table[m%10];
delay(8);
P3=0x04;
P2=table[m%100/10];
delay(8);
P3=0x02;
P2=table[m%1000/100];
delay(8);
P3=0x01;
P2=table[n];
delay(8);
}
void xianshi1() //初始值设置数码管显示
{
P3=0x08; //共阴为0 共阳为1
P2=table[a[c]%10];
delay(8);
P3=0x04;
P2=table[a[c]%100/10];
delay(8);
P3=0x02;
P2=table[a[c]%1000/100];
delay(8);
P3=0x01;
P2=table[n];
delay(8);
}
void xianshi2() //步长设置时数码管显示
{
P3=0x01;
P2=table[n];
delay(8);
}
void xianshi3() //终止值设置时数码管显示
{
P3=0x08; //共阴为0 共阳为1
P2=table[a[d]%10];
delay(8);
P3=0x04;
P2=table[a[d]%100/10];
delay(8);
P3=0x02;
P2=table[a[d]%1000/100];
delay(8);
P3=0x01;
P2=table[n];
delay(8);
}
//计数
void key0()
{ xianshi();
if(s1==0)
{
delay(5);
if(s1==0)
{ m=m+n;
if(m>a[c])
m=m-a[c]+a[d];
while(!s1); //等待松开
}
}
if(s2==0)
{
delay(5);
if(s2==0)
{
m=m-n;
if(m<a[d])
m=a[c]-a[d]+m;
while(!s2); //等待松开
}
}
}
//步长设置
void key1()
{ xianshi2();
if(s1==0)
{
delay(5);
if(s1==0)
{ n++;
if(n==10)
n=0;
while(!s1); //等待松开
}
}
if(s2==0)
{
delay(5);
if(s2==0)
{
n--;
if(n==-1)
n=9;
while(!s2); //等待松开
}
}
}
//计数器初始值
void key2()
{ xianshi3();
if(s1==0)
{
delay(5);
if(s1==0)
{
d++;
if(d==11)
d=0;
m=a[d];
while(!s1); //等待松开
}
}
if(s2==0)
{
delay(5);
if(s2==0)
{
d--;
if(d==-1)
d=10;
m=a[d];
while(!s2); //等待松开
}
}
}
//计数器结束值
void key3()
{ xianshi1();
if(s1==0)
{
delay(5);
if(s1==0)
{
c++;
if(c==11)
c=0;
while(!s1); //等待松开
}
}
if(s2==0)
{
delay(5);
if(s2==0)
{
c--;
if(c==-1)
c=10;
while(!s2); //等待松开
}
}
}
void main()
{
while(1)
{
if(s3==0)
{
delay(5);
if(s3==0)
{
k++;
if(k==4)k=0;
while(!s3);
}
}
if(s4==0)
{
delay(5);
if(s4==0)
{
m=0;
d=0;
n=0;
c=0 ;
k=0;
while(!s4) ;
}
}
switch(k)
{
case 0:key0();break;
case 1:key1();break;
case 2:key2();break;
case 3:key3();break;
}
}
}
有啥区别呢?看结果看不懂!
这个是规定性的东西,不是看不看得懂的问题,就像是我规定无符号数跟有符号数不能比较,必须统一成一种类型的数
在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别
类型级别从高到低的顺序是long double ,double, float,unsigned long long, long long,unsigned long,long,unsigned int,,int。
-------------------------(摘自C Primer Plus 【页数:105】)
还有一些我懒得手打了
搜索一下就可以找到这本书了
里面讲解的很明白了
明白了,看来论坛牛人很多呀!!
一周热门 更多>