?? ch452.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 + -