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

📄 menu.c

📁 基于单片机控制的数控电流源
💻 C
字号:
//===========================================================================================================
//12864液晶模块显示程序  v1.0 for 数控直流恒流源
//2005年9月7日
//void LCD_Ini()   					//LCD初始化程序
//void LCD_Set_Ini()				//LCD设定初始化程序,光标闪烁
//void LCD_Set_Shift()				//LCD光标移动
//void LCD_Set_Num()				//LCD选定数字加减
//void LCD_Cursor_Flash()			//LCD光标闪烁
//void LCD_Set_Finish()				//LCD设定结束,去光标
//void LCD_AD_Num()					//LCD显示测量值
//void LCD_Warning()                //LCD显示报警
//
//===========================================================================================================
volatile unsigned int *P_Watchdog_Clear=(unsigned int*)(0x7012);

extern LCD_CLEAR();
extern LCD_INPUT(); 
extern INPUT_ALL_SCREEN();
extern LCD_MOVE();
extern LCD_MOVE_DELAY();
extern LCD_Clr_half();

unsigned int* Num_Input(unsigned int);

extern unsigned int set_sign;
extern unsigned int set_value;
extern unsigned int set_bit;
extern flag;
extern AD_DATA;

const unsigned char LCD_Gide[]=
{
	//128X16   数控直流恒流源
	0x0000,0x0000,0x0010,0x92D6,0x7CFF,0xFF7C,0x56D2,0xF0FF,
	0x1F12,0xF0F0,0x1000,0x0808,0x08FF,0xFFC8,0x4898,0xD868,
	0x2A2E,0x6CD8,0xD808,0x0000,0x0404,0xF4F4,0x949C,0x9F97,
	0x9494,0xF4F4,0x0404,0x0000,0x1070,0x6187,0xE664,0x4464,
	0x755F,0x4E64,0xE4C4,0x0404,0x0070,0x70FF,0xFF38,0x32F2,
	0xF292,0x9292,0x92F2,0xF202,0x0000,0x1070,0x6187,0xE664,
	0x4464,0x755F,0x4E64,0xE4C4,0x0404,0x0010,0x3127,0xE6E0,
	0xFEFE,0xF2FA,0x5E56,0x5252,0xF2F2,0x0200,0x0000,0x0000,
	0x0000,0x0000,0x0042,0x426A,0x2E3F,0x1B3E,0x2642,0x6033,
	0x1F3F,0x7360,0x2000,0x0242,0xC3FF,0x7F00,0x4042,0x4242,
	0x7E7E,0x4242,0x4240,0x0040,0x4040,0x7F7F,0x4A4A,0x4A4A,
	0x4A4A,0x7F7F,0x4040,0x4000,0x0404,0xFCFF,0x4370,0x3F0F,
	0x007F,0x7F3F,0x7F40,0x7070,0x0000,0x007F,0x7F20,0x2027,
	0x2724,0x2424,0x2427,0x2720,0x2000,0x0404,0xFCFF,0x4370,
	0x3F0F,0x007F,0x7F3F,0x7F40,0x7070,0x0004,0xFCFF,0x4370,
	0x3F2F,0x315D,0xCDFF,0x7F05,0x0D39,0x3000,0x0000,0x0000
};


const unsigned char LCD_Set_Line[]=
{
	//63X16  设定电流:
	0x0008,0x3000,0x0080,0x7808,0x0878,0x8080,0x8000,0xE020,
	0x2020,0x2020,0x3820,0x2020,0x2020,0xE000,0xC040,0x4040,
	0x40F8,0x4040,0x4040,0xC000,0x0000,0x4890,0x3000,0x1090,
	0x5038,0x1050,0x9010,0x1000,0x0000,0x0000,0x0000,0x0001,
	0x01FF,0x40A1,0x8246,0x2A12,0x2A46,0x8280,0x0080,0x403D,
	0x4181,0x81FF,0x8989,0x8981,0x8080,0x003F,0x1212,0x1212,
	0x7F92,0x9292,0x929F,0x8060,0x0008,0xF804,0x827D,0x0101,
	0xFD01,0x017D,0x83C0,0x0000,0x0063,0x6300,0x0000,0x0101
	
};

const unsigned char LCD_Real_Line[]=
{
	//63X16   实测电流:
	0x7010,0x1050,0x9010,0x18D0,0x1010,0x1010,0x7000,0x4890,
	0x3000,0xF010,0xD010,0xF000,0xE000,0xF800,0xC040,0x4040,
	0x40F8,0x4040,0x4040,0xC000,0x0000,0x4890,0x3000,0x1090,
	0x5038,0x1050,0x9010,0x1000,0x0000,0x0000,0x0000,0x0088,
	0x8889,0x4A4C,0x2918,0x0F18,0x2848,0x8888,0x0008,0xF904,
	0x824F,0x201F,0x20CF,0x004F,0x807F,0x003F,0x1212,0x1212,
	0x7F92,0x9292,0x929F,0x8060,0x0008,0xF804,0x827D,0x0101,
	0xFD01,0x017D,0x83C0,0x0000,0x0063,0x6300,0x0000,0x0101	
};

const unsigned char LCD_Show_Warning[]=
{
	//128X32   电压超范围!请减小
	//		   负载电阻或设定电流
	0x00C0,0x4040,0x4040,0xF840,0x4040,0x40C0,0x0000,0x0000,
	0xF808,0x0808,0x0808,0xF808,0x0808,0x0800,0x0000,0x2020,
	0xF820,0x2808,0xF808,0x8808,0xF800,0x0010,0x5090,0x3810,
	0x9090,0x9090,0xB890,0x1010,0x00F8,0x0848,0x4848,0x48F8,
	0x4848,0x4848,0x08F8,0x0000,0x0000,0xE000,0x0000,0x0000,
	0x0000,0x0000,0x0080,0x88B0,0x0010,0x5050,0x50F8,0x5050,
	0x5010,0x0008,0x1030,0x00E0,0x20A0,0xA0A0,0xF820,0x3020,
	0x0000,0x0000,0x8000,0x00F8,0x0000,0x8000,0x0000,0x0000,
	0x003F,0x1212,0x1212,0x7F92,0x9292,0x929F,0x8060,0x00E0,
	0x1F80,0x8282,0x8282,0xFF82,0x8A92,0xB280,0x00C1,0x3D21,
	0x7F89,0x8A81,0xBEA2,0xA2A3,0xBE80,0x0009,0xFA08,0x0500,
	0x7F80,0x8488,0x8887,0x8060,0x00FF,0x8084,0x8585,0x85FF,
	0x8595,0xA59C,0x80FF,0x0000,0x0000,0x3700,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x00FF,0x4021,0xFD25,0x253D,0x25A5,
	0xFD01,0x0004,0x7C82,0x413F,0x003E,0x925E,0x213E,0x48E6,
	0x0004,0x0201,0x0140,0x807F,0x0000,0x0001,0x0306,0x0000,
	0x0080,0x40A0,0x9098,0x9090,0xD0B0,0x9080,0x0000,0x0080,
	0xA0A0,0xF8A0,0xA0A0,0x80F8,0x8088,0xB080,0x00C0,0x4040,
	0x4040,0xF840,0x4040,0x40C0,0x0000,0x00F0,0x1090,0x7010,
	0x00F0,0x9090,0x90F0,0x0000,0x0020,0x2020,0x2020,0x2020,
	0xF820,0x2830,0x2020,0x0000,0x0830,0x0000,0x8078,0x0808,
	0x7880,0x8080,0x00E0,0x2020,0x2020,0x2038,0x2020,0x2020,
	0x20E0,0x00C0,0x4040,0x4040,0xF840,0x4040,0x40C0,0x0000,
	0x0048,0x9030,0x0010,0x9050,0x3810,0x5090,0x1010,0x0000,
	0x0000,0x809F,0x8040,0x201E,0x2040,0xC09F,0x0000,0x002A,
	0x2E2B,0xFE2A,0xAA42,0x2017,0x3846,0x80C0,0x003F,0x1212,
	0x1212,0x7F92,0x9292,0x929F,0x8060,0x00FF,0x1020,0x114E,
	0x407F,0x4444,0x447F,0x4040,0x0040,0x5F49,0x4929,0xAFA0,
	0x4F30,0x4C83,0x8060,0x0001,0x01FF,0x40A1,0x8246,0x2A12,
	0x2A46,0x8280,0x0080,0x403D,0x4181,0x81FF,0x8989,0x8981,
	0x8080,0x003F,0x1212,0x1212,0x7F92,0x9292,0x929F,0x8060,
	0x0008,0xF804,0x827D,0x0101,0xFD01,0x017D,0x83C0,0x0000
};


const unsigned char LCD_1[]=
{
	//8X16  1
	0x0000,0x8040,0xE000,0x0000,0x0000,0x0000,0x7F00,0x0000
};

const unsigned char LCD_2[]=
{
	//8X16  2
	0x00C0,0x2020,0x2020,0xC000,0x0040,0x6050,0x4844,0x4300
};

const unsigned char LCD_3[]=
{
	//8X16  3
	0x00C0,0x2020,0x2020,0xC000,0x0030,0x4042,0x4242,0x3D00
};

const unsigned char LCD_4[]=
{
	//8X16  4
	0x0000,0x0080,0x40E0,0x0000,0x1814,0x1310,0x107F,0x1000	
};

const unsigned char LCD_5[]=
{
	//8X16  5
	0x0080,0x6020,0x2020,0x2000,0x0033,0x4141,0x4161,0x1E00
};

const unsigned char LCD_6[]=
{
	//8X16  6
	0x0080,0x4020,0x2020,0x4000,0x003F,0x4442,0x4242,0x3C00
};

const unsigned char LCD_7[]=
{
	//8X16  7
	0x0020,0x2020,0x20A0,0x6000,0x0000,0x0070,0x0E01,0x0000	
};

const unsigned char LCD_8[]=
{
	//8X16  8
	0x00C0,0x2020,0x2020,0xC000,0x003D,0x4242,0x4242,0x3D00
};

const unsigned char LCD_9[]=
{
	//8X16  9
	0x00C0,0x2020,0x2020,0xC000,0x0023,0x4444,0x4422,0x1F00
};

const unsigned char LCD_0[]=
{
	//8X16  0
	0x00C0,0x2020,0x2020,0xC000,0x003F,0x4040,0x4040,0x3F00
};

const unsigned char cursor[]=
{
	//1X16  光标 
	0xFCFF
};

const unsigned char blank[]=
{
	//1X16
	0x0000
};

const unsigned char minus[]=
{
	//8X16
	0x0000,0x0000,0x0000,0x0000,0x0001,0x0101,0x0101,0x0101
};

const unsigned char minus_blank[]=
{
	//8X16
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};

const unsigned char mA[]=
{
	//16X16
	0x0000,0x0000,0x0000,0x0000,0x0000,0x8070,0xC000,0x0000,
	0x417F,0x4101,0x7F41,0x017E,0x4078,0x4704,0x054E,0x7040
};
	
void Menu_Ini()
	{
		LCD_CLEAR();
	//	LCD_MOVE_DELAY();
		LCD_INPUT(0,0,0,128,16,LCD_Gide);
		LCD_INPUT(0,2,5,63,16,LCD_Set_Line);
		LCD_INPUT(0,4,5,63,16,LCD_Real_Line);
		LCD_INPUT(0,2,79,8,16,LCD_0);
		LCD_INPUT(0,2,87,8,16,LCD_0);
		LCD_INPUT(0,2,95,8,16,LCD_0);
		LCD_INPUT(0,2,103,8,16,LCD_0);
	 	LCD_INPUT(0,2,112,16,16,mA);
	  	LCD_INPUT(0,4,112,16,16,mA);	
	}
	
void LCD_Set_Ini()					//LCD设定初始化程序,光标闪烁
	{
		if(set_sign==1)LCD_INPUT(0,2,70,8,16,minus);
		else LCD_INPUT(0,2,70,8,16,minus_blank);
		LCD_INPUT(0,2,110,1,16,cursor);				
	}

void LCD_Set_Shift()				//LCD光标移动
	{
		switch(set_bit)
			{
				case 0: LCD_INPUT(0,2,78,1,16,blank);
						LCD_INPUT(0,2,102,1,16,blank);
						LCD_INPUT(0,2,110,1,16,cursor);break;
				case 1:	LCD_INPUT(0,2,110,1,16,blank);
						LCD_INPUT(0,2,94,1,16,blank);
						LCD_INPUT(0,2,102,1,16,cursor);break;
				case 2:	LCD_INPUT(0,2,102,1,16,blank);
						LCD_INPUT(0,2,86,1,16,blank);
						LCD_INPUT(0,2,94,1,16,cursor);break;
				case 3:	LCD_INPUT(0,2,94,1,16,blank);
						LCD_INPUT(0,2,78,1,16,blank);
						LCD_INPUT(0,2,86,1,16,cursor);break;
				case 4:	LCD_INPUT(0,2,86,1,16,blank);
						LCD_INPUT(0,2,110,1,16,blank);
						LCD_INPUT(0,2,78,1,16,cursor);break;
			}
	}

void LCD_Set_Num()					//LCD选定数字加减
	{
		unsigned int i,m;
		unsigned int *Addr;
		
		if(set_sign==1)LCD_INPUT(0,2,70,8,16,minus);
		else LCD_INPUT(0,2,70,8,16,minus_blank);
		i=set_value/10000;
		m=set_value-i*10000;
		i=(unsigned int)(m/1000);
		Addr=(unsigned int*)Num_Input(i);
		LCD_INPUT(0,2,79,8,16,Addr);
		m=m-i*1000;
		i=m/100;
		Addr=(unsigned int*) Num_Input(i);
		LCD_INPUT(0,2,87,8,16,Addr);
		m=m-i*100;
		i=m/10;
		Addr=(unsigned int*) Num_Input(i);
		LCD_INPUT(0,2,95,8,16,Addr);
		i=m-i*10;
		Addr=(unsigned int*) Num_Input(i);
		LCD_INPUT(0,2,103,8,16,Addr);
	//	LCD_INPUT(0,2,110,16,16,mA);
	}

void LCD_Set_Finish()				//LCD设定结束,去光标
	{
			switch(set_bit)
				{
					case 0:LCD_INPUT(0,2,110,1,16,blank);break;
					case 1:LCD_INPUT(0,2,102,1,16,blank);break;
					case 2:LCD_INPUT(0,2,94,1,16,blank);break;
					case 3:LCD_INPUT(0,2,86,1,16,blank);break;
					case 4:LCD_INPUT(0,2,78,1,16,blank);break;
				}
	}


void LCD_Cursor_Flash()
	{
		if(flag)
			{	
				switch(set_bit)
				{
					case 0:LCD_INPUT(0,2,110,1,16,blank);break;
					case 1:LCD_INPUT(0,2,102,1,16,blank);break;
					case 2:LCD_INPUT(0,2,94,1,16,blank);break;
					case 3:LCD_INPUT(0,2,86,1,16,blank);break;
					case 4:LCD_INPUT(0,2,78,1,16,blank);break;
				}
			}
		else
			{
				switch(set_bit)
				{
					case 0:LCD_INPUT(0,2,110,1,16,cursor);break;
					case 1:LCD_INPUT(0,2,102,1,16,cursor);break;
					case 2:LCD_INPUT(0,2,94,1,16,cursor);break;
					case 3:LCD_INPUT(0,2,86,1,16,cursor);break;
					case 4:LCD_INPUT(0,2,78,1,16,cursor);break;
				}
			
			}
	
	
	}

void LCD_AD_Num()					//LCD显示测量值
	{
		unsigned int i,m;
		unsigned int *Addr;
		if(set_sign==1)LCD_INPUT(0,2,70,8,16,minus);
		else LCD_INPUT(0,2,70,8,16,minus_blank);
		i=AD_DATA/10000;
		m=AD_DATA-i*10000;
		i=(unsigned int)(m/1000);
		Addr=(unsigned int*)Num_Input(i);
		LCD_INPUT(0,4,79,8,16,Addr);
		m=m-i*1000;
		i=m/100;
		Addr=(unsigned int*) Num_Input(i);
		LCD_INPUT(0,4,87,8,16,Addr);
		m=m-i*100;
		i=m/10;
		Addr=(unsigned int*) Num_Input(i);
		LCD_INPUT(0,4,95,8,16,Addr);
		i=m-i*10;
		Addr=(unsigned int*) Num_Input(i);
		LCD_INPUT(0,4,103,8,16,Addr);
	 	LCD_INPUT(0,4,112,16,16,mA);		
	}

unsigned int* Num_Input(unsigned int i)
	{
		unsigned int *_tmp;
		switch(i)
			{
				case 0:_tmp=(unsigned int*)LCD_0;break;
				case 1:_tmp=(unsigned int*)LCD_1;break;
				case 2:_tmp=(unsigned int*)LCD_2;break;
				case 3:_tmp=(unsigned int*)LCD_3;break;
				case 4:_tmp=(unsigned int*)LCD_4;break;
				case 5:_tmp=(unsigned int*)LCD_5;break;
				case 6:_tmp=(unsigned int*)LCD_6;break;
				case 7:_tmp=(unsigned int*)LCD_7;break;
				case 8:_tmp=(unsigned int*)LCD_8;break;
				case 9:_tmp=(unsigned int*)LCD_9;break;
				default:break;		 
			}
		return _tmp;
	}

void LCD_Warning()                	//LCD显示报警
	{
		LCD_INPUT(0,1,4,128,32,LCD_Show_Warning);		
	}	
	
void LCD_Warning_Clr()
	{
		LCD_Clr_half();
		LCD_INPUT(0,4,5,63,16,LCD_Real_Line);
	}

⌨️ 快捷键说明

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