2008年11月19日 星期三

C語言練習















好幾天沒練習C語言了 這幾天用某牌的溫度ic作練習 到目前為止 雜亂的寫了些c語言
的程式 都是所謂的一條通 哈哈就是一條通到底 事實上就當作我個人的 練習簿吧
在這裡貼成是好麻煩喔 每次都老半天 沒辦法貼上去就好 都要移來移去的 真是面倒臭
以下程式 有空再編輯 先貼上再說 我想應該沒觀眾會看 哈哈只有我在看而已的啦
//  Date:2008_11_15          
#include "REG_MPC82G516.h"
#include "INTRINS.H"
// io port Description
#define _ONE P24
#define _TWO P27
#define _THREE P26
#define _FOUR P25
#define BIBI P20
#define BARUBO P16
#define SCL P11
#define SDA P12
//const

unsigned int temp,temp_0,read_code0,read_code1,read_code2,temp_data;
_7_seg[12]={0x09,0xED,0x2A,0x68,0xCC,0x58,0x18,0xC9,0x08,0xC8,0xff,0xfe};
int time_cnt,sec_cnt;
unsigned char _1_sec_cnt=0x14 ;
unsigned char scan_cnt=0X00 ;
unsigned char disp_0,disp_1,disp_2,disp_3 ;
unsigned char disp_10,disp_11,disp_12,disp_13 ;
bit on_flag,eeprom_err;
unsigned char TCN75A_rd_cmd=0x91 ;
unsigned char TCN75A_wr_cmd=0x90 ;
unsigned char addre_0=0x00 ;
// ----------------------------------------------
void LCD_S_Delay(void)
{
int S_Loop ;
int Null_Var ;

for ( S_Loop = 0 ; S_Loop < 200 ; S_Loop ++ )
Null_Var += 1 ;

}

// ----------------------------------------------
void LCD_L_Delay(int WAIT_LOOP)
{
int L_Loop ;

for ( L_Loop = 0 ; L_Loop < WAIT_LOOP ; L_Loop ++ )
LCD_S_Delay( ) ;
}

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 = 0XFA ;
RCAP2L = 0X00 ;

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=0x14 ;}

if (time_cnt>=60)
{sec_cnt+=1;
time_cnt=0; }
// 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 �N�i���������ҭn���檺����,�B���槹,���Wbreak���X
// �M�� if �����㤣�P ���`�N
switch(scan_cnt)
{case 0:
P0=0XFF;
_ONE=0x00;
_TWO=0x01;
_THREE=0X01;
_FOUR=0X01;

P0= _7_seg[disp_0] ;
scan_cnt ++ ;
break;

case 1:
P0=0XFF;
_ONE=0x01;
_TWO=0x00;
_THREE=0X01;
_FOUR=0X01;

P0= _7_seg[disp_1] ;
scan_cnt ++ ;
break;

case 2:
P0=0XFF;
_ONE=0x01;
_TWO=0x01;
_THREE=0X00;
_FOUR=0X01;

P0= _7_seg[disp_2] ;
scan_cnt ++ ;
break;
case 3:
P0=0XFF;
_ONE=0x01;
_TWO=0x01;
_THREE=0X01;
_FOUR=0X00;

// P0= _7_seg[disp_3] ;
if (on_flag==1)
P0= _7_seg[10] ;

else P0= _7_seg[11] ;
scan_cnt ++ ;
break;
}

}
void read_tcn75a_2_byte (void)
{
//--- START BIT
SDA=0X01;SCL=0X01;
LCD_S_Delay();
SDA=0X00;
LCD_S_Delay();
SCL=0X00;
LCD_S_Delay();
//-----WRITE CAMMAND CODE 0XA0------
if ( (TCN75A_wr_cmd&0x80) == 0x80 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_wr_cmd&0x40) == 0x40 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_wr_cmd&0x20) == 0x20 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_wr_cmd&0x10) == 0x10 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_wr_cmd&0x08) == 0x08 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_wr_cmd&0x04) == 0x04 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_wr_cmd&0x02) == 0x02 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_wr_cmd&0x01) == 0x01 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

_nop_();
SDA=0x01;
LCD_S_Delay();
SCL=0x01;
LCD_S_Delay();
if (SDA==0X01) eeprom_err=0x01;
else eeprom_err=0x00;
SCL=0x00;
_nop_();

//-----WRITE address------
if ( (addre_0&0x80) == 0x80 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (addre_0&0x40) == 0x40 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (addre_0&0x20) == 0x20 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (addre_0&0x10) == 0x10 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (addre_0&0x08) == 0x08 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (addre_0&0x04) == 0x04 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (addre_0&0x02) == 0x02 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (addre_0&0x01) == 0x01 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
//------------
_nop_();
SDA=0x01;
LCD_S_Delay();
SCL=0x01;
LCD_S_Delay();
if (SDA==0X01) eeprom_err=0x01;
else eeprom_err=0x00;
SCL=0x00;
_nop_();

LCD_S_Delay();

// ------ re_start
//--- START BIT
SDA=0X01;SCL=0X01;
LCD_S_Delay();
SDA=0X00;
LCD_S_Delay();
SCL=0X00;
LCD_S_Delay();
//-----WRITE CAMMAND CODE 0XA1------
if ( (TCN75A_rd_cmd&0x80) == 0x80 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_rd_cmd&0x40) == 0x40 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_rd_cmd&0x20) == 0x20 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_rd_cmd&0x10) == 0x10 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_rd_cmd&0x08) == 0x08 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_rd_cmd&0x04) == 0x04 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_rd_cmd&0x02) == 0x02 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

if ( (TCN75A_rd_cmd&0x01) == 0x01 ) SDA=0x01;
else SDA=0x00;
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

_nop_();
SDA=0x01;
LCD_S_Delay();
SCL=0x01;
LCD_S_Delay();
if (SDA==0X01) eeprom_err=0x01;
else eeprom_err=0x00;
SCL=0x00;
_nop_();

//----- read data
read_code0=0x00;

SDA=0x01;
_nop_();
_nop_();
_nop_();
_nop_();

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X80;
else read_code0=read_code0&0x7f;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
LCD_S_Delay();
LCD_L_Delay(38);

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X40;
else read_code0=read_code0&0xbf;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
LCD_S_Delay();
LCD_L_Delay(38);

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X20;
else read_code0=read_code0&0xdf;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
LCD_S_Delay();
LCD_L_Delay(38);

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X10;
else read_code0=read_code0&0xef;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
LCD_S_Delay();
LCD_L_Delay(38);

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X08;
else read_code0=read_code0&0xf7;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
LCD_S_Delay();
LCD_L_Delay(38);

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X04;
else read_code0=read_code0&0xfb;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
LCD_S_Delay();
LCD_L_Delay(38);

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X02;
else read_code0=read_code0&0xfd;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
LCD_S_Delay();
LCD_L_Delay(38);

// SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code0=read_code0|0X01;
else read_code0=read_code0&0xfe;
SCL=0x01;
LCD_S_Delay();
SCL=0x00;

//ack

SDA=0x00; // master ack
// SCL=0x00;
LCD_S_Delay();
// if (SDA==0X01) eeprom_err=0x01;
// else eeprom_err=0x00;
SCL=0x01;
LCD_L_Delay(38);
SCL=0x00;
LCD_L_Delay(8);
SDA=0x01;
// next byte

read_code1=0x00;

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X80;
else read_code1=read_code1&0x7f;
SCL=0x00;
LCD_S_Delay();

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X40;
else read_code1=read_code1&0xbf;
SCL=0x00;
LCD_S_Delay();

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X20;
else read_code1=read_code1&0xdf;
SCL=0x00;
LCD_S_Delay();

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X10;
else read_code1=read_code1&0xef;

SCL=0x00;
LCD_S_Delay();

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X08;
else read_code1=read_code1&0xf7;
SCL=0x00;
LCD_S_Delay();

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X04;
else read_code1=read_code1&0xfb;
SCL=0x00;
LCD_S_Delay();

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X02;
else read_code1=read_code1&0xfd;
SCL=0x00;
LCD_S_Delay();

SCL=0x01;
LCD_S_Delay();
if (SDA==0x01) read_code1=read_code1|0X01;
else read_code1=read_code1&0xfe;
SCL=0x00;
LCD_S_Delay();
read_code2 = read_code1;

// --- NAK
SDA=0x01;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SCL=0x00;
//------ stop bit
SDA=0x00;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0x01;
LCD_S_Delay();
SDA=0x01;
LCD_S_Delay();
//-----------------

read_code1 = read_code1&0x80;
// read_code1 = read_code1>>7;
read_code0 = read_code0<<1;

if (read_code1==0x80) {temp_data = read_code0 + 0x01 ;}
else {temp_data = read_code0 ;}
// temp_data = read_code1 | read_code0 ;
// read_code2 = read_code1;
disp_10 = temp_data % 10 ;
disp_11 = (temp_data/10)%10 ;
disp_12 = (temp_data%1000)/100 ;
temp=(temp_data*10)/2;

disp_10 = temp % 10 ;
disp_11 = (temp/10)%10 ;
disp_12 = (temp%1000)/100 ;

// disp_13 = temp_data / 1000 ;
temp=((disp_12*100+disp_11*10+disp_10)*10);
temp_0=(temp*10);
disp_10 = temp_0 % 10 ;
disp_11 = (temp_0/10)%10 ;
disp_12 = (temp_0%1000)/100 ;
disp_3 = temp_0 / 1000 ;
}

void Main(void)
{
SDA=0x01;
read_tcn75a_2_byte ( );
// Init_IRQ();
BARUBO=0X01; //BARUBO OFF
while (1)
{

LCD_L_Delay(30);
read_tcn75a_2_byte ( );

//
}
}

2008年11月1日 星期六