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

📄 ch452.c

📁 CH452对LED的写
💻 C
字号:

#include "dsp281x_device.h"
#include "ch452.h"  
#include "struct_define.h"
#include <stdio.h>
#include "mmi_lcd.h"
void CH452_Write(unsigned short data);
void initCH452(void);
void ch452_clear(void);
void delay(unsigned int i);
void Ch452DataDisp(void);
void initial_led8flash();
unsigned short readKey(void);
unsigned short Ch452DispCount=0;
extern data_bh_structure data_bh;
extern struct LED_BITS Led_Control;
short ADdataD[2][100];
unsigned short jj=0;
unsigned char BCD_CODE[10]=
{
	0x3f,0x06,0x5b,0x4f,0x66,
	0x6d,0x7d,0x07,0x7f,0x6f
};

void initCH452(void)
{
	CH452_Write(CH452_RESET);
	asm(" RPT #100 || NOP");
	CH452_Write(CH452_SYSON4W);	//四线制方式,如果Dout用做按键中断输出,那么命令应该为CH452_SYSO4W(0413)
	CH452_Write(CH452_NO_BCD);		// 非译码方式,6个数码管,8个LED灯
	CH452_Write(CH452_DIG6  | 0x00);		/*flash led */
	CH452_Write(CH452_DIG5	| 0xff);
	CH452_Write(CH452_DIG4  | 0xff);
	CH452_Write(CH452_DIG3  | 0xff);
	CH452_Write(CH452_DIG2  | 0xff);
	CH452_Write(CH452_DIG1  | 0xff);
	CH452_Write(CH452_DIG0  | 0xff);

//	CH452_Write(CH452_TWINKLE | 0x7f);
//	delay(DELAY_Ltime);
//	CH452_Write(CH452_LEFTCYC);
}

void CH452_Write(unsigned short data)
{
	unsigned short ii;
	unsigned short Dat;

	Dat=data;
	CH452lod_0;	
	asm(" RPT #127 || NOP");
	for( ii = 0; ii<12; ii++ )				//送入14位数据,低位在前
	{
		if (Dat&1) 
			{CH452Din_1;}
		else
			{CH452Din_0;}	// 输出位数据

		CH452clk_0;
//		asm(" RPT #127 || NOP");
		delay(2);
		CH452clk_1;		//上升沿有效
//		asm(" RPT #12 || NOP");
		delay(1);
		Dat>>=1; 
	}
  	CH452lod_1;			//加载数据,LOAD上升沿
}
unsigned short readKey(void)
{
	unsigned short i;
  	unsigned short cmd,keycode,key;		//定义命令字,和数据存储器

	CH452Din_1;
	cmd=CH452_GET_KEY>>8;			//读按键的命令字  	
  	CH452lod_0;

  	for(i=0;i<=3;i++)				// 只需要发出高4位,多发也可以,但应该确保最后留下的4位是该命令码
	{
		if (cmd&1) 
			{CH452Din_1;}
		else 
			{CH452Din_0;}			// 输出位数据

    	CH452clk_0;	
//		asm(" RPT #5 || NOP");
		delay(1);
    	CH452clk_1;			      //产生时钟上升沿锁通知CH451输入位数据
    	cmd>>=1;			      //往右移一位 	
 	}
	CH452clk_1;
	CH452Din_1;	
	CH452lod_1;				      //产生加载上升沿通知CH451处理命令数据
  	keycode=0;				      //清除keycode
  	for(i=0;i<=6;i++)
	{
		keycode<<=1;			//数据移入keycode,高位在前,低位在后
		if (CH452Dout) 
			keycode++;			//从高到低读入451的数据

    	CH452clk_0;				//产生时钟下升沿通知CH451输出下一位
//		asm(" RPT #5 || NOP");
		delay(1);
    	CH452clk_1;
 	}

	keycode=keycode&0x3f; 
	switch(keycode)
	{
		case	CH452_KEY_ADD:
			key=0;
			break;
		case	CH452_KEY_SUBB:
			key=1;
			break;
		case	CH452_KEY_UP:
			key=2;
			break;
		case	CH452_KEY_DOWN:
			key=3;
			break;
		case	 CH452_KEY_LEFT:
			key=4;
			break;
		case	CH452_KEY_RIGHT:
			key=5;
			break;
		case	CH452_KEY_CANCEL:
			key=6;
			break;
		case	CH452_KEY_ENTER:
			key=7;
			break;
		default:
			key=INVALID;
			break;
	}
  	return(key);
}
/* delay(1)one = 50 us delay */
void delay(unsigned int i)
{  unsigned long k;
   while(i--)
    { k=22;
      while(k--);
    }
}

void ch452_ShowData(unsigned short type,unsigned short data)
{
	unsigned short show0;
	unsigned short show1;
	unsigned short show2;
	unsigned short show3;
	unsigned short show4;

	show0=data%10;
	show1=data/10%10;
	show2=data/100%10;
	show3=data/1000%10;
	show4=data/10000%10;

	ch452_clear();
	switch (type)
	{
		case AI_SHOW_Ia:
		{
			SHOW_Ia
		}break;
		case AI_SHOW_Ib:
		{
			SHOW_Ib
		}break;
		case AI_SHOW_Ic:
		{
			SHOW_Ic
		}break;
		case AI_SHOW_I0s:
		{
			SHOW_I0
		}break;			
		case AI_SHOW_Ua:
		{
			SHOW_Ua
		}break;
		case AI_SHOW_Ub:
		{
			SHOW_Ub
		}break;
		case AI_SHOW_Uc:
		{
			SHOW_Uc
		}break;	
		case AI_SHOW_Ux:		
		case AI_SHOW_U0:
		{
			SHOW_U0
		} break;		
		case AI_SHOW_MIa:
		{
			SHOW_MIa
		}break;
		case AI_SHOW_MIb:
		{
			SHOW_MIb
		}break;
		case AI_SHOW_MIc:
		{
			SHOW_MIc
		}break;	
		case AI_SHOW_F:
		{
			SHOW_f
		}break;
		case AI_SHOW_P:
		{
			SHOW_P
		}break;
		case AI_SHOW_Q:
		{
			SHOW_Q
		}break;
		case AI_SHOW_COS:
		{
			SHOW_Cos
		}break;
		/*
		case AI_SHOW_Iab:
		{
			SHOW_Iab
		}break;
		case AI_SHOW_Ibc:
		{
			SHOW_Ibc
		}break;
		case AI_SHOW_Ica:
		{
			SHOW_Ica
		}break;
		case AI_SHOW_Uab:
		{
			SHOW_Uab
		} break;
		case AI_SHOW_Ubc:
		{
			SHOW_Ubc
		}break;
		case AI_SHOW_Uca:
		{
			SHOW_Uca
		}break;
		*/
		default:
			break;
	}
	switch (type)
	{
		case AI_SHOW_Ua:
		case AI_SHOW_Ub:
		case AI_SHOW_Uc:
		case AI_SHOW_Ux:
		case AI_SHOW_U0:
		/*case AI_SHOW_Uab:
		case AI_SHOW_Ubc:
		case AI_SHOW_Uca:*/
		{
			CH452_Write(CH452_DIG0  | BCD_CODE[show1]);
			CH452_Write(CH452_DIG1  | BCD_CODE[show2]);
			CH452_Write(CH452_CLR_BIT | 0x3a); /* turn off the point */
			CH452_Write(CH452_SET_BIT | 0x39); /* turn on the point */
			if(show3!=0 && show4!=0)
			{
				CH452_Write(CH452_DIG3  | BCD_CODE[show4]);
				CH452_Write(CH452_DIG2  | BCD_CODE[show3]);
			}
			else if(show3!=0 && show4==0)
			{
				CH452_Write(CH452_DIG2  | BCD_CODE[show3]);
			}
		}break;
		case AI_SHOW_Ia:
		case AI_SHOW_Ib:
		case AI_SHOW_Ic:
		case AI_SHOW_F:
		case AI_SHOW_COS:
		case AI_SHOW_I0s:
		case AI_SHOW_Iab:
		case AI_SHOW_Ibc:
		case AI_SHOW_Ica:
		case AI_SHOW_MIa:
		case AI_SHOW_MIb:
		case AI_SHOW_MIc:
		{
			if(data<=8)
				show0=0;
			CH452_Write(CH452_DIG0  | BCD_CODE[show0]);
			CH452_Write(CH452_DIG1  | BCD_CODE[show1]);
			CH452_Write(CH452_DIG2  | BCD_CODE[show2]);
			CH452_Write(CH452_CLR_BIT | 0x39); /* turn off the point */
			CH452_Write(CH452_SET_BIT | 0x3a); /* turn on the point */			
			if(show3!=0)
			{
				CH452_Write(CH452_DIG3  | BCD_CODE[show3]);
			}
		}break;
		case AI_SHOW_P:
		case AI_SHOW_Q:
		{
			CH452_Write(CH452_DIG0  | BCD_CODE[show1]);
			if(show2!=0 && show3!=0 && show4!=0 )
			{
				CH452_Write(CH452_DIG1  | BCD_CODE[show2]);
				CH452_Write(CH452_DIG2  | BCD_CODE[show3]);
				CH452_Write(CH452_DIG3  | BCD_CODE[show4]);
			}
			if(show2!=0 && show3!=0 && show4==0 )
			{
				CH452_Write(CH452_DIG1  | BCD_CODE[show2]);
				CH452_Write(CH452_DIG2  | BCD_CODE[show3]);
			}
			else if(show2!=0 && show3==0 && show4==0)
			{
				CH452_Write(CH452_DIG1  | BCD_CODE[show2]);
			}
		}break;
		default:
			break;
	}
}
void ch452_clear(void)
{
	CH452_Write(CH452_DIG6  | CH452_SPACE);		/*flash led */
	CH452_Write(CH452_DIG5	| CH452_SPACE);
	CH452_Write(CH452_DIG4  | CH452_SPACE);
	CH452_Write(CH452_DIG3  | CH452_SPACE);
	CH452_Write(CH452_DIG2  | CH452_SPACE);
	CH452_Write(CH452_DIG1  | CH452_SPACE); 
	CH452_Write(CH452_DIG0  | CH452_SPACE);	
}

void Ch452DataDisp()
{
	switch(Ch452DispCount)
	{
		case 0:
		{
			ch452_ShowData(AI_SHOW_Ia,data_bh.aiAmplShow[AI_SHOW_Ia]);
		}break;
		case 2:
		{
			ch452_ShowData(AI_SHOW_Ib,data_bh.aiAmplShow[AI_SHOW_Ib]);
		}break;
		case 4:
		{
			ch452_ShowData(AI_SHOW_Ic,data_bh.aiAmplShow[AI_SHOW_Ic]);
		}break;
		case 6:
		{
			ch452_ShowData(AI_SHOW_Ua,data_bh.aiAmplShow[AI_SHOW_Ua]);
			ADdataD[0][jj]=data_bh.aiAmplShow[AI_SHOW_Ua];
		}break;
		case 8:
		{
			ch452_ShowData(AI_SHOW_Ub,data_bh.aiAmplShow[AI_SHOW_Ub]);
		}break;
		case 10:
		{
			ch452_ShowData(AI_SHOW_Uc,data_bh.aiAmplShow[AI_SHOW_Uc]);
		}break;
		case 12:
		{
			ch452_ShowData(AI_SHOW_F,data_bh.aiAmplShow[AI_SHOW_F]);
		}break;
		case 14:
		{
			ch452_ShowData(AI_SHOW_I0s,data_bh.aiAmplShow[AI_SHOW_I0s]);
			ADdataD[1][jj]=data_bh.aiAmplShow[AI_SHOW_I0s];
			if(++jj>=100)
				jj=0;
		}break;
/*
		case 14:
		{
			ch452_ShowData(AI_SHOW_P,data_bh.aiAmplShow[AI_SHOW_P]);
		}break;
		case 16:
		{
			ch452_ShowData(AI_SHOW_Q,data_bh.aiAmplShow[AI_SHOW_Q]);
		}break;
		case 18:
		{
			ch452_ShowData(AI_SHOW_COS,data_bh.aiAmplShow[AI_SHOW_COS]);
		}break;
		case 20:
		{
			ch452_ShowData(AI_SHOW_MIa,data_bh.aiAmplShow[AI_SHOW_MIa]);
		}break;
		case 22:
		{
			ch452_ShowData(AI_SHOW_MIb,data_bh.aiAmplShow[AI_SHOW_MIb]);
		}break;
		case 24:
		{
			ch452_ShowData(AI_SHOW_MIc,data_bh.aiAmplShow[AI_SHOW_MIc]);
		}break;
zyb */
		default:
			break;
	}
	Ch452DispCount++;
	if(Ch452DispCount >= 16)
		Ch452DispCount=0;
}

void initial_led8flash()
{
	Led_Control.DIVERCE_ALARME=0;
	Led_Control.DIVERCE_COMMNUICATION=0;
	Led_Control.FZ_POZITION=0;
	Led_Control.HZ_POZITION=0;
	Led_Control.LED_Run=0;
	Led_Control.OUT_FZ=0;
	Led_Control.OUT_HZ=0;
	Led_Control.PROTECT_ACTION=0;
}

⌨️ 快捷键说明

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