ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
83835
vekt (17.03.2007 17:56, просмотров: 4384)
Никак не могу врубить HD44780 с MSP430. Отображает только первую строку пустых знакомест. Помогите кто может примером. #define DB4 0x01 // P3.0 #define DB5 0x02 // P3.1 #define DB6 0x04 // P3.2 #define DB7 0x08 // P3.3 #define WDT_1ms 1 // 0.5 мс * 1 = 0.5 мс #define WDT_5ms 9 // 0.5 мс * 10 = 5 мс #define WDT_20ms 39 // 0.5 мс * 40 = 20 мс #define WDT_second 1999 // 0.5 мс * 2000 = 1 секунда void main(void) { WDTCTL = WDTPW + WDTHOLD; P3DIR |= DB4 + DB5 + DB6 + DB7; P2DIR |= LED + RS + RW + E; P2OUT = 0; Set_DCO(); timer = 0; WDTCTL = WDT_MDLY_0_5; // 0,5 мс IE1 |= WDTIE; // Разрешить прерывание от WDT _BIS_SR(GIE); WDT_interval = WDT_second*2; _BIS_SR(LPM0_bits); //----Инициализация LCD------ P3OUT &= 0x0F; //очистка WDT_interval = WDT_20ms; _BIS_SR(LPM0_bits); // ждем пока LCD загрузиится P2OUT &= ~RS; //команда Set_Bus(0x03); //команда 30 WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); P2OUT &= ~RS; //команда Set_Bus(0x03); //команда 30 WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); P2OUT &= ~RS; //команда Set_Bus(0x03); //команда 30 WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); P2OUT &= ~RS; //команда Set_Bus(0x02); //команда 30 WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); //команда 20 из 4 разрядного режима P2OUT &= ~RS; //команда Set_Bus(0x02); //команда 20 старшая тетрада (шина 4 разряда) WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); Set_Bus(0x08); //младшая тетрада (две строки) WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); //Дисплей ВЫКЛ P2OUT &= ~RS; //команда Set_Bus(0x00); //команда 20 старшая тетрада WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); Set_Bus(0x08); //младшая тетрада (включить дисплей) WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); //Очистка дисплея P2OUT &= ~RS; //команда Set_Bus(0x00); //команда 20 старшая тетрада WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); Set_Bus(0x01); //младшая тетрада (включить дисплей) WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); //Дисплей, курсор - ВКЛ P2OUT &= ~RS; //команда Set_Bus(0x00); //команда 20 старшая тетрада WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); Set_Bus(0x0e); //младшая тетрада (включить дисплей) WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); //Выбор режима отображения P2OUT &= ~RS; //команда Set_Bus(0x00); //команда 20 старшая тетрада WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); Set_Bus(0x06); //младшая тетрада (смещение) WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); P2OUT &= ~RS; //команда Set_Bus(0x08); //переход на первую строку WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); Set_Bus(0x00); WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); P2OUT |= RS; //данные Set_Bus(0x05); WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); Set_Bus(0x03); WDT_interval = WDT_1ms; _BIS_SR(LPM0_bits); for (;;) { WDT_interval = WDT_5ms; _BIS_SR(LPM0_bits); P2OUT ^= LED; } } #pragma vector = WDT_VECTOR __interrupt void WDTISR(void) { timer++; if (timer > WDT_interval) { timer = 0; _BIC_SR_IRQ(LPM0_bits); //проснись } } void Set_Bus(char data) { P3OUT &= 0x0F; //очистка P2OUT |= E; P3OUT |= data; P2OUT &= ~E; }