2008年10月17日 星期五

C語言練習II

我想C語言要進步,方法之一就是常寫吧
// Function:expender ma09 test for c
// Description:
// Date:2008_10_18 by naga lee
#include "REG_MPC89E58.H"
// io port Description
#define _ONE P24
#define _TWO P27
#define _THREE P26
#define _FOUR P25
#define BIBI P20
#define MA09_CDB P11
#define MA09_SCLK P12
#define MA09_SIN P13
const _7_seg[10]={0x24,0xed,0x15,0x85,0xcc,0x86,0x06,0xe5,0x04,0xc4};
unsigned char scan_cnt=0X00 ;
int time_cnt;
unsigned char _1_sec_cnt=0x15 ;
unsigned char disp_0,disp_1,disp_2,disp_3 ;
unsigned char show_data ;
void Delay_ms(unsigned int dly)
{ unsigned int count;
for (; dly>0;dly--) ;
for (count=0;count<252;count++);}>
// MA09 void RESET_MA09(void)
{ const unsigned char com_code_0 = 0xfe;
const unsigned char com_code_1 = 0xff;
MA09_CDB=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x80) == 0x80 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x40) == 0x40 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x20) == 0x20 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x10 )== 0x10 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x08) == 0x8 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x04) == 0x4 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x02) == 0x2 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_0&0x01) == 0x1 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x80) == 0x80 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x40) == 0x40 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x20) == 0x20 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x10) == 0x10 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x08) == 0x8 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x04) == 0x4 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x02) == 0x2 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
if ( (com_code_1&0x01) == 0x1 ) MA09_SIN=0x01;
else MA09_SIN=0x00;
MA09_SCLK=0x01;
MA09_SCLK=0x00;
// must wait t sec Delay_ms(438);
}
void SET_MA09_ADDR(void)
{
const unsigned char com_code_2=0xfd;
unsigned char com_code_3 = 0x00;
MA09_CDB=0X01;
MA09_SCLK=0X00;
if ( (com_code_2&0x80)== 0x80 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_2&0x40)== 0x40 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_2&0x20)== 0x20 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_2&0x10)== 0x10 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_2&0x08)== 0x8 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_2&0x04)== 0x4 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_2&0x02)== 0x2 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_2&0x01)== 0x1 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
//------------- write address data
MA09_CDB=0X00;
MA09_SCLK = 0X00;
if ( (com_code_3&0x80)== 0x80 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_3&0x40)== 0x40 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_3&0x20)== 0x20 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_3&0x10)== 0x10 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_3&0x08)== 0x8 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_3&0x04)== 0x4 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_3&0x02)== 0x2 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (com_code_3&0x01)== 0x1 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
}
void LOOP_DATA(unsigned char out_data)
{
MA09_CDB = 0X00;
MA09_SCLK = 0X00;
if ( (out_data&0x80)== 0x80 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_data&0x40)== 0x40 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_data&0x20)== 0x20 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_data&0x10)== 0x10 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_data&0x08)== 0x8 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_data&0x04)== 0x4 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_data&0x02)== 0x2 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_data&0x01)== 0x1 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
}
void LOOP_CMD(unsigned char out_cmd)
{
MA09_CDB = 0X01;
MA09_SCLK=0X00;
if ( (out_cmd&0x80)== 0x80 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_cmd&0x40)== 0x40 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_cmd&0x20)== 0x20 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_cmd&0x10)== 0x10 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_cmd&0x08)== 0x8 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_cmd&0x04)== 0x4 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_cmd&0x02)== 0x2 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
if ( (out_cmd&0x01)== 0x1 ) MA09_SIN = 0X01;
else MA09_SIN = 0X00;
MA09_SCLK = 0X01;
MA09_SCLK = 0X00;
}
void Init_IRQ()
{ // ET0 = 0x01; //Enable Timer Interrupt 0
ET1 = 0x01; //Enable Timer Interrupt 1
ET2 = 0x01; //Enable Timer Interrupt 2
TMOD = 0X10 ;
TH1 = 0X3C ;
TL1 = 0XB0 ;
T2CON = 0X00 ;
RCAP2H = 0XF0 ;
RCAP2L = 0XA8 ;
EA = 0x01 ; //Enable All Interrupt
TR1 = 0X01 ; //START TIMER1
T2CON = 0X04 ; //START TIMER2
}
void Timer_Interrupt_1() interrupt 3
{
_1_sec_cnt -- ;
if (_1_sec_cnt==0)
{
time_cnt ++ ;
_1_sec_cnt=0x15 ;
}
// BIBI = !BIBI ;
TH1 = 0X3C ;
TL1 = 0XB0 ;
}
void Timer_Interrupt_2() interrupt 5
{ T2CON &= 0X7F; //CLEAR TIMER2 INT_FLAG
// BIBI = !BIBI ;
if (scan_cnt>3) scan_cnt=0x00;
// 用 switch 就可直接跳到所要執行的部分,且執行完,馬上break跳出
// 和用 if 有明顯不同 須注意
switch(scan_cnt)
{case 0:
LOOP_CMD(0X0E);
LOOP_DATA(0XFF);
// OUT_DATA MA09_P2
LOOP_CMD(0x0F);
LOOP_DATA(0xFF);
// OUT_DATA MA09_P2
show_data = _7_seg[disp_3] ;
LOOP_CMD(0x0F);
LOOP_DATA(show_data);
// OUT_DATA MA09_P1 SCAN_NUMBER
LOOP_CMD(0X0E);
LOOP_DATA(0xbf);
// LOOP_DATA(0xef);
scan_cnt ++ ;
break;
case 1:
LOOP_CMD(0X0E);
LOOP_DATA(0XFF);
// OUT_DATA MA09_P2
LOOP_CMD(0x0F);
LOOP_DATA(0xFF);
// OUT_DATAMA09_P2
show_data = _7_seg[disp_2] ;
LOOP_CMD(0x0F);
LOOP_DATA(show_data);
// OUT_DATAMA09_P1 SCAN_NUMBER
LOOP_CMD(0X0E);
LOOP_DATA(0xdf);
scan_cnt ++ ;
break;
case 2:
LOOP_CMD(0X0E);
LOOP_DATA(0XFF);
// OUT_DATA MA09_P2
LOOP_CMD(0x0F);
LOOP_DATA(0xFF);
// OUT_DATA MA09_P2
show_data = _7_seg[disp_1] ;
LOOP_CMD(0x0F);
LOOP_DATA(show_data);
// OUT_DATA MA09_P1 SCAN_NUMBER
LOOP_CMD(0X0E);
LOOP_DATA(0xef);
// LOOP_DATA(0xbf);
scan_cnt ++ ;
break;
case 3:
LOOP_CMD(0X0E);
LOOP_DATA(0XFF);
// OUT_DATA MA09_P2
LOOP_CMD(0x0F);
LOOP_DATA(0xFF);
// OUT_DATAMA09_P2
show_data = _7_seg[disp_0] ;
LOOP_CMD(0x0F);
LOOP_DATA(show_data);
// OUT_DATA MA09_P1 SCAN_NUMBER
LOOP_CMD(0X0E);
LOOP_DATA(0x7f);
scan_cnt ++ ;
break;
}
}
int main(void)
{
// --- 初始化 ma09 --- Delay_ms(9);
// 延時 MA09_CDB=0X00;
MA09_SCLK=0X00;
MA09_SIN=0X00;
RESET_MA09();
SET_MA09_ADDR();
Delay_ms(9); // 延時
// ******** set_ma009_p2 ***********
LOOP_CMD(0x06);
LOOP_DATA(0x0);
Delay_ms(9); // 延時
// ******* set ma09_p1 *************
LOOP_CMD(0x02);
LOOP_DATA(0x03);
LOOP_CMD(0x05);
LOOP_DATA(0x0);
Delay_ms(9); // 延時
// -------------------
Init_IRQ();
while(1) {
disp_0 = time_cnt % 10 ;
disp_1 = (time_cnt/10)%10 ;
disp_2 = (time_cnt%1000)/100 ;
disp_3 = time_cnt / 1000 ; }
}

沒有留言:

張貼留言