📄 power.c
字号:
#include <at89x51.h>
#include "lcd_h.h"
const char LCDnum[10]="0123456789";
unsigned int value=255,result1=0,result2=0,svalue=255,tri=263;
unsigned char y=0,z=0,j=0,true=1;
float x1=0,x2=0;
void display(void)
{
write_LCD_data(LCDnum[9-y]);
display_LCD_string(".");
write_LCD_data(LCDnum[9-z]);
display_LCD_string("V");
}
void delay_50us(unsigned int t)
{
unsigned char j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void main(void)
{
delayms(50);
init_LCD(); // 初始化LCD
clear_LCD(); //
movexy(2,5); //
value=P1; // 指拨开关设初值
svalue=value;
x1=(value+0.0)/256*100; // 数据处理
y=x1/10; //
z=(x1-y*10); //
P2=value; //往DS0832写数据
P3_0=0; //启动D/A
P3_0=1; //关闭D/A
display(); //1602显示数据
do //查询按键情况
{
if (P3_1==0) //-0.1V
{
delay_50us(200);
if (P3_1==0)
{
do
{
if (y==9&&z==9) break; //若输出为0.0V,退出
value++;
x1=(value+0.0)/256*100;
x2=(value+1.0)/256*100;
result1=(unsigned int)(x1);
result2=(unsigned int)(x2);
}while((result2-result1)!=1);
clear_LCD();
movexy(2,5);
y=x1/10;
z=(x1-y*10);
display();
P2=value;
P3_0=0;
P3_0=1;
svalue=value; //保存当前值,为切换输出类型准备
while(P3_1==0);
}
}
if (P3_2==0) //+0.1V
{
delay_50us(200);
if (P3_2==0)
{
do
{
if (y==0&&z==0) //若输出为9.9V,保持不变
{
value=4;
break;
}
value--;
x1=(value-0.0)/256*100;
x2=(value-1.0)/256*100;
result1=(unsigned int)(x1);
result2=(unsigned int)(x2);
}while((result1-result2)!=1);
clear_LCD();
movexy(2,5);
y=x2/10;
z=(x2-y*10);
display();
P2=value-1;
svalue=value-1;
P3_0=0;
P3_0=1;
while(P3_2==0);
}
}
if (P3_3==0) //方波输出按钮
{
delay_50us(200);
if (P3_3==0)
{
clear_LCD();
movexy(1,0);
display_LCD_string("SQUARE POWER");
while(P3_3==0);
do
{
P2=255; //低点平0V
P3_0=0;
P3_0=1;
delay_50us(100);
P2=128; //高电平5V
P3_0=0;
P3_0=1;
delay_50us(100);
if (P3_3==0) true=0; //再按一次方波输出返回
}while(true);
true=1;
P2=svalue;
P3_0=0;
P3_0=1;
clear_LCD();
movexy(2,5);
display();
while(P3_3==0);
}
}
if (P3_4==0) //三角波输出
{
delay_50us(200);
if (P3_4==0)
{
clear_LCD();
movexy(1,0);
display_LCD_string("TRIANGLE POWER");
while(P3_4==0); //循环输出三角波
do
{
for (j=0;j<=16;j++) //从0V到5V
{
tri=tri-8;
P2=tri;
P3_0=0;
P3_0=1;
delay_50us(100);
if (P3_4==0) break;
}
if (P3_4==0) break;
tri=tri+8;
for (j=0;j<=15;j++) //从5V到0V
{
P2=tri;
tri=tri+8;
P3_0=0;
P3_0=1;
delay_50us(100);
if (P3_4==0) break;
}
tri=263;
if (P3_4==0) break;
}while(1);
P2=svalue;
P3_0=0;
P3_0=1;
clear_LCD();
movexy(2,5);
display();
while(P3_4==0);
}
}
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -