|
Сдела по мотиван найденых в инете проектов и нихрена не работает, физически, схема работает, все сигналы проходят, контроллер шевелится
в функция прога не виснет, статус везде считывается....
#define T6963_CE 0x01
#define T6963_WR 0x02
#define T6963_RD 0x04
#define T6963_CD 0x08
#define T6963_RES 0x10
#define T6963_FS 0x20
#define T6963_IO_PORT PORTA
#define T6963_IN_PORT PINA
#define T6963_IN_DIR DDRA
#define T6963_SERV_PORT PORTC
#define T6963_SERV_DIR DDRC
//
//
//
void Delay(unsigned char D)
{
register unsigned char i,ii;
for(i = 0;i < D;i++)
for(ii = 0;ii < 0xFF;ii++) asm volatile ("nop");
}
//
//
//
unsigned char T6963ReadStatus(void)
{
unsigned char assa;
T6963_IN_DIR = 0x00;
T6963_SERV_DIR |= T6963_CD + T6963_WR + T6963_CE + T6963_RD;
T6963_SERV_PORT = 0xFF;
T6963_SERV_PORT &= ~T6963_RD;
T6963_SERV_PORT &= ~T6963_CE;
Delay(2);
assa = T6963_IN_PORT;
T6963_SERV_PORT |= T6963_CE;
return assa;
}
//
//
//
void T6963WriteData(unsigned char Data)
{
while(!(T6963ReadStatus()&0x0b));
T6963_IN_DIR = 0xFF;
T6963_IO_PORT = Data;
T6963_SERV_DIR |= T6963_CD + T6963_WR + T6963_CE;
T6963_SERV_PORT = 0xFF;
T6963_SERV_PORT &= ~T6963_CD;
T6963_SERV_PORT &= ~T6963_WR;
T6963_SERV_PORT &= ~T6963_CE;
Delay(1);
T6963_SERV_PORT |= T6963_CE;
}
//
//
//
void T6963WriteCommand(unsigned char Data)
{
while(!(T6963ReadStatus()&0x0b));
T6963_IN_DIR = 0xFF;
T6963_IO_PORT = Data;
T6963_SERV_DIR |= T6963_CD + T6963_WR + T6963_CE;
T6963_SERV_PORT = 0xFF;
T6963_SERV_PORT |= T6963_CD;
T6963_SERV_PORT &= ~T6963_WR;
T6963_SERV_PORT &= ~T6963_CE;
Delay(1);
T6963_SERV_PORT |= T6963_CE;
}
//
//
//
unsigned char T6963ReadData(void)
{
unsigned char assa;
while(!(T6963ReadStatus()&0x0b));
T6963_IN_DIR = 0x00;
T6963_SERV_DIR |= T6963_CD + T6963_WR + T6963_CE + T6963_RD;
T6963_SERV_PORT = 0xFF;
T6963_SERV_PORT &= ~T6963_CD;
T6963_SERV_PORT &= ~T6963_RD;
T6963_SERV_PORT &= ~T6963_CE;
Delay(2);
assa = T6963_IN_PORT;
T6963_SERV_PORT |= T6963_CE;
return assa;
}
//
//
//
void T6963WriteChar(unsigned char Data)
{
while(!(T6963ReadStatus()&0x0b));
T6963WriteData(Data);
T6963WriteCommand(0xC0);
}
//
// Процедура инициализации
//
void T6963Init(void)
{
T6963WriteData(0x00); // Text home adres
T6963WriteData(0x08);
T6963WriteCommand(0x40);
T6963WriteData(0xFF); // Text area
T6963WriteData(0x00);
T6963WriteCommand(0x41);
T6963WriteData(0x00); // Graphics home adres
T6963WriteData(0x00);
T6963WriteCommand(0x42);
T6963WriteData(0xFF); // Graphics area
T6963WriteData(0x07);
T6963WriteCommand(0x43);
T6963WriteData(0x00); // Mode set "EXOR"
T6963WriteData(0x00);
T6963WriteCommand(0x81);
T6963WriteData(0x00); // Adres point set
T6963WriteData(0x00);
T6963WriteCommand(0x24);
T6963WriteData(0x00); // Display mode set "Text On, Graphics Off"
T6963WriteData(0x00);
T6963WriteCommand(0x97);
/* T6963WriteData(0x00); // Set cursor pos
T6963WriteData(0x00);
T6963WriteCommand(0x21);
*/
}
Чего этой .... еще надо???
E-mail: info@telesys.ru