如題,只求一個仿真圖就可以!
程序如下:
#include <reg52.h>
#include "i2c.h"
#define AddWr 0x90 //寫數據地址
#define AddRd 0x91 //讀數據地址
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
sbit P1_3=P1^3;
sbit P1_7=P1^7;
sbit P3_4=P3^4;
sbit beep=P2^3;
int a,b,c,d,e,f,frq,range,t,temp;
double range2;
uint zhouqi;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint x)
{
int i,j; //延時xms程序
for(i=x;i>0;i--)
for(j=112;j>0;j--);
}
void delay_us(uint time) //延時xus程序
{
while(time--);
}
extern bit ack;
bit WriteDAC(unsigned char dat);
uchar code sintab[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
};
uchar code fangbotab[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
uchar code juchitab[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
};
uchar code sanjiaotab[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
};
void display(int a,int b,int c,int d,int e,int f)
{
duan=1;
P0=table[a];
duan=0;
wei=1;
P0=0xfe;
wei=0;
delay(1);
duan=1;
P0=table[b];
duan=0;
wei=1;
P0=0xfd;
wei=0;
delay(1);
duan=1;
P0=table[c];
duan=0;
wei=1;
P0=0xfb;
wei=0;
delay(1);
duan=1;
P0=table[d];
duan=0;
wei=1;
P0=0xf7;
wei=0;
delay(1);
duan=1;
P0=table[e]+0x80;
duan=0;
wei=1;
P0=0xbf;
wei=0;
delay(1);
duan=1;
P0=table[f];
duan=0;
wei=1;
P0=0x7f;
wei=0;
delay(1);
}
void fangbo()
{
int i;
while(1)
{
P1_3=1;
delay_us(zhouqi);
P1_3=0;
delay_us(zhouqi);
for(i=0;i<64;i++)
{
WriteDAC((fangbotab[i]/5)*range2);
}
// beep=1;
}
}
void sanjiaobo()
{
int i;
while(1)
{
for(i=0;i<64;i++)
{
WriteDAC((sanjiaotab[i]/5)*range2);
}
}
}
void juchibo()
{
int i;
while(1)
{
for(i=0;i<64;i++)
{
WriteDAC((juchitab[i]/5)*range2);
}
}
}
void zhengxianbo()
{
int i;
while(1)
{
for(i=0;i<64;i++)
{
WriteDAC((sintab[i]/5)*range2);
}
}
}
void rjia1()
{
range=range+10;
if(range>=50)
{
range=50;
}
}
void rjian1()
{
range=range-10;
if(range<=0)
{
range=0;
}
}
void rjia2()
{
range++;
if(range>=50)
{
range=50;
}
}
void rjian2()
{
range--;
if(range<=0)
{
range=0;
}
}
int jianpan()
{
P3=0x0f;
if(P3!=0x0f)
{
P3=0xfe;
if(P3!=0xfe)
{
switch(P3)//第一行鍵盤,切換模式,分別對應1,2,3,4鍵
{
case 0xee:fangbo();break;
case 0xde:sanjiaobo();break;
case 0xbe:juchibo();break;
case 0x7e:zhengxianbo();break;
}
}
P3=0xfd;
if(P3!=0xfd)
{
P3=0xfd;
delay(10);
if(P3!=0xfd)
{
switch(P3)//第二行鍵盤,調頻率?
{
case 0xed:frq=10;break;
case 0xdd:frq=100;break;
case 0xbd:frq=500;break;
case 0x7d:frq=1000;break;
}
}
}
P3=0xfb;
if(P3!=0xfb)
{
P3=0xfb;
delay(10);
if(P3!=0xfb)
{
switch(P3)//第三行鍵盤,調峰峰值
{
case 0xeb:rjia1();break;
case 0xdb:rjian1();break;
case 0xbb:rjia2();break;
case 0x7b:rjian2();break;
}
}
while(P3!=0xfb);
}
}
return frq;
return range;
}
void init()
{
frq=500;
range=20;
}
void fuzhi()
{
a=frq/1000;
b=frq%1000/100;
c=frq%100/10;
d=frq%10;
e=range/10;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
|