Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Програмирование pic на СИ.

Чт фев 03, 2011 12:29:19

пжалуста
X |= 0b11110000;
Z &= 0b00001111;

Re: Програмирование pic на СИ.

Чт фев 03, 2011 13:15:40

vovik15 писал(а):пжалуста
X |= 0b11110000;
Z &= 0b00001111;

Я не пойму зачем? Ну применим мы это, у нас только добавится пару строчек и пару переменных. Почему програма не КОМПЕРИРУЕТСЯ так как я написал? Ведь вариантов реализации этой программы много. Я написал как я думаю легче всего. Я в тупике. Почему она не компилируется.

Re: Програмирование pic на СИ.

Чт фев 03, 2011 13:24:58

vovik15 писал(а):&=
при накладывании маски &= , в тех биах где в маске стоит 0 , биты исходного числа принамают значение 0, независимо от первоночального значения, в тех битах, где в маске стоит 1, исходное число не меняется

|=
при накладывании маски |=, в тех битах где в маске стоит 1, биты исходного числа принимают 1, независимо то первоначально значения. В тех битах, где в маске стоит 0, исходное значение не меняется

Ну не очень наглядный пример:) Прочитал внимательней. И не увидел смысла вообще.
Тоесть Пример.
Код:
X &= 0b11110000; /* Читаю текст. "в тех биах где в маске стоит 0 , биты исходного числа принамают значение 0, независимо от первоночального значения" Значит там где был "0" он там и остался. Там где были "1" , они так и остолись так как они не меняются. В итоге получилось  0b11110000. Тоесть нечё не поменялось. 

Re: Програмирование pic на СИ.

Чт фев 03, 2011 14:01:09

давай сюда свою программу целиком,щас скомпелируем

Re: Програмирование pic на СИ.

Чт фев 03, 2011 14:12:59

Вот она:)
Код:
#include <pic.h>

 

__CONFIG (XT & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);

void podgot (void) // подготовка МК
void podpr (void)
void main (void)
{
podgot()
while (1)
{
podpr(); //функция вызываеться постоянно
if (RA1 == 0)
PORTB = 0b11110000;
else 
PORTB = 0;     
}
} //конец функции
// === подготовка МК

void podgot (void)
{
TRISA = 0b11111111; // направление работы ножек порта А
TRISB = 0b00000000; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
RBPU = 1;  // подтягивающие R (0-вкл, 1-выкл)
}
void podpr (void)
{
if (RA2 == 0)
PORTB = 0b00001111;
else
PORTB = 0b00000000;
}

Re: Програмирование pic на СИ.

Чт фев 03, 2011 14:26:19

двоеточие неправильно понаставил смотри как надо
Код:
#include <pic.h>
__CONFIG (XT & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);

void podgot (void); // подготовка МК
void podpr (void);

void main (void)
{
podgot();
while (1)
{
podpr(); //функция вызываеться постоянно
if (RA1 == 0)
PORTB = 0b11110000;
else 
PORTB = 0;     
}
} //конец функции
// === подготовка МК

void podgot (void)
{
TRISA = 0b11111111; // направление работы ножек порта А
TRISB = 0b00000000; // направление работы ножек порта В
CMCON = 0x07; // отключение компараторов
PORTA = 0; // очищаем порт А
PORTB = 0; // очищаем порт Б
RBPU = 1;  // подтягивающие R (0-вкл, 1-выкл)
}

void podpr (void)
{
if (RA2 == 0)
PORTB = 0b00001111;
else
PORTB = 0b00000000;
}

Re: Програмирование pic на СИ.

Чт фев 03, 2011 14:36:07

vovik15 писал(а):двоеточие неправильно понаставил смотри как надо

ооо Супер. Терь обьясните, Где ставятся а где нет " ; " ?

Re: Програмирование pic на СИ.

Чт фев 03, 2011 15:14:21

ГДЕ ОБЪЯВЛЯЕТЬСЯ ФУНКЦИЯ ,ТАМ НУЖНО ПОСТАВИТЬ ;
например
void podgot (void); //объявление есть точки

podgot(); //вызов есть точки

void podgot (void) //тут нет точек
{
//тра ля ля
}

//=========
дальше что касаеться IF смотрим где ставить точки
if (A>B) {что то делаем};
else {тра ля ля};

Re: Програмирование pic на СИ.

Пт фев 04, 2011 11:13:44

misterkuk писал(а):
vovik15 писал(а):двоеточие неправильно понаставил смотри как надо

ооо Супер. Терь обьясните, Где ставятся а где нет " ; " ?
СТОП! Временно прекрати писать программы!
На форуме по принципу "вопрос - ответ" язык, его синтаксис, его тонкости не выучишь. Предполагается первичное самостоятельное изучение материала.
Бегом читать Кернигана и Ричи http://lanzog.narod.ru/liter/kernigan-c/kernigan-c.html. Кодировка UTF-8.
Это авторы языка и эта книга считается классикой. С неё рекомендовано начинать всем. Проста и понятна, как борщ.

Re: Програмирование pic на СИ.

Пт фев 04, 2011 13:13:25

ut1wpr писал(а):
misterkuk писал(а):
vovik15 писал(а):двоеточие неправильно понаставил смотри как надо

ооо Супер. Терь обьясните, Где ставятся а где нет " ; " ?
СТОП! Временно прекрати писать программы!
На форуме по принципу "вопрос - ответ" язык, его синтаксис, его тонкости не выучишь. Предполагается первичное самостоятельное изучение материала.
Бегом читать Кернигана и Ричи http://lanzog.narod.ru/liter/kernigan-c/kernigan-c.html. Кодировка UTF-8.
Это авторы языка и эта книга считается классикой. С неё рекомендовано начинать всем. Проста и понятна, как борщ.

Принцип присутствует.:). И я спросил про точки с запятой потомучто не смог найти вразумительного ответа в учебнике. А здесь чётко и ясно ответили. и этот учебник языка писался под компьютеры. Тоесть много для пиков там не пойдёт. Например вывод чего то на экран. Там посмотреть только основы, типа операторы , функции и тому подобные. Примеров нет естественно таких которые затрагивали мк. Например там не будет рассказываться о прерываниях в мк. А как тогда учится? Это си а не си для пик:( Но всё же лучше чем ничего.
_____
А вот не задача. На сколько я понимаю вывод информации на LCD дисплей програмно легче и меньше програма чем вывод этой информации на 7сегментный индикатор. К примеру слово какоето. Или это не так?

Re: Програмирование pic на СИ.

Пт фев 04, 2011 14:01:43

а вот и не угадал :))
на семесигментник проше вывести чем на лсд(всмысле кода меньше будет)
жк ведь просто так не запустиш,там инициализацию нужно делать и прочее.
нет,я конечно не спорю,есть такие люди у которых один вывод на семисегментник половину памяти занимает :)

Re: Програмирование pic на СИ.

Пт фев 04, 2011 14:04:42

Ёщё. В асемблере 1 команда 1 машинный цикл. ( кроме команд переходов). Там можнобыло посчитать команды и организовать всё в те временные рамки которые нужны. А как на си обстоят дела со временем?

Re: Програмирование pic на СИ.

Пт фев 04, 2011 14:13:10

сишная команда может выполняться несколько машинных циклов
время задержек можно посчитать в мплабе.
но для индикации это не критично. единственный случай в моей практике когда пришлось расчитывать временные интервалы,это работа с термометром ds18b20

Re: Програмирование pic на СИ.

Вс фев 06, 2011 18:10:15

В примере асемблера есть такая функция как "Антидребезг". Тоесть например одно нажатие увеличивает значение на индикаторе на 1. Это к примеру. но за даже быстрое нажатие програма сделает не один виток. Как это организовать. Я думал с помощью "IF" оператора. Но там большой текст выходит. Может есть способ попроще?

Re: Програмирование pic на СИ.

Пн фев 07, 2011 01:11:54

сделал частотомер на пике +лсд триум марс .алгоритм частотомера тупой
кто то может переписать то место где частотомер чтобы было точнее
Код:
#include <htc.h>
#include <pic.h>
#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
 #define _XTAL_FREQ 4433323
#endif

__CONFIG(0x3f02); ///от внутреннего генератора временено

unsigned long freq = 0;
// unsigned int incTMR0 = 0; //кол-во переполнений TMR0

void gotoxy(char datax,char datay);
void out_Spi_LcdCom ( unsigned char data1);         // выдача команд на LCD   
void out_Spi_LcdDat ( unsigned char data1);         // выдача данных на LCD
void print_longint_12_16  (unsigned long int s,char y)   ; // печать больших12х16 цифр до 10e6
void char_12_16(char c,char x, char y);
unsigned long int a     ;
unsigned  int i; 
//unsigned char c0,c1,c2,c3,c4,c5,c6,c7,c8,c9;

#define   LCD_RESET RB2
#define   LCD_CLK   RB3
#define LCD_DATA  RB0
#define   LCD_DC   RB1
// cs на корпусе



static const char deg12x16[11][24] = {
// 0x30 - '0'.
//   {0x00, 0xF8, 0xFE, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8,
//   0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07},
     { 0x00, 0x07, 0x1F, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1F, 0x07,
      0x00, 0xF8, 0xFE, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0xFE, 0xF8},

  // 0x31 - '1'.
//   {0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
//   0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x3f, 0x3f, 0x30, 0x30, 0x30, 0x00},   
    { 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x3f, 0x3f, 0x30, 0x30, 0x30, 0x00,
     0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00},

  // 0x32 - '2'.
//   {0x00, 0x1c, 0x1e, 0x07, 0x03, 0x03, 0x83, 0xc3, 0xe3, 0x77, 0x3e, 0x1c,
//   0x00, 0x30, 0x38, 0x3c, 0x3e, 0x37, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30},
  {0x00, 0x30, 0x38, 0x3c, 0x3e, 0x37, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30,
   0x00, 0x1c, 0x1e, 0x07, 0x03, 0x03, 0x83, 0xc3, 0xe3, 0x77, 0x3e, 0x1c},
 
  // 0x33 - '3'.
//   {0x00, 0x0c, 0x0e, 0x07, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c,
//   0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0e},
    {0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0e,
    0x00, 0x0c, 0x0e, 0x07, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e, 0x3c},

  // 0x34 - '4'.
//   {0x00, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0xff, 0xff, 0x00, 0x00,
//   0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3f, 0x3f, 0x03, 0x03},
  {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x3f, 0x3f, 0x03, 0x03,
  0x00, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x07, 0xff, 0xff, 0x00, 0x00},

  // 0x35 - '5'.
//   {0x00, 0x3f, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0xe3, 0xc3, 0x83,
//   0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1f, 0x0f},
  {0x00, 0x0c, 0x1c, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x1f, 0x0f,
  0x00, 0x3f, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0xe3, 0xc3, 0x83},
 

  // 0x36 - '6'.
//   {0x00, 0xc0, 0xf0, 0xf8, 0xdc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0x80, 0x00,
//   0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f},
 {0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f,
  0x00, 0xc0, 0xf0, 0xf8, 0xdc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0x80, 0x00},


  // 0x37 - '7'.
//   {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xc3, 0xf3, 0x3f, 0x0f, 0x03,
//   0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xc3, 0xf3, 0x3f, 0x0f, 0x03},

  // 0x38 - '8'.
//   {0x00, 0x00, 0xbc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xbc, 0x00,
//   0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f},   
  {0x00, 0x0f, 0x1f, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1f, 0x0f,
  0x00, 0x00, 0xbc, 0xfe, 0xe7, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xbc, 0x00},


  // 0x39 - '9'.
//   {0x00, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xfc,
//   0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x38, 0x1c, 0x0e, 0x07, 0x03, 0x00},     
    { 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x38, 0x1c, 0x0e, 0x07, 0x03, 0x00,
      0x00, 0x3c, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0xfc},     
 
 
  // 0x3a - двоеточие.
  {0xe0, 0xf0, 0xf8, 0xf8, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x01, 0x61, 0x71, 0x3f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
  //1     2     3     4     5    6      7     8     9     10    11    12
  };
   
//int i=0;
//void piii();

void main(void)
{
//   INTEDG = 1;      // raising edge trigger the interrupt
   GIE = 0;      // not Global interrupt enable
//   INTE = 0;      //not enable the external interrupt RA2/INT pin interrupts.
TRISA=0b000110;
//PORTA=1110;
TRISB=0b11110000; //0-output  1-input
PORTB=0;
LCD_DC=1;
LCD_RESET=1;
__delay_ms(40);
LCD_RESET=0;
__delay_ms(40);
LCD_RESET=1;


  out_Spi_LcdCom (0x21)    ; // расширенные интсрукции Н=1
  out_Spi_LcdCom (0xCF)   ;
  out_Spi_LcdCom (0x06)    ;
  out_Spi_LcdCom (0x14)    ; // тёмность (0x10-бледно -0x15темно)
  out_Spi_LcdCom (0x20)    ; // базовые инструкции H=0
  out_Spi_LcdCom (0x0C)    ; //(0x0C)  нормальный режим отображения D=1 E=0 (&h0d- инверсный режим)
  out_Spi_LcdCom (0x19)    ; //спцфич команда lcd trium aria   dont touch
  for (i=0;i<900;i++)  {   out_Spi_LcdDat  (0)  ;   } //очистка экрана

  i=0;


while (1==1)
{

 a++ ;
TMR1H=0;TMR1L=0;
 T1CON=0b00110111 ;// 11 = 1:8 Prescale value;;; 0 = Oscillator is shut off;;;  1 = Do not synchronize external clock input;;;;
//1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1
__delay_ms(10);
T1CON=0b00110110 ;// 0 = disable Timer1(lowers bit)
freq=(long)TMR1H*256;
freq=freq+TMR1L;
freq=freq*100*8;//учитываем предделитель 8
if (TMR1H>127) {goto END_freq_measuring ; }


TMR1H=0;TMR1L=0;
 T1CON=0b00100111 ;// 10 = 1:4 Prescale value;;; 0 = Oscillator is shut off;;;  1 = Do not synchronize external clock input;;;;
//1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1
__delay_ms(10);
T1CON=0b00100110 ;// 0 = disable Timer1(lowers bit)
freq=(long)TMR1H*256;
freq=freq+TMR1L;
freq=freq*100*4;//учитываем предделитель 4
if (TMR1H>127) {goto END_freq_measuring ; }

TMR1H=0;TMR1L=0;
 T1CON=0b00010111 ;// 01 = 1:2 Prescale value;;; 0 = Oscillator is shut off;;;  1 = Do not synchronize external clock input;;;;
//1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1
__delay_ms(10);
T1CON=0b00010110 ;// 0 = disable Timer1(lowers bit)
freq=(long)TMR1H*256;
freq=freq+TMR1L;
freq=freq*100*2;//учитываем предделитель 2
if (TMR1H>127) {goto END_freq_measuring ; }

TMR1H=0;TMR1L=0;
 T1CON=0b00000111 ;// 00 = 1:1 Prescale value;;; 0 = Oscillator is shut off;;;  1 = Do not synchronize external clock input;;;;
//1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1
__delay_ms(10);
T1CON=0b00000110 ;// 0 = disable Timer1(lowers bit)
freq=(long)TMR1H*256;
freq=freq+TMR1L;
freq=freq*100;//учитываем предделитель 1
if (TMR1H>127) {goto END_freq_measuring ; }

TMR1H=0;TMR1L=0;
 T1CON=0b00000111 ;// 00 = 1:1 Prescale value;;; 0 = Oscillator is shut off;;;  1 = Do not synchronize external clock input;;;;
//1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1
__delay_ms(20);
T1CON=0b00000110 ;// 0 = disable Timer1(lowers bit)
freq=(long)TMR1H*256;
freq=freq+TMR1L;
freq=freq*50;//учитываем предделитель 1
if (TMR1H>127) {goto END_freq_measuring ; }

TMR1H=0;TMR1L=0;
 T1CON=0b00000111 ;// 00 = 1:1 Prescale value;;; 0 = Oscillator is shut off;;;  1 = Do not synchronize external clock input;;;;
//1 = External clock from pin RB6/T1OSO/T1CKI/PGC (on the rising edge);; 1 = Enables Timer1
__delay_ms(40);
T1CON=0b00000110 ;// 0 = disable Timer1(lowers bit)
freq=(long)TMR1H*256;
freq=freq+TMR1L;
freq=freq*25;//учитываем предделитель 1
if (TMR1H>127) {goto END_freq_measuring ; }



//freq=12345678;
END_freq_measuring:
print_longint_12_16 (freq,0);
print_longint_12_16 (a,48);

print_longint_12_16 (TMR1H,32);


//{
// if (a> 15000000)   //   при 4х Мгц-  50000= 1.3 сек
//    {
//PORTA=0;
//
//        #asm
//        SLEEP
//       #endasm
//   }
   
}
}
/////- ПРОЦЕДУРЫ=======================
//=====================
//static void interrupt
//isr(void)         // Here be interrupt function - the name is unimportant.
//{
//   if(T0IF) {}            // timer interrupt
//
//   if(INTF) {}            // input interrupt
//
//   INTF = 0;         // clear the interrupt
//   GIE = 1;      // Global interrupt enable
//   }
//static void interrupt
//isr(void)   
// {                       //обработка прерываний
//
//     if (INTCON.T0IF) {                 //если TMR0 увеличить перем. прерываний
//        incTMR0++;
//        INTCON.T0IF = 0;
//     }
//     if (PIR1.TMR1IF) {                //если TMR1 увеличить перем прерываний
//        timerH++; PIR1.TMR1IF = 0;
//        }
//    }





//=== Send byte to LCD ===
// cd: 1 - data, 0 - command
void out_Spi_LcdCom ( unsigned char data1) //  передаём команды

LCD_DC=0;
LCD_DATA =data1>>7;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>6) &0b1;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>5) &0b1;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>4) &0b1;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>3) &0b1;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>2) &0b1;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>1) &0b1;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_CLK =1;
LCD_DATA =(data1>>0) &0b1;
LCD_CLK =0;
LCD_CLK =0;
LCD_CLK =1;
LCD_CLK =1;
LCD_DC=1;
LCD_DATA =0;

}
 void out_Spi_LcdDat ( unsigned char data1)  //  передаём данные
{
LCD_DC=1;
LCD_DATA =data1>>7;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>6) &0b1;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>5) &0b1;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>4) &0b1;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>3) &0b1;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>2) &0b1;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>1) &0b1;
LCD_CLK =0;
LCD_CLK =1;
LCD_DATA =(data1>>0) &0b1;
LCD_CLK =0;
LCD_CLK =1;
LCD_DC=1;
LCD_DATA =0;
}
void gotoxy(char datax,char datay)
{
 out_Spi_LcdCom (0x00);           
 out_Spi_LcdCom (0x80+datax);                    //устанавливаем X     
 out_Spi_LcdCom (0x40+(datay >>3));                  // устанавливаем номер строки(№BAnk) 
}



//
//void print_char(char c)
//{
//   unsigned char i;
//
//           for ( i = 0; i < 5; i++ ){
//            out_Spi_LcdDat (FontLookup[c] [i] );
//        }
//        out_Spi_LcdDat(0x00);
//      }             
     
           
          void print_longint_12_16  (unsigned long int s,char y)   
 {           
 unsigned char x,c9,c8,c7,c6,c5,c4,c3,c2,c1,c0;   
     c9=0;c8=0;c7=0;c6=0;c5=0;c4=0;c3=0;c2=0;c1=0;   
while (s>=1000000000){s-=1000000000;c9++;}   
while (s>=100000000){s-=100000000;c8++;}   
while (s>=10000000){s-=10000000;c7++;}   
while (s>=1000000){s-=1000000;c6++;}   
while (s>=100000){s-=100000;c5++;}     
while (s>=10000){s-=10000;c4++;}
while (s>=1000){s-=1000;c3++;}
while (s>=100){s-=100;c2++;}
while (s>=10){s-=10;c1++;}
c0=s;
 x=0;     
//         char_12_16(c9,x,y);       
//  x=x+12;
//         char_12_16(c8,x, y);
//  x=x+12;
         char_12_16(c7,x, y); 
 x=x+12;
char_12_16(c6,x,y);x=x+12;   
char_12_16(c5,x, y);  x=x+12; 
 char_12_16(c4,x, y); x=x+12;     
 char_12_16(c3,x,y);   
                          out_Spi_LcdDat(0x00); // пропуск     
 x=x+14; char_12_16(c2,x,y); 
 x=x+12; char_12_16(c1,x,y); 
 x=x+12;  char_12_16(c0,x,y);   
         }

void char_12_16(char c,char x, char y)  //выдача двухстрочного чарсета
{
    unsigned char sj;
    gotoxy(x,y);
    for ( sj = 0; sj < 12; sj++ )
            {
              out_Spi_LcdDat(deg12x16[c][sj]);
            }
    gotoxy(x,y+8); 
    for ( sj = 12; sj < 24; sj++ )
            {
              out_Spi_LcdDat(deg12x16[c][sj]);     
     }       
     }
 


Re: Програмирование pic на СИ.

Пн фев 07, 2011 08:31:58

какой компилятор? какой микроконтроллер? и вообще ссылка на схему есть?

Re: Програмирование pic на СИ.

Пн фев 07, 2011 08:37:41

vovik15 писал(а):какой компилятор? какой микроконтроллер? и вообще ссылка на схему есть?


Компилятор судя по заголовочным файлам HT-PICC.

А схема бы точно не помешала

Re: Програмирование pic на СИ.

Пн фев 07, 2011 10:45:07

схема ясна
#define LCD_RESET RB2
#define LCD_CLK RB3
#define LCD_DATA RB0
#define LCD_DC RB1

вход частотомера RB6/T1OSO/T1CKI/PGC
freq -выходное значение частоты (лонг )

Re: Програмирование pic на СИ.

Вт фев 08, 2011 22:42:42

А где можно почитать как сопрягатся с лсд?

Re: Програмирование pic на СИ.

Вт фев 08, 2011 23:00:29

а не рановато ? сразу предупрежу, ТАМ СЛОЖНО без опыта
мне кажеться сначалор надо циферки на семисегментник повыводить
Ответить