⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shiboqi.c

📁 自制示波器的实现
💻 C
字号:
#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);
////////////////////////////////////
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -