📄 jf.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define lcdbus P2
#define dabus P1
sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;
sbit p34=P3^4;
sbit p35=P3^5;
sbit p36=P3^6;
sbit p37=P3^7;
sbit rs=P0^0;
sbit rw=P0^1;
sbit ep=P0^2;
sbit sw=P0^3; //调零所用的p口
uchar dis[]="0123456789";
uchar disf[]="f=200Hz";
uchar disvpp[]="vpp=1.0v";
uchar dism[]="1:1";
uchar f=100,vpp=6,mh=1,ml=1; //f频率,vpp峰峰值,mh:ml为上升下降比,1<mh/l<4
uchar vout; //vout 输出p口值,即电流值
uint mkb; //脉宽比
uint dsjs; //辅助定时计数
uint vtu,vtd; //由f,vpp,vpp,m决定的上升下降的时间
uint iuout,idout;
uchar zduh,zdul,zddh,zddl,voutu,voutd; //定时器及输出辅助
uchar dsqjs; //辅助计数
uchar dsqcon=0; //控制
bit mkbcon;
//以上值全部为单片机中的值,与实际输出值保持比例关系
uchar n=0;
uchar vppp;
bit updownc;
uint vtuu,vtdd;
void delay() //延时
{
uchar i;
for(i=0;i<5;i++)
{}
}
/*LCD延时子程序(ms)*/
void delayms(uchar ms)
{
uchar i;
while(ms--)
{
for(i=0; i<250;i++)
{
delay();
}
}
}
/*测试LCD忙碌状态*/
bit lcdbz()
{
bit result;
rs=0;
rw=1;
ep=1;
delay();
result =(bit)(lcdbus&0x80);
ep=0;
return result;
}
/*写指令数据到LCD子程序*/
void lcdwcmd(uchar cmd)
{
while(lcdbz());//判断LCD是否忙碌
rs=0;
rw=0;
ep=0;
delay();
lcdbus=cmd;
delay();
ep=1;
delay();
ep=0;
}
/*设定显示位置子程序*/
void lcdpos(uchar pos)
{
lcdwcmd(pos|0x80);
}
/*写入显示数据到LCD子程序*/
void lcdwdat(uchar dat)
{
while(lcdbz());//判断LCD是否忙碌
rs=1;
rw=0;
ep=0;
lcdbus=dat;
delay();
ep=1;
delay();
ep=0;
}
/*LCD初始化子程序*/
void lcdinit()
{
lcdwcmd(0x38);
delayms(1);
lcdwcmd(0x0c);
delayms(1);
lcdwcmd(0x06);
delayms(1);
lcdwcmd(0x01);
delayms(1);
}
void szzh() //数值的显示转换
{uint i,j;
uchar a;
i=f; //f disf[]="f=000Hz";
for(j=0;j<=2;j++)
{
if(i!=0)
{a=i%10;
i=i/10;
disf[4-j]=dis[a];
}
else
{
if(j==0)
disf[4-j]='0';
else
disf[4-j]=' ';
}
}
i=vpp*5; //vpp disvpp[]="vpp=0.0v" vpp=6时为3v
disvpp[4]=dis[vpp];
// distm[]="mh:ml";
dism[0]=dis[mh];
dism[2]=dis[ml];
}
void xssz() /*数据的显示*/
{
uchar i=0;
szzh();
delayms(10);
lcdpos(0x00);//设置显示位置
i=0;
while(disf[i]!='\0')
{
lcdwdat(disf[i]);//显示字符
i++;
}
lcdpos(0x09);// 设置显示位置
i=0;
while(dism[i]!='\0')
{
lcdwdat(dism[i]);// 显示字符
i++;
}
lcdpos(0x40);// 设置显示位置
i=0;
while(disvpp[i]!='\0')
{
lcdwdat(disvpp[i]);// 显示字符
i++;
}
delayms(50);
}
void test() //测试
{
uchar i;
uchar test2[]="waiting";
lcdinit();// 初始化LCD
delayms(10);
lcdpos(0x43);// 设置显示位置
i=0;
while(test2[i]!='\0')
{
lcdwdat(test2[i]);// 显示字符
i++;
}
delayms(20);
}
/*清屏*/
void clr()
{
uchar i;
lcdpos(0x00);//设置显示位置
for(i=0;i<16;i++)
lcdwdat(' ');
lcdpos(0x40);// 设置显示位置
for(i=0;i<16;i++)
lcdwdat(' ');
}
////////键盘
void jianpan()
{
if(p35==0) //1<mh/l<4
{
while(1)
{
if(p35==1)
{
if(ml==1&&mh<4)
mh=mh+1;
else
{
if(mh==1)
ml=ml-1;
}
break;
}
}
}
if(p32==0)
{
while(1)
{
if(p32==1)
{
if(mh==1&&ml<4)
ml=ml+1;
else
{
if(ml==1)
mh=mh-1;
}
break;
}
}
}
if(p34==0) //f频率
{
while(1)
{
if(p34==1)
{
if(50<=f&&f<200)
f=f+50;
if(10<=f&&f<50)
f=f+40;
if(5<=f&&f<10)
f=f+5;
if(f<5)
f=f+1;
break;
}
}
}
if(p31==0)
{
while(1)
{
if(p31==1)
{
if(1<f&&f<=5)
f=f-1;
if(5<f&&f<=10)
f=f-5;
if(10<f&&f<=50)
f=f-40;
if(100<=f)
f=f-50;
break;
}
}
}
if(p33==0) //vpp上升最大值 "vpp=0v" vpp=6时为vh=3v
{
while(1)
{
if(p33==1)
{
if(vpp<6)
vpp=vpp+1;
break;
}
}
}
if(p30==0)
{
while(1)
{
if(p30==1)
{
if(vpp>2)
vpp=vpp-1;
break;
}
}
}
}
void main()
{
uint aaa;
test(); // 测试
delayms(200);
clr(); //清屏
IE=0x82;
TMOD=0x01;
TR0=1;
while(1)
{
jianpan();
if(f>40)
{
sw=1;
}
else
{
sw=0;
}
aaa=vpp*f;
idout=aaa*(mh+ml)/ml;
iuout=aaa*(mh+ml)/mh;
vtu=50000/f/(mh+ml)*mh*20; //
vtd=50000/f/(mh+ml)*ml*20;
zduh=255-vtu/256;
zdul=255-vtu%256;
zddh=255-vtd/256;
zddl=255-vtd%256;
voutu=128+iuout/50;
voutd=128-idout/50;
vtuu=25000/f/(mh+ml)*mh/vpp;
vtdd=25000/f/(mh+ml)*ml/vpp;
vppp=vpp*20;
xssz();
}
}
void time0 (void) interrupt 1
{
if(f>20)
{
if(dsqcon)
{
TH0=zduh;
TL0=zdul;
dabus=voutu;
dsqcon=0;
}
else
{
TH0=zddh;
TL0=zddl;
dabus=voutd;
dsqcon=1;
}
}
else
{
if(vout>=vppp+128)
{
updownc=1;
}
else
{if(vout<=128-vppp)
{
updownc=0;
}}
if(updownc==0)
{
vout++;
TH0=255-vtuu/256;
TL0=255-vtuu%256;
}
else
{
vout--;
TH0=255-vtdd/256;
TL0=255-vtdd%256;
}
dabus=vout;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -