IOPINx
FIOxPIN Регистр, из которого можно получить информацию о текущем состоянии портов ввода/вывода, независимо от направления ввода/вывода и назначения пинов. Нулевой бит соответствует порту Px.0 …. 31й – Px.31. Используется только для чтения.
Код: Выделить всё
#include <lpc213x.h>
/* ЖК подключен к PORT0 выводы 4 битн данных P0.0..3
E - P0.4; RS - P0.5 */
#define E 4
#define RS 5
#define _BV(x) (1<<x)
#define TIME 150 // задержка для F_cpu=72 MHz
void HD44780_data_send(unsigned char p);
void HD44780_com(unsigned char p);
void HD44780_dat(unsigned char p);
void HD44780_init(void);
void HD44780_puts(unsigned char *data);
void HD44780_3dig (unsigned long val, unsigned char pos);
void HD44780_4dig(unsigned long val, unsigned char pos);
void HD44780_5dig(unsigned long val, unsigned char pos);
void pause(unsigned int p)
{
unsigned int i=0;
for (i=0;i<p;i++);
}
void HD44780_data_send(unsigned char p) //"p"-байт данных или команд
{
FIO0CLR |=0x0000000f;
//FIO0CLR |= ~(p>>4);
FIO0SET |= (p>>4); //Старший ниббл
pause(TIME);
FIO0CLR |= _BV(E); //EN=0, запись информации в ЖКИ
pause (TIME);
FIO0SET |= _BV(E); //Сигнал EN=1
FIO0CLR |=0x0000000f;
// FIO0CLR |= ~(p & 0x0f);
FIO0SET |= (p & 0x0f); //Младший ниббл
pause (TIME);
FIO0CLR |= _BV(E); //EN=0, запись информации в ЖКИ
pause (5*TIME);
}
void HD44780_com(unsigned char p)
{
FIO0CLR |= _BV(RS);
FIO0SET |= _BV(E); //RS=0, EN=1
HD44780_data_send(p); //Вызов общей части функций lcd_com, lcd_dat
}
void HD44780_dat(unsigned char p)
{
FIO0SET |= _BV(RS);
FIO0SET |= _BV(E); //RS=1, EN=1
HD44780_data_send(p); //Вызов общей части функций lcd_com, lcd_dat
}
void HD44780_init(void) //Режим 4-бит, мигающий курсор
{ HD44780_com(0x33); pause(500*TIME); //Подготовка
HD44780_com(0x32); HD44780_com(0x28); //4-бит, две строки
HD44780_com(0x08); //Полное выключение дисплея
HD44780_com(0x01); pause(1000*TIME); //Очистка дисплея
HD44780_com(0x06); //Направление сдвига курсора - вправо
HD44780_com(0x0c); //Включение дисплея,отсутствуют курсор
}
void HD44780_puts(unsigned char *data) //"data"=стринг
{ while(*data) HD44780_dat(*(data++)); //Смена символов
}
//---------- вывода значений на ЖКИ--------------
void HD44780_5dig(unsigned long val, unsigned char pos)
{
HD44780_com(pos); //Установка курсора
HD44780_dat(val/10000 + 0x30); //Индикация единиц
HD44780_dat((val%10000)/1000 + 0x30);
//HD44780_dat(','); //Индикация запятой
HD44780_dat((val%1000)/100 + 0x30); //Сотни
HD44780_dat((val%100)/10 + 0x30); //Десятки
HD44780_dat(val%10 + 0x30); //Единицы
return;
}
void HD44780_4dig(unsigned long val, unsigned char pos)
{
HD44780_com(pos); //Установка курсора в нижней строке
HD44780_dat(val/1000 + 0x30); //Индикация единиц
// HD44780_dat(','); //Индикация запятой
HD44780_dat((val/100)%10 + 0x30); //Сотни
HD44780_dat((val/10)%10 + 0x30); //Десятки
HD44780_dat(val%10 + 0x30); //Единицы
return;
}
//---------- вывода значений на ЖКИ--------------
void HD44780_3dig (unsigned long val, unsigned char pos)
{
HD44780_com(pos); //Установка курсора в нижней строке
HD44780_dat((val/100)%10 + 0x30); //Сотни
HD44780_dat(val/10 + 0x30); //Индикация единиц
HD44780_dat(val%10 + 0x30); //Единицы
return;
}
int main(void)
{
IO0DIR=0x0000003F;
HD44780_init ();
//HD44780_4dig(1234,1);
while(1){
//HD44780_data_send('D');
HD44780_3dig(567,3);
/* Если только это оставить-ножки моргают.
IO0SET= 0x0000003F;
pause(300);
IO0CLR= 0x0000003F;
pause(300);
*/
}}
Элементарно.ARM7 писал(а):Круто! А поточнее обьяснить..? Цитата-
PLL позволяет входную тактовую частоту, находящуюся в пределах от 10 до 25 МГц,
умножать, получая внутреннюю тактовую частоту в пределах от 10 до 60 МГц. Множитель должен
быть целым числом в диапазоне от 1 до 32 (для LPC2106 – от 1 до 6).-Это ясно.
Частота работы внутреннего управляемого генератора должна находится в пределах от 1566 до 320 МГц, что требует наличия дополнительного делителя, для приведения в соответствие выходной частоты, рабочей частое кристалла. Выходной делитель может работать с коэффициентом 2,4,8 и 16. Минимальное значение для делителя – 2.-Вот тут непонятки..