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

📄 hanshu2.h

📁 这里有很多我自己做的凌阳单片机源程序
💻 H
字号:
unsigned int a[5]="K=150";
unsigned int flag2;//遥控更新数据的标志
unsigned int num[34]={0};
unsigned int value;//表示增益数字
unsigned int k=5;//表示增益数字的位数
unsigned int *addr=0xf100;//要檫除的页地址
unsigned int flag;
void write_flash()
{
	*P_Flash_Ctrl=0xaaaa;
	*P_Flash_Ctrl=0x5533;
	*addr=value;
}
void page_erase(void)
{
	*P_Flash_Ctrl=0xaaaa;
	*P_Flash_Ctrl=0x5511;
	*addr=0x0000;//向相应的页地址写如任意值;
}
unsigned int read_flash(void)
{
	unsigned int data1;
	data1=*addr;
	return (data1);
}
//初始化函数
void lcd_init(void)
{		
	write_command(0x38);//显示模式的设置		
	write_command(0x08);//显示关闭*/		
	write_command(0x0c);//整体显示,关光标,不闪烁
	write_command(0x06);//显示光标移动设置
	write_command(0x01);	//显示清屏
}
//写命令函数,IOA0~IOA2为控制端口,IOA8~IOA15为数据端口
void write_command(unsigned int command)
{	
	check_busy();
	Set_IOA_Dir(0xff07);
	Set_IOA_Attrib(0xff07);	
	PA->byte.byteh=command;//操作高8位	
	P0_0=0;//rs=0
	P0_1=0;//rw=0
	P0_2=1;//E=1
	asm("nop");		
	P0_2=0;//E=0;//下降沿触发	
}
//写数据函数
void write_data(unsigned int data2)
{
	check_busy();
	Set_IOA_Dir(0xff07);
	Set_IOA_Attrib(0xff07);		
	PA->byte.byteh=data2;//操作高8位	
	P0_0=1;//rs=1	
	P0_1=0;//rw=0
	P0_2=1;//E=1
	asm("nop");	
	P0_2=0;//E=0;//下降沿触发	
}
void check_busy()
{	
	unsigned int c;
	
	Set_IOA_Dir(0x0007);
	Set_IOA_Attrib(0xff07);
	Set_IOA_Data(0xff00);//悬浮式输入	
		
	do
	{
		Watchdog_Clear();		
		P0_0=0;//rs=0
		P0_1=1;//rw=1
		P0_2=1;//E=1	
		c=PA->byte.byteh;//只读出高8位			
		P0_2=0;//E=0;
		asm("nop");		
		c&=0x80;	
	}while(c==0x80);	
}
unsigned int key_scan()
{
	if(P1_0==1)
	{
		delay();
		if(P1_0==1)
		{
			return(1);
		}
	}
	else if(P1_1==1)
	{
		delay();
		if(P1_1==1)
		{
			return(1);
		}
	}	
	else
	{
		return(0);
	}
}
void get_key()
{
	if(P1_0==1)
	{
		do{
			Watchdog_Clear();
		}while(P1_0==1);
		if(value<150)//
			{
				if(value==1)
				{
					value=10;
				}
				else
				{
					value+=10;				
				}
			}
	}
	if(P1_1==1)//'-10'
		{
			do
			{
				Watchdog_Clear();
			}while(P1_1==1);//等待按键释放
			if((value==10)|(value==1))
			{
				value=1;				
			}	
			else 
			{
				value-=10;
			}	
		}
}			
void jiema_init()
{	
	//时钟的设置
	*P_SystemClock=0x0013;//24.576--24.576/8
	//定时器时钟的设置
	Set_TimerA_Data(0x0000);//定时器A从0开始计数
	Set_TimerA_Ctrl(stopA);//开始先不计数
	//设置中断
	*P_INT_Ctrl=0x0100;//开IRQ3_EXIT1中断
	//开中断
	asm("irq on");
}
unsigned int get_ma()
{
	unsigned int i;		
	for(i=0;i<8;i++)
	{
		if(num[i+26]>130)
		{
			num[i]=1;
		}
		else
		{
			num[i]=0;
		}
	}	
	i=num[0]*128+num[1]*64+num[2]*32+num[3]*16+num[4]*8+num[5]*4+num[6]*2+num[7]*1;		
	switch(i)
	{
		case 0xff:return(1);break;
		case 0x7f:return(10);break;
		case 0xbf:return(20);break;
		case 0x3f:return(30);break;
		case 0xdf:return(40);break;
		case 0x5f:return(50);break;
		case 0x9f:return(60);break;
		case 0x1f:return(70);break;
		case 0xef:return(80);break;
		case 0x6f:return(90);break;		
		case 0x87:return(100);break;
		case 0x27:return(110);break;
		case 0xa7:return(120);break;
		case 0x07:return(130);break;
		case 0x05:return(140);break;
		case 0x95:return(150);break;
		default:return(value);break;
	}
}
void delay()
{
	unsigned int r,e;
	r=0;		
	while(r--)
	{
		e=0xfff;
		while(e--)
		{
			Watchdog_Clear();
		}
	}
}
void lcd_display()
{
	unsigned int l;
	if((value>0)&(value<=150))
	{
		if(value>=100)
		{
			a[2]=value/100+48;
			a[3]=(value-100)/10+48;
			a[4]=0+48;
			k=5;
		}
		else if((value>=10)&(value<100))
		{
			a[2]=value/10+48;
			a[3]=0+48;
			k=4;
		}
		else
		{
			a[2]=1+48;
			k=3;
		}	
	}
	else
	{
		value=150;
	}	
	for(l=0;l<k;l++)
	{		
		write_data(a[l]);
	}
}	

⌨️ 快捷键说明

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