#include "yejing320240_1.h"
#include "math.h"
uint i1,i2;
uchar c1,c2;
uchar vpp;
uchar va;
idata uchar dat[200];
void dotplay(uchar l,uint c);
void board();
void displayall();
void axis();
void timeline();
void get_v_average();
void get_v_pp();
uchar reverse8(uchar c);
void delay500us(unsigned int t);
void main (void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
EA=1;
ES=1;
REN=1;
RI=0;
TI=0;
i1=0;
delay500us(100);
initial();
delay500us(1);
clear();
delay500us(1);
board();
while(1)
{
if(i1>=200)
{
ES=0;
i1=0;
displayall();
axis();
get_v_average();
get_v_pp();
ES=1;
}
}
}
void displayall()
{
delay500us(100);
initial();
delay500us(1);
clear();
delay500us(1);
board();
cmdwrite(0,0xc5);//图形
cmdwrite(0x10,0x60);
/* for(c1=0;c1<200;c1++)
{
dat[c1]=(unsigned char) (60*cos(3.1416/50*c1)+60);
dotplay(dat[c1],c1);
}
for(c1=0;c1<200;c1++)
{
dat[c1]=(unsigned char) (60*cos(3.1416/50*c1)+60);
dotplay(dat[c1]+120,c1);
}*/
for(c1=0;c1<200;c1++)
{
dotplay(dat[c1],c1);
if(c1>0&&dat[c1]>dat[c1-1])
{
for(c2=dat[c1]-dat[c1-1];c2>0;c2--)
dotplay(dat[c1-1]+c2,c1-1);
}
else if(c1>0&&dat[c1]<dat[c1-1])
{
for(c2=dat[c1-1]-dat[c1];c2>=0&&c2!=255;c2--)
dotplay(dat[c1]+c2,c1-1);
}
}
}
void dotplay(uchar l,uint c)
{
uchar k,j,tempc,dot;
cmdwrite(0x00,0xc5);
tempc=c/8;
k=c%8;
j=1;
for(;k>0;k--)
j=j*2;
dot=reverse8(j);
// gotoxy(tempc,120-l);
// datawrite(dot|dataread(tempc,120-l));//原来双通道的通道1的波形
gotoxy(tempc,239-l-30);
datawrite(dot|dataread(tempc,239-l-30));//单通道波形
}
void board()
{
cmdwrite(0,0xcd);
gotoxy(25,0x10);
printstr("简易存储示波器",0);
gotoxy(28,0x30);
printstr("Ch1",0);
gotoxy(28,0x40);
printstr("Vp= mV",0);
gotoxy(28,0x50);
printstr("Va= mV",0);
gotoxy(28,0x60);
printstr("f = Hz",0);
gotoxy(28,0x70);
printstr("Ch2",0);
gotoxy(28,0x80);
printstr("Vp= 00.00 V",0);
gotoxy(28,0x90);
printstr("Va= 00.00 V",0);
gotoxy(28,0xa0);
printstr("f = Hz",0);
gotoxy(28,0xc0);
printstr("By 陈剑武",0);
gotoxy(28,0xd0);
printstr(" 杨伟权",0);
gotoxy(28,0xe0);
printstr(" 杨德胜",0);
}
unsigned char reverse8( unsigned char c )
{
c=(c&0x55)<<1|(c&0xAA)>>1;
c=(c&0x33)<<2|(c&0xCC)>>2;
c=(c&0x0F)<<4|(c&0xF0)>>4;
return c;
}
void communicate(void) interrupt 4
{
RI=0;
dat[i1]=SBUF;
i1++;
}
void axis()
{
for(c2=0;c2<200;c2++)
// dotplay(60,c2);
// dotplay(120,c2);
dotplay(90,c2);
}
void timeline()
{
}
void get_v_average()
{
uint tempv=0;
uint iva=0;
for(c1=0;c1<200;c1++)
tempv=tempv+dat[c1];
va=(uchar)(tempv/200.0);
iva=(int)(va/198.0*5000.0);
////////////////////////////////
cmdwrite(0,0xcd);//文字模式
cmdwrite(0x10,0x68);//cursor off and auto move
gotoxy(32,0x50);
datawrite(iva/1000+0x30);
datawrite(iva%1000/100+0x30);
datawrite(iva%100/10+0x30);
datawrite(iva%10+0x30);
///////////////////////////////////
}
void get_v_pp()
{
uchar max=0,min=255;
uint ivp=0;
for(c1=0;c1<200;c1++)
{
if(dat[c1]>max)
max=dat[c1];
if(dat[c1]<min)
min=dat[c1];
}
vpp=max-min;
ivp=(int)(vpp/198.0*5000.0);
//////////////////////////////////////
cmdwrite(5,0xcd);//文字模式
cmdwrite(0x10,0x68);//cursor off and auto move
gotoxy(32,0x40);
datawrite(ivp/1000+0x30);
datawrite(ivp%1000/100+0x30);
datawrite(ivp%100/10+0x30);
datawrite(ivp%10+0x30);
////////////////////////////////////
}