求大侠帮忙调程序
本帖最后由 巴豆定心 于 2012-10-30 11:14 编辑程序说明:key1 key2组合计数:按过key1后再按key2加计数;按过key2后再按key1减计数;key3清零;问题是仿真时出现偶尔不显示,或显示不正常,跪谢各位大侠!
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code smg_we[]={0x01,0x02,0x04};
uchar buffer[]={0,0,0};
uint k,n;
int M=10;
void csh();
void jia();
void jian();
void zhiling();
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2;
void csh()
{
TMOD= 0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
}
void delay(uintt)
{
uchar j;
while(t--);
for(j=0;j<119;j++);
}
void show()
{
uchar i;
buffer=M%100%10;
buffer=M%100/10;
buffer=M/100;
for(i=0;i<3;i++)
{
P1=smg_du];
P2=smg_we;
delay(3);
P2=0x00;
}
}
void main ()
{
csh();
key1=key2=key3=1;
k=1;n=0;
while(1)
{
//jia();
if(k==1&n==0)
{
jia();}else{
jian(); }
zhiling();
}
}
void timer0 () interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
show();
}
void jia()
{
if(key1==0)
{
delay(10);
if(key1==0){k=1;while(!key1);}
}
if(key2==0&k==1)
{
delay(10);
if(key2==0&k==1){k=0;M++;while(!key2);}
}
}
void jian()
{
if(key2==0)
{
delay(10);
if(key2==0){n=1;while(!key2);}
}
if(key1==0&n==1)
{
delay(10);
if(key1==0&n==1){n=0;M--;while(!key1);}
}
}
void zhiling()
{
if(M<0){M=0;}
if(key3==0)
{
delay(10);
if(key3==0){M=0;}
}
} 本帖最后由 Lhl 于 2012-10-30 11:31 编辑
void show()
{
uchar i;
buffer=M%100%10;
buffer=M%100/10;
buffer=M/100;
for(i=0;i<3;i++)
{
P1=smg_du;
P2=smg_we;
delay(3);
P2=0x00;
}
}
中 P1=smg_du; P2=smg_we;改成 P1=smg_du]; P2=smg_we; 试试
if(k==1&n==0)是if((k==1)&&(n==0))
奇怪, buffer,和smg_we,中数组下标显示不出来 显示函数应该没问题,系统显示不出来
&与&&有什么不一样吗? 我试过了,还是不好使啊,求救啊 主程序逻辑是不是不清啊,还有没有更好的算法啊 试试这个。 Lhl 发表于 2012-10-30 11:59 static/image/common/back.gif
试试这个。
太深奥了,我研究研究啊,呵呵,谢谢你啊 谢谢六楼的朋友,在你指导的基础上我做出来了。 巴豆定心 发表于 2012-10-30 11:39 static/image/common/back.gif
显示函数应该没问题,系统显示不出来
&与&&有什么不一样吗?
&与&&不一样。&是位与 &&是逻辑与
页:
[1]