[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено msp43 29 мая 2006 г. 13:09
В ответ на: I2C и TIC32 отправлено pashevich 29 мая 2006 г. 11:28

#include
#define CON1 (0x80)
#define CON2 (0x40)

void i2c_write (unsigned char DAT_I2C);
//void RXBytes (void);
//void TXBytes (void);
void NOPNOP (void);
volatile unsigned int i;
unsigned int cnt, zzz;
unsigned char pattern;
unsigned char Y_DISPLAY;
const unsigned char Shrift[512] = {
0x7F,0x04,0x08,0x04,0x7F,0x00,
0x70,0x1C,0x13,0x1C,0x70,0x00,
0x7F,0x08,0x0C,0x3A,0x41,0x00,
0x3E,0x41,0x41,0x41,0x22,0x00,
0x7F,0x10,0x0C,0x02,0x7F,0x00,
0x7F,0x04,0x08,0x04,0x7F,0x00
};

const unsigned char qweqwe[512] = {
0 , 16 , 16 , 16 ,240 , 16 , 16 , 0 , 0 ,240
, 0 , 0 ,240 , 16 , 16 , 16 , 16 , 0 , 0 , 16
, 16 , 16 , 16 ,224 , 0 , 0 , 32 , 16 , 16 , 16
,224 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
, 0 ,254 ,254 ,254 , 14 , 14 , 14 , 14 , 14 , 14
,142 ,142 ,142 ,254 ,254 ,254 , 64 , 64 , 32 , 32
, 32 , 32 , 32 , 32 , 32 , 32 , 32 , 16 , 16 ,144
,144 ,144 ,144 , 80 , 80 , 80 , 48 , 48 , 48 , 16
, 16 , 16 , 16 , 24 , 24 , 24 , 20 , 20 , 20 , 20
, 18 , 18 , 28 , 16 , 48 ,208 , 32 , 32 , 32 , 32
, 32 , 32 , 32 , 32 , 32 , 64 , 64 , 64 , 64 , 64
,128 ,128 ,128 , 0 , 0 , 0 , 0 , 0 , 0 , 0
, 0 , 0 , 63 , 0 , 0 , 0 , 0 , 63 , 0 , 0
, 31 , 32 , 32 , 32 , 32 , 0 , 0 , 32 , 33 , 33
, 33 , 30 , 0 , 0 , 32 , 56 , 38 , 35 , 32 , 0
, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,255
,255 ,255 ,224 ,224 ,224 ,224 ,226 ,229 ,232 ,232
,232 ,255 ,255 ,255 , 16 , 16 , 32 , 32 , 32 , 32
, 32 , 32 , 32 , 32 , 32 , 67 , 67 , 66 , 68 , 68
, 68 , 68 , 72 , 72 , 72 , 72 , 80 , 80 , 80 , 80
, 96 , 96 , 96 , 96 , 64 , 64 , 64 , 64 ,192 ,192
,192 ,192 , 64 , 64 , 33 , 38 , 40 , 48 , 96 ,160
, 32 , 32 , 32 , 16 , 16 , 16 , 16 , 16 , 8 , 8
, 8 , 5 , 2 , 0 , 0 , 0 , 0 , 0 , 0 ,128
,252 , 4 , 4 ,252 , 0 , 0 , 0 ,224 , 32 , 32
, 32 ,224 , 0 , 0 ,192 , 32 , 32 , 32 ,224 , 0
, 0 ,224 , 4 , 4 , 4 ,224 , 0 , 0 ,252 , 36
, 52 , 40 ,224 , 0 , 0 ,192 , 32 , 32 , 32 ,224
, 0 , 0 ,224 , 32 , 32 , 32 ,224 , 0 , 0 , 0
, 0 , 0 , 0 , 0 , 0 ,252 ,132 ,132 ,132 ,132
,124 , 0 , 0 ,252 , 4 , 4 , 4 , 4 , 0 , 0
,252 , 68 , 68 , 68 , 68 , 0 , 0 ,128 ,252 , 68
, 68 ,108 ,152 , 0 , 0 ,124 , 68 , 68 , 68 ,132
, 0 , 0 , 4 , 68 , 68 , 68 ,184 , 0 , 0 , 16
, 9 ,253 , 1 , 1 , 2 , 2 , 2 , 2 , 7 , 4
, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
, 0 , 0 , 0 , 0 , 0 , 0 , 24 , 15 , 8 , 8
, 8 , 15 , 24 , 0 , 0 ,127 , 8 , 8 , 8 , 7
, 0 , 0 , 7 , 8 , 8 , 8 , 7 , 8 , 0 , 7
, 8 , 8 , 8 , 15 , 0 , 0 , 7 , 8 , 8 , 8
, 7 , 0 , 0 , 7 , 9 , 9 , 9 , 9 , 0 , 0
,127 , 8 , 8 , 8 , 7 , 0 , 0 , 0 , 0 , 0
, 0 , 0 , 0 , 15 , 0 , 0 , 0 , 0 , 0 , 0
, 0 , 7 , 8 , 8 , 8 , 8 , 0 , 0 , 15 , 0
, 0 , 0 , 0 , 0 , 0 , 7 , 12 , 8 , 8 , 12
, 7 , 0 , 0 , 8 , 8 , 8 , 8 , 7 , 0 , 0
, 8 , 8 , 8 , 8 , 7 , 0 , 0 , 0 , 0 , 15
, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
, 0 , 0
};
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Disable the Watchdog.
P3SEL |= 0x0a; // Assign I2C pins to module
P3DIR = 0x04; // P3.2 ?????
U0CTL |= I2C + SYNC; // Switch USART0 to I2C mode
U0CTL &= ~I2CEN; // Recommended init procedure
I2CTCTL = I2CSSEL_2+I2CRM ; // SMCLK
I2CSCLH = 0x03; // High period of SCL
I2CSCLL = 0x03; // Low period of SCL
// I2CNDAT = 0x03; // Transmit Three byte
I2CSA = 0x3C; // Slave address
U0CTL |= I2CEN; // Enable I2C, 7 bit addr,

P3OUT = 0x00; //
for (i=0;i<1000;i++);
P3OUT = 0x04;

// ---------------------------------------------------------------
// Инициализация PCF8531
// ---------------------------------------------------------------
U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
// U0CTL |= MST; // Master
//I2CTCTL |= I2CTRX + I2CSTT; // Write, ST
i2c_write(CON1); i2c_write(0x01); // на основн стр
i2c_write(CON1); i2c_write(0x20); // Enable chip, горизонтальная
i2c_write(CON1); i2c_write(0x09); // page select
i2c_write(CON1); i2c_write(0x0C); // Display Mode: NORMAL
i2c_write(CON1); i2c_write(0x05); // MUX-rate: 1/34
i2c_write(CON1); i2c_write(0x14); // Bias system: 3
i2c_write(CON1); i2c_write(0x01); // на основн стр
i2c_write(CON1); i2c_write(0x0A); // page select
i2c_write(CON1); i2c_write(0x0A); // voltage multiplication factor: 2*V
i2c_write(CON1); i2c_write(0x20); // temperature coefficient: 0
i2c_write(CON1); i2c_write(0x05); // Vlcd - LOW; Voltage multiplier ON
i2c_write(CON1); i2c_write(0xC4); // Vlcd set
I2CTCTL |= I2CSTP+I2CRM;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
//
zzz=0;
Y_DISPLAY=0x40;
for(;;)
{
if (zzz == 132)
{ zzz=0;
if (Y_DISPLAY==0x43) Y_DISPLAY=0x40;
else Y_DISPLAY++;
}
else zzz +=6;


// ---------------------------------------------------------------
// Очистка ОЗУ драйвера
// ---------------------------------------------------------------
U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON2);
for(cnt = 0; cnt < 640; cnt++)
i2c_write(0x00);
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
//

// ---------------------------------------------------------------
// Выводим на экран картинку
// ---------------------------------------------------------------
U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON1); i2c_write(0x01); // на основн стр
i2c_write(CON1); i2c_write(Y_DISPLAY); // set Y-адрес
i2c_write(CON1); i2c_write(0x80); // set X-адрес
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
//

U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON2);
i=0;
for(cnt = 0; cnt < 640; cnt++)
{
if (cnt < 512)
{ if (cnt > zzz) {i2c_write(Shrift[i]); i++;}
else i2c_write(0x00);
}
else i2c_write(0x00);
}
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
//
U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON1); i2c_write(0x01); // на основн стр
i2c_write(CON1); i2c_write(0x20); //
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
for (i=0;i<10000;i++); // Задержка
/*
// for (i=0;i<60000;i++); // Задержка
// for (i=0;i<60000;i++); // Задержка
// pattern ^= 0xFF;
// U0CTL |= MST;
// I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
// i2c_write(CON2);
// for(cnt = 0; cnt < 640; cnt++)
// {
// for (i=0;i<1000;i++);
// i2c_write(pattern);
// }
// I2CTCTL |= I2CSTP;
// while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
// for (i=0;i<20000;i++);

//for(;;)
//{
// NOPNOP ();
// 11111111111111111111111111111111111111111111111111111111111111111111111111

// pattern = 0;
// ---------------------------------------------------------------
// Очистка ОЗУ драйвера
// ---------------------------------------------------------------
U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON2);
for(cnt = 0; cnt < 640; cnt++)
i2c_write(0x00);
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
//
U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON1); i2c_write(0x01); // на основн стр
i2c_write(CON1); i2c_write(0x20); // вертикальная адресация
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
// ---------------------------------------------------------------
// Выводим на экран картинку
// ---------------------------------------------------------------
U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON1); i2c_write(0x01); // на основн стр
i2c_write(CON1); i2c_write(0x40); // set Y-адрес
i2c_write(CON1); i2c_write(0x80); // set X-адрес
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
//


U0CTL |= MST;
I2CTCTL |= I2CSTT+I2CTRX+I2CRM; // Initiate transfer
i2c_write(CON2);
for(cnt = 0; cnt < 640; cnt++){
if ((cnt & 0x0001)== 0) pattern = 0xff;
else pattern = 0x00;

if (cnt < 512) i2c_write(pattern);
else i2c_write(0x00);
}
I2CTCTL |= I2CSTP;
while ((I2CTCTL & I2CSTP) == 0x02); // Wait for Stop Condition
//

for (i=0;i<50000;i++); // Задержка
*/
}
}

/////////////////////////////////////////////////////////////////////////////////////////////
void NOPNOP (void)
{}

void i2c_write (unsigned char DAT_I2C)
{
// Master mode
while ((I2CIFG & TXRDYIFG) == 0); // Wait for transmitter to be ready
I2CDRB = DAT_I2C; // Load Control Byte
}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru