![](http://hiphotos.baidu.com/%C8%ED%D3%B2%BC%E6%D0%DE/pic/item/ba82c28a734571ada5c27219.jpg)
再怎么设计也全是模拟的,哎,原理图
下面是源代码:
#include <reg52.h>
unsigned char wei[5]={0x01,0x02,0x04,0x08,0x10};
unsigned char table0[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char table1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
sbit sound=P3^0;
sbit start=P3^1;
sbit button=P3^2;
sbit stop=P3^4;
sbit led=P3^5;
unsigned char tmp=0x00,a[5];
unsigned char cishu=0;
float s,cnow;
int flag=0;
int chaoflag=0;
void init()
{
EX0=1;
EA=1;
}
void delay()
{
int i;
for(i=0;i<500;i++);
}
void longdelay()
{
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<500;j++);
}
}
void display1()
{
int i;
for(i=0;i<5;i++)
{
P2=wei[i];
if(i==3)
{
P0=table1[a[i]];
}
else
{
P0=table0[a[i]];
}
longdelay();
}
}
void display2()
{
int i;
if(cishu<10)
{
for(i=0;i<1;i++)
{
P2=wei[i];
P0=table0[cishu];
longdelay();
}
}
}
void shan()
{
int i,j;
for(j=0;i<2;j++)
{
led=0;
for(i=0;i<450;i++);
led=1;
for(i=0;i<450;i++);
}
}
void ning()
{
int i,j,k;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
sound=0;
for(k=0;k<90;k++);
sound=1;
for(k=0;k<90;k++);
}
for(j=0;j<100;j++)
{
sound=0;
for(k=0;k<45;k++);
sound=1;
for(k=0;k<45;k++);
}
}
}
void duan()
{
stop=0;
}
void tong()
{
stop=1;
}
void process()
{
s=5.0/256.0;
cnow=s*tmp;
cnow=cnow*600;
a[0]=(unsigned char)(cnow/1000);
a[1]=(unsigned char)(cnow/100-a[0]*10);
a[2]=(unsigned char)(cnow/10-a[0]*100-a[1]*10);
a[3]=(unsigned char)(cnow-a[0]*1000-a[1]*100-a[2]*10);
a[4]=(unsigned char)(cnow*10-a[0]*10000-a[1]*1000-a[2]*100-a[3]*10);
if(cnow>=2250&&cnow<2700)
{
shan();
ning();
tong();
}
else if(cnow>=2700)
{
shan();
ning();
duan();
chaoflag=1;
}
else
{
tong();
}
}
void read()
{
delay();
start=1;
delay();
start=0;
tmp=P1;
}
/*int detect()
{
int fflag;
fflag=flag;
if(button==0&&fflag==0)
{
delay();
if(button==0&&fflag==0)
{
fflag=1;
}
}
if(button==0&&fflag==1)
{
delay();
if(button==0&&fflag==1)
{
fflag=0;
}
}
return fflag;
}
*/
main()
{
init();
while(1)
{
read();
// flag=detect();
if(flag==0)
{
display1();
}
else
{
display2();
}
process();
if(chaoflag==1)
{
cishu++;
}
chaoflag=0;
}
}
void int0() interrupt 0 using 1
{
int fflag;
if(button==0)
{
delay();
fflag=flag;
if(button==0&&fflag==0)
{
fflag++;
flag=fflag;
return ;
}
if(button==0&&fflag>=1)
{
fflag=0;
flag=fflag;
return ;
}
}
}
还有20多天了,希望能做20多个东西吧。