После того как наиграся с управлением мышкой, захотелось освоить программирование контроллеров MSP430. Начинают обычно с вывода на дисплей "Hello world". Так как на примерах учиться быстрей, был найден подобный исходник прошивки на какомто итальянском сайте. Адрес я к сожалению потерял, а искать опять впадлу. Эта прошивка выводит на дисплей часов слова "Hi Earth". (на классический Hello world программеру символов не хватило, так как в chronos сегментный индикатор). Сегменты зажигаются такими строчками например: lcdmem = (unsigned char *)0x0A29; *lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7));
где 0x0A29 - число которое определяет какие именно 8 сегментов мы можем зажечь второй строчкой. BIT0 - BIT7 номера зажигаемых сегментов. Ниже - исходный код программы которая зажигает на дисплее часов "I LOWE YOU" в среде Code Composer
//****************************************************************************** // eZ430 chronos // вывод на дисплей I "lowe" YOU // Author: Ivan //******************************************************************************
#include "cc430x613x.h" #include <string.h>
void main(void) { unsigned char * lcdmem;
// Clear entire display memory LCDBMEMCTL |= LCDCLRBM + LCDCLRM;
// LCD_FREQ = ACLK/16/8 = 256Hz // Frame frequency = 256Hz/4 = 64Hz, LCD mux 4, LCD on LCDBCTL0 = (LCDDIV0 + LCDDIV1 + LCDDIV2 + LCDDIV3) | (LCDPRE0 + LCDPRE1) | LCD4MUX | LCDON;
// LCB_BLK_FREQ = ACLK/8/4096 = 1Hz LCDBBLKCTL = LCDBLKPRE0 | LCDBLKPRE1 | LCDBLKDIV0 | LCDBLKDIV1 | LCDBLKDIV2 | LCDBLKMOD0;
// I/O to COM outputs P5SEL |= (BIT5 | BIT6 | BIT7); P5DIR |= (BIT5 | BIT6 | BIT7);
// Activate LCD output LCDBPCTL0 = 0xFFFF; // Select LCD segments S0-S15 LCDBPCTL1 = 0x00FF; // Select LCD segments S16-S22 // LCD_B Base Address is 0A00H page 30 y in SALS554 document
lcdmem = (unsigned char *)0x0A21; *lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT2+BIT3)); // I "LOWE"
lcdmem = (unsigned char *)0x0A2B; *lcdmem = (unsigned char)(*lcdmem | (BIT4+BIT5+BIT1+BIT2+BIT3)); //Y
lcdmem = (unsigned char *)0x0A2A; *lcdmem = (unsigned char)(*lcdmem | (BIT0+BIT1+BIT2+BIT3+BIT4+BIT6)); //O
lcdmem = (unsigned char *)0x0A29; *lcdmem = (unsigned char)(*lcdmem | (BIT1+BIT2+BIT3+BIT4+BIT6)); //U
__no_operation(); // For debugger }
На рисунках показаны зажигаемые сегменты соответствующие числу левом верхнем углу картинки:
Я являюсь ламмером в Code Composer и MSP430, и поэтому выкладываю здесь свои ламмерские проекты так что профи случайно зашедшие на этот сайт прошу, не сильно срать в каментах
|