Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
#include #define LCD_PORTDATA PORTC #define LCD_PORTCONTROL PORTA //***************************************************************************** void WriteCodeL(char b) { WriteByte(b,0,1); }//Команду в левый кристалл индикатора void WriteDataL(char b) { WriteByte(b,1,1); }//Данные в левую половину индикатора int main(void) { LCD_PORTDATA = 0x00; for(p=0; p<4; p++) {//Цикл по всем 4-м страницам индикатора while(1)
#include
//***LCD МЭЛТ
const char Logo122[4][122]=//122x32 pixel, каждые 8 вертикальных точек собраны в байт
{
{ 0xFF,0x01,0x01,0x01,0x01,0xC1,0xE1,0xB1,0x11,0x1D,0x1D,0x7F,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFD,0xF9,0xB1,
0xF1,0xE1,0x81,0x01,0x01,0x01,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,
0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,
0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,
0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,
0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,
0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xFF
},
{ 0xFF,0xE0,0x7C,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x6F,0x6F,0x07,
0x07,0x06,0x00,0x00,0x03,0x03,0x0F,0x3F,0x07,0x07,0x07,0x03,0x03,0x07,0x0F,0x3B,
0x13,0x80,0x80,0x23,0x9E,0xF8,0xF8,0xF8,0xFC,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,
0x80,0x80,0xE0,0xF8,0xFC,0xFE,0xFE,0xFE,0xFC,0x00,0x00,0x00,0x60,0xF0,0xF8,0xF8,
0x7C,0x3E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x3E,0x3E,0x7E,0xFC,0xF8,0xF0,0xE0,
0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFC,0xFE,
0xFE,0xFE,0xFE,0xFC,0x00,0x1C,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0xFE,0xFE,0xFE,
0xFE,0xFE,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x1C,0xFF
},
{ 0xFF,0x07,0x7C,0xE0,0x80,0x00,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0x0F,0x30,0x38,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0xE0,0xF0,0xFC,0xFF,0xFF,0x3F,0x0F,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFE,0xFF,
0x7F,0x7F,0x1F,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x18,0x3C,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x3C,0x3C,0x18,0x00,0x00,0x01,0xFF,
0xFF,0xFF,0xFF,0x00,0x00,0x80,0xE0,0xF0,0xFC,0xFE,0xFF,0x7F,0x1F,0x07,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF
},
{
0xFF,0x80,0x80,0x80,0x80,0x83,0x86,0x8C,0x98,0xB0,0xB0,0xE0,0xC0,0xC0,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xF8,0xFC,0xFF,0xFF,
0xBF,0x8F,0x87,0x81,0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,0x83,0x80,
0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x86,0x8F,0x9F,0xBF,
0xFE,0xFC,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xFC,0xFE,0xBF,0x9F,0x8F,
0x87,0xE3,0xF9,0xFC,0xFF,0xFF,0xBF,0x9F,0x87,0x81,0x80,0x80,0x80,0x80,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,
0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF
}
};
#define LCD_DDRDATA DDRC
#define LCD_PINDATA PINC
#define LCD_DDRCONTROL DDRA
#define LCD_wire_A0 PA3
#define LCD_wire_RW PA4
#define LCD_wire_E PA5
#define LCD_RES PA6
#define LCD_wire_CS PA7
//Низкоуровневые команды
//******************************************************************************/
// Установка цикла обмена по шине данных
#define LCD_StrCYC() {LCD_PORTCONTROL &= ~_BV(LCD_wire_E);} // начало цикла обмена данными
#define LCD_EndCYC() {LCD_PORTCONTROL |= _BV(LCD_wire_E);} // окончание цикла обмена данными
//Процедура выдачи байта в индикатор
void WriteByte(char b, int cd, int lr)
{
LCD_PORTCONTROL &= ~(_BV(LCD_wire_E)); // LCD.E=0;//Начальное значение сигнала индикатору
// LCD.RW=0; LCD.A0=cd; //Выдача байта в индикатор как данных или команды
if (cd) LCD_PORTCONTROL |= (_BV(LCD_wire_A0)); else LCD_PORTCONTROL &= ~(_BV(LCD_wire_A0));
// LCD.CS=lr; LCD.D=b; //Выбрать кристалл индикатора и выдать байт на шину данных индикатора
if (lr) LCD_PORTCONTROL |= (_BV(LCD_wire_CS)); else LCD_PORTCONTROL &= ~(_BV(LCD_wire_CS));
LCD_PORTDATA = b;
_delay_us(1);
LCD_StrCYC(); // начало строба
LCD_EndCYC(); // конец строба
_delay_us(10);
}
void WriteCodeR(char b) { WriteByte(b,0,0); }//Команду в правый кристалл индикатора
void WriteDataR(char b) { WriteByte(b,1,0); }//Данные в правую половину индикатора
//***LCD МЭЛТ
int p;//Номер текущей страницы индикатора
int c;//Позиция по горизонтали выводимого байта
ASSR &= ~_BV(AS2); //Clear AS2 bit PC7 and PC6
// для PC5 и PC4 и PC3 и PC2 - JTAGEN Fuse поставить галку т.е. отключить JTAG
TWCR &= ~(_BV(TWEN)); //Clear TWEN bit PC1
ADCSRA &= ~(_BV(ADEN)); //Clear all ADC on portA
LCD_DDRDATA = 0xFF;
LCD_PORTCONTROL = 0x00;
LCD_DDRCONTROL = 0xFF;
LCD_PORTCONTROL |= _BV(LCD_wire_E); // LCD.E=1;//Начальное значение сигнала индикатору
LCD_PORTCONTROL &= ~_BV(LCD_RES); // LCD.RES=0;//Выдать сигнал RES=0 индикатору
LCD_PORTCONTROL |= _BV(LCD_RES); // LCD.RES=1;//Снять сигнал RES
WriteCodeL(0xE2);//Reset
WriteCodeR(0xE2);//Reset
WriteCodeL(0xEE);//ReadModifyWrite off
WriteCodeR(0xEE);//ReadModifyWrite off
WriteCodeL(0xA4);//Включить обычный режим
WriteCodeR(0xA4);//Включить обычный режим
WriteCodeL(0xA9);//Мультиплекс 1/32
WriteCodeR(0xA9);//Мультиплекс 1/32
WriteCodeL(0xC0);//Верхнюю строку на 0
WriteCodeR(0xC0);//Верхнюю строку на 0
WriteCodeL(0xA1);//Invert scan RAM
WriteCodeR(0xA0);//NonInvert scan RAM
WriteCodeL(0xAF);//Display on
WriteCodeR(0xAF);//Display on
WriteCodeL(p|0xB8);//Установка текущей страницы для левого кристалла индикатора
WriteCodeL(0x13);//Установка текущего адреса для записи данных в левую отображаемую позицию левой половины индикатора
for(c=0; c<61; c++) {//Цикл вывода данных в левую половину индикатора
WriteDataL(Logo122[p][c]);//Вывод очередного байта в индикатор
}
WriteCodeR(p|0xB8);//Установка текущей страницы для правого кристалла индикатора
WriteCodeR(0x00);//Установка текущего адреса для записи данных в левую отображаемую позицию правой половины индикатора
for(c=61; c<122; c++) {//Цикл вывода данных в правую половину индикатора
WriteDataR(Logo122[p][c]);//Вывод очередного байта в индикатор
}
}
{
}
} //main
Ответы