目錄:
1.PDG2設定
2.接線
3.程式設計
1.PDG2設定
使用 標準模式
EEPROM的 SDA---->PB2
EEPROM的 SCL----->PB1
記得+上拉電阻
2.程式設計
概述:分別將兩頁資料寫入EEPROM,再從EEPROM讀出
,利用讀出的資料存入RX矩陣,再利用,矩陣內容使七段顯示器輪流閃爍。
//0~9
int ssc[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int chan[4]={0xef,0xf7,0xfb,0xfd};
//旗子
int start=1;
//變數
int i=0,j=0,k,x,y,a=2,b=2;
//測試用輸入
//i2c 1 c1 2 c2
unsigned char input[6]={0x0,0x40,0x99,0x88,0x77,0x66};
unsigned char rx[128]={0};
//中斷旗標 為了防止TX,RX有資料還沒送完
int f_IICTX=1,f_IICRX=1;
//地址
unsigned char address[2]={0,0};
// f e a g d b c dot
int led[8]={0x20,0x10,0x01,0x40,0x08,0x02,0x04,0x80};
unsigned char page1[66]={0,0}; //第一頁
unsigned char page2[66]={0,0}; //第二頁
void main(void)
{
R_PG_Clock_Set();
//iic
R_PG_I2C_Set_C0();
//七段 + 小數點
R_PG_IO_PORT_Set_P7();
R_PG_IO_PORT_Set_P9();
R_PG_IO_PORT_Set_PB(); //小數點在 B0;
//Timer
R_PG_Timer_Start_CMT_U0_C0();
//製造第二頁的矩陣 先存led 值 再存 chanal位置
for(y=3;y>-1;y--)
for(x=7;x>-1;x--)
{
// 2 4 6 8
page2[a]=led[x];
// 3 5 7 9
page2[a+1]=chan[y];
a=a+2;
}
//製造第一頁的矩陣
for(y=0;y<4;y++)
for(x=0;x<8;x++)
{
// 2 4 6 8
page1[b]=led[x];
// 3 5 7 9
page1[b+1]=chan[y];
b=b+2;
}
//第一頁的開始位置 在 0x00
page1[0]=0x0;
page1[1]=0x0;
//第二頁的開始位置在 0x40
page2[0]=0x0;
page2[1]=0x40;
while(1)
{
if(start)
{
start=0;
/* //發送 send 第一頁到EEPROM
R_PG_I2C_MasterSend_C0(0xa0,page1,64); //62 個 data
while(f_IICTX);
f_IICTX=1;
for(k=0;k<88888;k++); //delay
//發送 send 第二頁到EERPOM
R_PG_I2C_MasterSend_C0(0xa0,page2,64); //62 個 data
while(f_IICTX);
f_IICTX=1;
for(k=0;k<88888;k++); //delay
*/
//接收 receive 接收前要先送位置 這邊送 0x00直接送最開始讀到最後
R_PG_I2C_MasterSend_C0(0xa0,address,2);
while(f_IICTX);
f_IICTX=1;
for(k=0;k<88888;k++); //delay
R_PG_I2C_MasterReceive_C0(0xa1,rx,128); //直接接收128個放到RX矩陣
while(f_IICRX);
f_IICRX=1;
for(k=0;k<88888;k++); //delay
}
//關燈 防止殘影
R_PG_IO_PORT_Write_P7(0xff);
R_PG_IO_PORT_Write_P7(~rx[i]); //0 2 4 6 8
if(rx[i]==0x80) //0x80是小數點
R_PG_IO_PORT_Write_PB0(0);
else
R_PG_IO_PORT_Write_PB0(1);
//Chanal
R_PG_IO_PORT_Write_P9(rx[i+1]); // 1 3 5 7
//如果矩陣跑到最大那就從頭
if(i==128)
i=0;
}//whle
}//end
//Rx中斷
IIC0MasterReFunc()
{
f_IICRX=0;
}
//Tx中斷
IIC0MasterTrFunc()
{
f_IICTX=0;
}
//Timer 每0.25秒進入一次
Cmt0IntFunc()
{
i+=2;
}
有沒有Rx62t的I²C 對 紅外線感測器 傳輸 的範例
回覆刪除