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

📄 power.c

📁 51单片机控制简易数控直流电源源码加仿真。
💻 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 + -