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

📄 jyzno1.c

📁 一个使用MSP430的项目例子
💻 C
📖 第 1 页 / 共 3 页
字号:
		FlashWriteUchar((uchar*)adr_start,xlh[i]);
		adr_start++;
	}
	for(i=3;i>0;i--)
	{	
		FlashWriteUchar((uchar*)adr_start,ganh[i-1]);
		adr_start++;
	}
	FlashWriteUchar((uchar*)adr_start,ganx);adr_start++;
	FlashWriteUchar((uchar*)adr_start,(xiangb-11));adr_start++;
	FlashWriteUchar((uchar*)adr_start,chuanh[0]);adr_start++;	
	FlashWriteUchar((uchar*)adr_start,chuanh[1]);adr_start++;
	FlashWriteUchar((uchar*)adr_start,pianh[0]);adr_start++;
	FlashWriteUchar((uchar*)adr_start,pianh[1]);adr_start++;
	for(i=0;i<pian_num;i++)
	{
		for(j=0;j<3;j++)
		{
			FlashWriteUchar((uchar*)adr_start,voltage[i][j]);adr_start++;		
		}
	}
	FlashWriteUchar((uchar*)adr_start,0x55);adr_start++;	
	FlashWriteUchar((uchar*)adr_start,0xaa);adr_start++;	
	FlashErase((uint*)0x1000);	
	FlashWriteInt((uint*)0x1000,adr_start);//这里默认不会超出存储区,最好有个存储区溢出报警!
	//xlh[0-3] ganh[3] ganx xiangb chuanh[2] pian_num voltage[30,3] ---5+3+1+1+2+1+90+30=133字节	
	//最好还是要有个内存清除键。
}


//*****************************
void	fcsave_dat(void)
{
	uchar	adr_tmp[2];
	uchar	i,j;
	//	FlashErase((uint*)0x1000);	
	read_Flash((uchar*)0x1000,adr_tmp,2);
	adr_start = adr_tmp[1]*256+adr_tmp[0];
	if(adr_start==0xffff){adr_start=0x4000;}//起始地址
	FlashWriteUchar((uchar*)adr_start,fc_pianh);adr_start++;
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			FlashWriteUchar((uchar*)adr_start,fc_voltage[i][j]);adr_start++;		
		}
	}
	FlashErase((uint*)0x1000);	
	FlashWriteInt((uint*)0x1000,adr_start+1);//这里默认不会超出存储区,最好有个存储区溢出报警!	
}
//*****************************
void	taskfun_mainloop(void)
{
	if(fkeyfun)
	{
		P3OUT &= ~BIT0;//灭
    	P4OUT &= ~BIT2;	
		P2OUT |=BIT7;//  /EN=0;片选无效
		P2OUT &= ~BIT6;	// /OFF=0;关闭有效
	//    P2OUT |= BIT6;	// /OFF=1;关闭无效
	//    P2OUT &= ~BIT7;//  /EN=0;片选有效
		f_232 =0;	
		TACCTL0 &= ~CM_3; // 禁止捕获
		TACTL &= ~MC_3; // 停止定时器---将MC0,MC1置成0
		fkeyfun=0;
		mode=0;
		lcd_off();
		fun_dat=1;
		LCDMEM[1] =LCD_TAB1[fun_dat];
        blink_dat=fun_dat;f_blink=1;blink_address=1;//闪烁
	}
}
void	taskok_mainloop(void)
{
	uchar	*addr;
	uchar	adr_tmp[3];
	uchar	i;
	if(fkeyok)
	{
		fkeyok=0;
		switch(mode)
		{
			case 0:	mode=fun_dat;
					f_blink=0;			
					switch(mode)
					{
						case 1:	lcd_off();//线路号
								xlh_cnt=0;
								xlh[0]=0;xlh[1]=0;xlh[2]=0;xlh[3]=0;
		                        LCDMEM[1]=LCD_TAB1[0];LCDMEM[2]=LCD_TAB1[0];LCDMEM[3]=LCD_TAB1[0];LCDMEM[4]=LCD_TAB1[0];	
								blink_dat=0;f_blink=1;blink_address=1;//闪烁
                                break;
	                    case 2:	lcd_off();//杆号
		                        LCDMEM[1]=LCD_TAB1[xlh[0]];LCDMEM[2]=LCD_TAB1[xlh[1]];LCDMEM[3]=LCD_TAB1[xlh[2]];LCDMEM[4]=LCD_TAB1[xlh[3]];
								ganh_cnt=2;
                                ganh[0]=0;ganh[1]=0;ganh[2]=0;
								LCDMEM[15] =LCD_TAB2[10];//mem15
								LCDMEM[14] =LCD_TAB2[0];//mem14
								LCDMEM[13] =LCD_TAB2[0];//mem13
								LCDMEM[12] =LCD_TAB2[0];//mem12
								blink_dat=0;f_blink=3;blink_address=14;//最左(高)位闪烁
								break;
	                    case 3: lcd_off();//杆型
		                        LCDMEM[1]=LCD_TAB1[xlh[0]];LCDMEM[2]=LCD_TAB1[xlh[1]];LCDMEM[3]=LCD_TAB1[xlh[2]];LCDMEM[4]=LCD_TAB1[xlh[3]];
								LCDMEM[15]=LCD_TAB2[10];LCDMEM[14]=LCD_TAB2[ganh[2]];LCDMEM[13]=LCD_TAB2[ganh[1]];LCDMEM[12]=LCD_TAB2[ganh[0]];
								ganx=1;
								LCDMEM[11] =LCD_TAB2[10];//mem11
								LCDMEM[10] =LCD_TAB2[ganx];//mem10	
								blink_dat=ganx;f_blink=3;blink_address=10;//ganxin闪烁
								break;
                    	case 4:	lcd_off();//相别--第二页
                    			xiangb=12;//12-a 13-b 14-c
								LCDMEM[1] =LCD_TAB1[xiangb];//mem10
								blink_dat=xiangb;f_blink=1;blink_address=1;//最右(低)位闪烁
								break;
						case 5:	lcd_off();//串号
								LCDMEM[1] =LCD_TAB1[xiangb];
								chuanh_cnt=0;
			                    if(ganx==1)//直杆
			                    {
			                    	chuanh[0]=1;chuanh[1]=11;//第一位1,第二位灭
			                    }
			                    else//耐张杆
			                    {
			                    	chuanh[0]=1;chuanh[1]=1; //11-24
			                    }
			                    blink_dat=chuanh[0];
			                    f_blink=1;blink_address=3;//在第1位闪烁
			                    LCDMEM[2]=LCD_TAB1[10];//-
								LCDMEM[3] =LCD_TAB1[chuanh[0]];
								LCDMEM[4] =LCD_TAB1[chuanh[1]];
								chuanh_cnt=0;
								break;		
						case 6:	lcd_off();//片号		
								LCDMEM[1] =LCD_TAB1[xiangb];
								LCDMEM[2] =LCD_TAB1[10];
								LCDMEM[3] =LCD_TAB1[chuanh[0]];
								LCDMEM[4] =LCD_TAB1[chuanh[1]];
								LCDMEM[5] =LCD_TAB1[10];//-28
								LCDMEM[6] =LCD_TAB1[2];
								LCDMEM[7] =LCD_TAB1[8];
			                    pianh[0]=2;pianh[1]=8;
			                    pianh_cnt=0;//片号第一二位
								blink_dat=pianh[0];f_blink=1;blink_address=pianh_cnt+6;//在第1位闪烁
								break;
						case 7:	lcd_off();//片号
								LCDMEM[1] =LCD_TAB1[xiangb];
								LCDMEM[2] =LCD_TAB1[10];
								LCDMEM[3] =LCD_TAB1[chuanh[0]];
								LCDMEM[4] =LCD_TAB1[chuanh[1]];
								LCDMEM[5] =LCD_TAB1[10];
								LCDMEM[6] =LCD_TAB1[pian_num/10];
								LCDMEM[7] =LCD_TAB1[pian_num%10];
			                    pianh[0] = pian_num/10;pianh[1]=pian_num%10;
			                    fc_pianh = pian_num;
								blink_dat=pianh[1];f_blink=1;blink_address=7;//在第二位闪烁--连加连减
								fcmea_cnt=0;
								break;			
						case 8:	LCDMEM[blink_address] =LCD_TAB1[blink_dat];//前面的闪烁正常结束
								f_blink=0;
								//P2OUT |=BIT7;//  /EN=0;片选无效
								//P2OUT &= ~BIT6;	// /OFF=0;关闭有效
							    P2OUT |= BIT6;	// /OFF=1;关闭无效
							    P2OUT &= ~BIT7;//  /EN=0;片选有效
							    f_232=1;
								delay(50);
								//send8(0x55);
								//send8(0xaa);
								break;//通讯模式												
								//进入通讯模式,发送时关闭定时器B									 				
					}
                    break;

			case 1: LCDMEM[blink_address] =LCD_TAB1[blink_dat];//前面的闪烁正常结束
					f_blink=0;
              		mode=2;//进入杆号处理
					ganh_cnt=2;
					ganh[0]=0;ganh[1]=0;ganh[2]=0;
					LCDMEM[15] =LCD_TAB2[10];//mem15
					LCDMEM[14] =LCD_TAB2[0];//mem14
					LCDMEM[13] =LCD_TAB2[0];//mem13
					LCDMEM[12] =LCD_TAB2[0];//mem12
					blink_dat=0;f_blink=3;blink_address=14;//最右(低)位闪烁
					break;
			case 2: LCDMEM[blink_address] =LCD_TAB2[blink_dat];//前面的闪烁正常结束
					f_blink=0;
              		mode=3;//进入杆型处理
					ganx=1;
					LCDMEM[11] =LCD_TAB2[10];//mem11
					LCDMEM[10] =LCD_TAB2[ganx];//mem10
					blink_dat=ganx;f_blink=3;blink_address=10;//最右(低)位闪烁
					break;
			case 3: lcd_off();
					f_blink=0;
              		mode=4;//进入相别处理
					xiangb=12;//12-a 13-b 14-c
					LCDMEM[1] =LCD_TAB1[xiangb];//mem10
					blink_dat=xiangb;f_blink=1;blink_address=1;//最右(低)位闪烁
					break;
			case 4: LCDMEM[blink_address] =LCD_TAB1[blink_dat];//前面的闪烁正常结束
              		f_blink=0;
              		mode=5;//进入串号处理
                   	chuanh_cnt=0;
                    if(ganx==1)//直杆
                    {
                    	chuanh[0]=1;chuanh[1]=11;//1-2
                    }
                    else//耐张杆
                    {
                    	chuanh[0]=1;chuanh[1]=1; //11-24
                    }
                    LCDMEM[2] =LCD_TAB1[10];
					LCDMEM[3] =LCD_TAB1[chuanh[0]];
					LCDMEM[4] =LCD_TAB1[chuanh[1]];
					blink_dat =chuanh[0];f_blink =1;blink_address =3;//在第二位闪烁
					break;
        	case 5:	LCDMEM[blink_address] =LCD_TAB1[blink_dat];//前面的闪烁正常结束
        			f_blink=0;
            		mode=6;//进入片号处理
                    pianh_cnt=0;
					LCDMEM[5] =LCD_TAB1[10];//-28
					LCDMEM[6] =LCD_TAB1[pian_num/10];
					LCDMEM[7] =LCD_TAB1[pian_num%10];
                    pianh[0]=pian_num/10;pianh[1]=pian_num%10;
                    pianh_cnt=0;
					blink_dat=pianh[0];f_blink=1;blink_address=pianh_cnt+6;//在第二位闪烁
					break;
        	case 6:	LCDMEM[blink_address] =LCD_TAB1[blink_dat];//前面的闪烁正常结束
					LCDMEM[6] =LCD_TAB1[0];
					LCDMEM[7] =LCD_TAB1[1];
                    f_blink=0;
                    pian_num=pianh[0]*10+pianh[1];
					timnew_dat=0;
					timmin_dat=65535;
					ccr0_old=0;      
					TAR=0; 
					cp_no1=1;
					//计算比较表
					addr=(uchar*)0x1080;											
					for(i=0;i<30;i++)
					{
						read_Flash(addr,adr_tmp,2);
						addr+=2;
						bj_dat[i]=adr_tmp[1]*256+adr_tmp[0];
					}
                    TACCTL0 |= CM_1; // 启动俘获--上升沿
					TACTL |= MC_2; // 选择连续增计数--启动定时器
					lxf_mea=1;f_cap=0;		
					LCDMEM[14] =0x0;//00.0    0
					LCDMEM[13] =LCD_TAB2[0]+LCD_P2;
					LCDMEM[12] =LCD_TAB2[0];
					LCDMEM[9] =LCD_TAB2[0];	
					f_5s=0;lxmea_cnt=1;
					bj_dat1=bj_dat[lxmea_cnt-1];
					cnt_20ms=INT20MSCOUNT;cnt_250ms=INT250MSCOUNT;cnt_500ms=INT500MSCOUNT;cnt_5s=INT5SCOUNT;//初始化5s定时器的计数器
              		break;
            case 7:	
            		if(++fcmea_cnt==1)//第一次按下复测
            		{
	            		LCDMEM[blink_address] =LCD_TAB1[blink_dat];//前面的闪烁正常结束
	            		f_blink=0;            				
						addr=(uchar*)0x1080;
						addr+=(fc_pianh-1)*2;
						read_Flash(addr,adr_tmp,2);
						bj_dat1=adr_tmp[1]*256+adr_tmp[0];
            		}
            		//fc_pianh;// 存储了待复测的片号
					timnew_dat=0;
					timmin_dat=65535;
					ccr0_old=0;     
					TAR=0;
					cp_no1=1;
            		TACCTL0 |= CM_1; // 启动捕获--上升沿
					TACTL |= MC_2; // 选择连续增计数--启动定时器
					LCDMEM[14] =0x0;//00.0    0
					LCDMEM[13] =LCD_TAB2[2]+LCD_P2;
					LCDMEM[12] =LCD_TAB2[1];
					LCDMEM[9] =LCD_TAB2[0];						
					fcf_mea=1;f_cap=0;
					f_5s=0;cnt_20ms=INT20MSCOUNT;cnt_500ms=INT500MSCOUNT;cnt_250ms=INT250MSCOUNT;cnt_5s=INT5SCOUNT;//初始化5s定时器的计数器					
            		break;
            case 8: break;		
		}
	}
}
void	taskleft_mainloop(void)
{
	if(fkeyleft)
	{
		fkeyleft=0;
		switch(mode)
		{
			case 	0: 	break;
			case	1:	if(++xlh_cnt==4)xlh_cnt=0;
            			LCDMEM[blink_address] =LCD_TAB1[blink_dat];
            			blink_address=xlh_cnt+1;blink_dat=xlh[xlh_cnt];
                        break;
			case	2:	if(--ganh_cnt>2)ganh_cnt=2;//14 13 12
            			LCDMEM[blink_address] =LCD_TAB2[blink_dat];
            			blink_address=ganh_cnt+12;blink_dat=ganh[ganh_cnt];
                        break;
			case	3:	break;
            case	4:	break;
            case	5:	if(ganx==2)//耐张杆
                    	{
                         	if(++chuanh_cnt>1)chuanh_cnt=0;
							LCDMEM[blink_address] =LCD_TAB1[blink_dat];
							blink_address=chuanh_cnt+3;blink_dat=chuanh[chuanh_cnt];
                        }
              			break;
			case	6:	if(++pianh_cnt>1)pianh_cnt=0;
						LCDMEM[blink_address] =LCD_TAB1[blink_dat];
						blink_address=pianh_cnt+6;blink_dat=pianh[pianh_cnt];
            			break;
			case	7:	break;//连加减模式
			case 	8:	break;//通讯模式

		}
	}
}
void	taskup_mainloop(void)
{
	if(fkeyup)
	{
		fkeyup=0;
		switch(mode)
		{
			case 0: if(++fun_dat==9)fun_dat=1;
            		LCDMEM[1] =LCD_TAB1[fun_dat];
                    blink_dat=fun_dat;
                    break;
			case 1:	if(++xlh[xlh_cnt]>9)xlh[xlh_cnt]=0;
            		LCDMEM[xlh_cnt+1]=LCD_TAB1[xlh[xlh_cnt]];
					blink_dat=xlh[xlh_cnt];
                    break;
			case 2:	if(++ganh[ganh_cnt]>9)ganh[ganh_cnt]=0;
            		LCDMEM[ganh_cnt+12]=LCD_TAB2[ganh[ganh_cnt]];
					blink_dat=ganh[ganh_cnt];
                    break;
			case 3:	if(++ganx>2)ganx=2;
              		LCDMEM[10] =LCD_TAB2[ganx];
                    blink_dat=ganx;
                    break;
			case 4:	if(++xiangb>14)xiangb=12;
              		LCDMEM[1] =LCD_TAB1[xiangb];
                    blink_dat=xiangb;
                    break;
			case 5:	if(ganx==1)
            		{
						if(++chuanh[0]==3)chuanh[0]=1;
                    }
                    else
                    {
						if(chuanh_cnt==0)//no1
                        {
                        	if(++chuanh[0]>2){chuanh[0]=0;}
                        }
                        else//no2
                        {
                        	if(++chuanh[1]>4){chuanh[1]=1;}
                        }
                    }
					LCDMEM[chuanh_cnt+3]=LCD_TAB1[chuanh[chuanh_cnt]];
					blink_dat=chuanh[chuanh_cnt];
					break;
			case 6:	if(pianh_cnt==0)//no1
					{
						if(pianh[0]==2)
						{
							pianh[0]=3;pianh[1]=0;
						}
						else if(pianh[0]==3)
						{
							pianh[0]=2;
						}						
					}
					else//no2
					{
						if(pianh[0]==2)//=3不处理
						{
							if(++pianh[1]>9){pianh[1]=0;}
						}	
					}
					//LCDMEM[pianh_cnt+6]=LCD_TAB1[pianh[pianh_cnt]];
					LCDMEM[6]=LCD_TAB1[pianh[0]];
					LCDMEM[7]=LCD_TAB1[pianh[1]];
					blink_dat=pianh[pianh_cnt];
                    break;
           	case 7:	//可在01 - 30 内进行设置
 					if(++fc_pianh>30)fc_pianh=1;
					LCDMEM[6]=LCD_TAB1[fc_pianh/10];
					LCDMEM[7]=LCD_TAB1[fc_pianh%10];
					blink_dat=fc_pianh%10;
                    break;  
			case 8:	break;//通讯模式                     
                          
		}
	}
}
void	taskdown_mainloop(void)
{
	if(fkeydown)
	{
		fkeydown=0;
		switch(mode)
		{
			case 0: if(--fun_dat==0)fun_dat=8;
            		LCDMEM[1] =LCD_TAB1[fun_dat];
                    blink_dat=fun_dat;
                    break;
			case 1:	if(--xlh[xlh_cnt]>10)xlh[xlh_cnt]=9;
            		LCDMEM[xlh_cnt+1]=LCD_TAB1[xlh[xlh_cnt]];
                    blink_dat=xlh[xlh_cnt];
                    break;
			case 2:	if(--ganh[ganh_cnt]>10)ganh[ganh_cnt]=9;
            		LCDMEM[ganh_cnt+12]=LCD_TAB2[ganh[ganh_cnt]];
					blink_dat=ganh[ganh_cnt];
                    break;
			case 3:	if(--ganx==0)ganx=2;
              		LCDMEM[10] =LCD_TAB2[ganx];
                    blink_dat=ganx;
                    break;
			case 4:	if(--xiangb<12)xiangb=14;
              		LCDMEM[1] =LCD_TAB1[xiangb];
                    blink_dat=xiangb;
                    break;
			case 5:	if(ganx==1)
            		{
						if(--chuanh[0]<1)chuanh[0]=2;
                    }
                    else
                    {
						if(chuanh_cnt==0)//no1
                        {
                        	if(--chuanh[0]>2){chuanh[0]=2;}//1-2
                        }
                        else//no2
                        {
                        	if(--chuanh[1]<1){chuanh[1]=4;}
                        }
                    }
					LCDMEM[chuanh_cnt+3]=LCD_TAB1[chuanh[chuanh_cnt]];
					blink_dat=chuanh[chuanh_cnt];
					break;
			case 6:	if(pianh_cnt==0)//no1
					{
						if(pianh[0]==2)
						{
							pianh[0]=3;pianh[1]=0;
						}
						else if(pianh[0]==3)
						{
							pianh[0]=2;
						}

					}
					else//no2
					{
						if(pianh[0]==2)//=3不处理
						{
							if(--pianh[1]>9){pianh[1]=9;}
						}	

⌨️ 快捷键说明

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