Re: stm32f4 cmsis энкодер меню lcd16x02
Добавлено: Чт сен 10, 2020 07:28:22
ivan dimir
почему это работает
/*
* AVR_MENU.c
*
* Created: 18.03.2017 5:30:25
* Author : User
*/
#define F_CPU 8000000UL
#include <avr/io.h>
//#include <avr/eeprom.h>
#include <util/delay.h>
#include <avr/interrupt.h>
//#include <util/twi.h>
#include "lcd.h"
#include "adc.h"
#include <stdio.h>
#include <avr/wdt.h>
#include "I2C.h"
#include "EEPROM_V.h"
#define btn_plus (PINC&1<<2)
#define btn_minus (PINC&1<<7)
#define SLA_R_RTC_ADDR 0b10100001//макрос адреса +бит чтения
#define SLA_WR_RTC_ADDR 0b10100000//макрос адреса +бит записи
volatile unsigned int a,b,c,d;//
volatile unsigned char a1;//
volatile unsigned char a2;//
volatile unsigned char b1;//
volatile unsigned char b2;//
unsigned char c1,d1;//
unsigned char c2,d2;//
volatile unsigned int r1,r2,r3;// переменная для прерывания по кнопке
volatile unsigned char menu=0;
volatile unsigned int n=0;
volatile unsigned char bit1=0;
volatile unsigned char bit2=1;
volatile unsigned char bit3=0;
//-Wl,-u,vfprintf -lprintf_flt -lm
//-lprintf_flt
char buf1[10];
char buf2[10];
char buf3[10];
char buf4[10];
char buf5[10];
char buf6[10];
volatile unsigned char flag1=0;
volatile unsigned char flag2=0;
volatile unsigned char flag3=0;
volatile unsigned char flag4=0;
volatile unsigned char flag5=0;
volatile unsigned char flag6=0;
volatile unsigned char flag7=0;
volatile unsigned char flag8=0;
volatile unsigned char flag9=0;
volatile unsigned char flag10=0;
unsigned char data;
volatile unsigned int pauza=0;
volatile unsigned int pauza_x=0;
volatile unsigned int pauza_z=0;
//volatile unsigned char flag1=0,flag7=0,flag8=0,flag9=0;
//char flag2=0;
//volatile unsigned char flag3=0;
//char flag4=0;
//volatile unsigned char flag5=0;
//volatile unsigned char flag6=0;
//uint16_t save1 EEMEM;
//uint16_t save2 EEMEM;
//uint16_t save3 EEMEM;
//uint16_t save4 EEMEM;
ISR(INT0_vect)
{
//r++;
pauza=0;
bit3=1;
//TCNT2=0;
//pauza_x=0;
//flag5=0;
}
ISR(TIMER0_COMP_vect)
{
TCNT0=0;
pauza_x++;
asm("wdr");
}
ISR(TIMER1_COMPB_vect)
{
TCNT1H=0;
TCNT1L=0;
pauza_z++;
}
ISR(TIMER2_COMP_vect)
{
TCNT2=0;
pauza++;
if (!(PINC&1<<3))
{
flag1=1;
pauza=0;
}
if ((flag1==1)&&(PINC&1<<3))
{
if (pauza>2)
{
menu++;n++;flag1=0;
}
}
}
//void write_eeprom(void)
//{
// I2C_START();
// I2C_TrasmitByte();
// I2C_STOP();
//}
void programa_write_eep(void)
{
//I2C_Write_EEPROM(0b1010000);
//I2C_Write_EEPROM(0);
//I2C_Write_EEPROM(0);
//I2C_Write_EEPROM(a);
I2C_STOP();
}
void programa_2(void)
{
if (pauza_z>1200)
{
flag3=1;
}
if (pauza_z>1280)
{
flag3=0;
}
if (pauza_z>1400)
{
bit3=1;
}
if (flag3==1)
{
PORTD|=(1<<5);
}
if (flag3==0)
{
PORTD&=~(1<<5);
}
}
//unsigned int ADC_result(unsigned char adc_input)
//{
// ADMUX=adc_input | (ADMUX & 0xF0);
//задержка для стабилизации входного напряжения
// _delay_us(10);
//начинаем преобразование (ADSC = 1)
// ADCSRA=ADCSRA|(1<<ADSC);
// while(ADCSRA & (1<<ADSC));//ждем, пока АЦП закончит преобразование (ADIF = 0)
// return ADCW;//ADC - содержит ADCH и ADCL
//}
void init_ports(void)
{
DDRA=0x00;
PORTA=0x00;
DDRC|=(0<<2)|(0<<3)|(0<<7);//настройка порта D на вход "0" и на выход "1"
PORTC|=(1<<2)|(1<<3)|(1<<7);//настройка порта D на вход "0" и на выход "1"
DDRB|=0xFF;//
PORTB|=0x00;//установка на выводах портаB
DDRD|=(1<<0)|(0<<1)|(0<<2)|(0<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7);//настройка порта D на вход "0" и на выход "1"
PORTD|=(0<<0)|(1<<1)|(1<<2)|(1<<3)|(0<<4)|(0<<5)|(0<<6)|(0<<7);//установкана всех выводах порта D
}
void init_timers(void)
{
TCCR1B=(1<<CS12)|(0<<CS11)|(1<<CS10);
TCCR1A=0;
TCCR0|=(1<<CS02)|(0<<CS01)|(1<<CS00);
TCCR2|=(1<<CS22)|(0<<CS21)|(1<<CS20);
TIMSK|=(1<<OCIE0)|(1<<OCIE1B)|(1<<OCIE2);
TIFR|=(1<<OCF0)|(1<<OCF1B)|(1<<OCF2);
TCNT0=0;
TCNT1H=0;
TCNT1L=0;
TCNT2=0;
OCR0=245;
OCR1B=250;
OCR2=250;
}
void INT_PIN()
{
GICR|=(1<<INT0);
MCUCR|=(1<<ISC01)|(1<<ISC00);
GIFR|=(1<<INTF0);
}
//void init_ADC()
//{
// ADCSRA|=(1<<ADEN);
// ADCSRA|=(0<<ADIF)|(0<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
// ADMUX |=(0<<REFS1)|(1<<REFS0);
// ADCSRA |=(1<<ADSC);
//}
void init_wachdog_timer(void)
{
WDTCR|=(0<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(0<<WDP0);
}
int main(void)
{
init_ports();
init_I2C_M();
I2C_START();
I2C_SendByte(SLA_WR_RTC_ADDR);
I2C_SendByte(1);
I2C_SendByte(0);
I2C_START();
I2C_SendByte(SLA_R_RTC_ADDR);
a1=I2C_Readbyte_EEPROM();
a2=I2C_Readlastbyte_EEPROM();
I2C_STOP();
// _delay_ms(5);
// a=((unsigned int) a1<<8)|a2;
I2C_START();
I2C_SendByte(SLA_WR_RTC_ADDR);
I2C_SendByte(3);
I2C_SendByte(2);
I2C_START();
I2C_SendByte(SLA_R_RTC_ADDR);
b1=I2C_Readbyte_EEPROM();
b2=I2C_Readlastbyte_EEPROM();
I2C_STOP();
// I2C_START();
// a=((unsigned int) a1<<8)|a2;
//b=((unsigned int) b1<<8)|b2;
//I2C_STOP();
//_delay_ms()
// b=((unsigned int) b1<<8)|b2;
I2C_START();
I2C_SendByte(SLA_WR_RTC_ADDR);
I2C_SendByte(5);
I2C_SendByte(4);
I2C_START();
I2C_SendByte(SLA_R_RTC_ADDR);
c1=I2C_Readbyte_EEPROM();
c2=I2C_Readbyte_EEPROM();
I2C_STOP();
// read_eeprom();// чтение 2 байт
//a=TWDR;
// programa_read_eep();
//a=eeprom_read_word(& save1);// чтение 2 байт
//b=eeprom_read_word(& save2);// чтение 2 байт
//c=eeprom_read_word(& save3);// чтение 2 байт
//d=eeprom_read_word(& save4);// чтение 2 байт
// _delay_us(5);
// I2C_START();
// I2C_SendByte(SLA_WR_RTC_ADDR);
// I2C_SendByte(3);
// I2C_SendByte(3);
// I2C_START();
// I2C_SendByte(SLA_R_RTC_ADDR);
// c=I2C_Readbyte_EEPROM();
// b=I2C_Readbyte_EEPROM();
// c=I2C_Readbyte_EEPROM();
// b=I2C_Readlastbyte_EEPROM();
// I2C_STOP();
// a=((unsigned int) a1<<8)|a2;
// b=((unsigned int) b1<<8)|b2;
//b=((unsigned int) b1<<8)|b2;
//a=((unsigned int )a1<<8)|a2;
// b=((unsigned int) b1<<8)|b2;
init_timers();
INT_PIN();
init_ADC();
lcd_init(LCD_DISP_ON);
lcd_clrscr();
asm("sei") ;
init_wachdog_timer();
a=((unsigned int )a1<<8)|a2;
b=((unsigned int) b1<<8)|b2;
c=((unsigned int )c1<<8)|c2;
while(1)
{
PORTD|=(1<<4);
if (bit3==1)
{
TCCR1B=(0<<CS12)|(0<<CS11)|(0<<CS10);
}
if (bit3==0)
{
TCCR1B=(1<<CS12)|(0<<CS11)|(1<<CS10);
}
if (ADC_result(4)>825)
{
// flag2=0;
asm("cli") ;
programa_2();
asm("sei") ;
}
else
{
bit3=0;
//flag2=1;
asm("cli") ;
pauza_z=0;
pauza=0;
asm("sei") ;
}
if (n==1)
{
PORTD|=(1<<5);
}
if (n==5)
{
n=0;
PORTD&=~(1<<5);
}
if (ADC_result(0)>a&&ADC_result(1)>b&&ADC_result(2)>c&&ADC_result(3)>825)
{
//PORTD|=(1<<7);
bit1=1;
// flag5=1;
}
else
{
// PORTD&=~(1<<7);
bit1=0;
}
if (bit1==1)
{
PORTD|=(1<<7);
}
else
{
PORTD&=~(1<<7);
}
//if (bit1==1&&bit2==1)
//{
// PORTD|=(1<<6);
// }
// else
//{
// PORTD&=~(1<<6);
// }
if (menu==1)
{
asm("cli");
if (btn_plus==0)
{
if (pauza>1)
{
pauza=0;
if ( a==1023)
{
a=0;
}
a++;
}
}
if (btn_minus==0)
{
if (pauza>1)
{
pauza=0;
if (a==0)
{
a=1023;
}
a--;
}
}
asm("sei");
}
if (menu==2)
{
asm("cli");
if (btn_plus==0)
{
if (pauza>1)
{
pauza=0;
if (b==1023)
{
b=0;
}
b++;
}
}
if (btn_minus==0)
{
if (pauza>1)
{
pauza=0;
if (b==0)
{
b=1023;
}
b--;
}
}
asm("sei");
}
if (menu==3)
{
asm("cli");
if (btn_plus==0)
{
if (pauza>1)
{
pauza=0;
c++;
if (c==1023)
{
c=0;
}
}
}
if (btn_minus==0)
{
if (pauza>1)
{
pauza=0;
if (c==0)
{
c=1023;
}
c--;
}
}
asm("sei");
}
if (menu==4)
{
asm("cli");
if (btn_plus==0)
{
if (pauza>1)
{
pauza=0;
if ( d==1023)
{
d=0;
}
d++;
}
}
if (btn_minus==0)
{
if (pauza>1)
{
pauza=0;
if (d==0)
{
d=1023;
}
d--;
}
}
asm("sei");
}
if (menu==0)
{
// a=((unsigned int )a1<<8)|a2;
// b=((unsigned int) b1<<8)|b2;
asm("cli");
lcd_clrscr();
//sprintf(buf4);
lcd_puts("BobrAVR");
// sprintf(buf3,"i=%.2fa",result);
// lcd_gotoxy(9,0);
// lcd_puts(buf3);
if (ADC_result(2)<c)
{
lcd_gotoxy(8,0);
lcd_puts("OF");
}
else
{
lcd_gotoxy(8,0);
lcd_puts("ON");
}
if (ADC_result(4)>800)
{
lcd_gotoxy(12,0);
lcd_puts("X");
}
else
{
lcd_gotoxy(12,0);
lcd_puts("Z");
}
if (ADC_result(3)>800)
{
lcd_gotoxy(14,0);
lcd_puts("X");
}
else
{
lcd_gotoxy(14,0);
lcd_puts("Z");
}
_delay_ms(50);
asm("sei");
}
if (menu==1)
{
asm("cli");
lcd_clrscr();
// a=((unsigned int )a1<<8)|a2;
sprintf(buf1,"a=%2d",a);
lcd_puts(buf1);
a1=a/256;
a2=a%256;
//a2=a&0xFF;
// a1=a>>8;
if (!(PIND&1<<3))
{
flag2=1;
_delay_ms(20);
}
if((flag2==1)&&(PIND&1<<3))
{
flag2=0;
//a1=a&0xFF;
//a2=a>>8;
I2C_START();
I2C_SendByte(SLA_WR_RTC_ADDR);
I2C_SendByte(1);
I2C_SendByte(0);
I2C_Write_EEPROM(a1);
I2C_Write_EEPROM(a2);
I2C_STOP();
// _delay_ms(5);
}
if (ADC_result(0)>a)
{
lcd_gotoxy(0,9);
lcd_puts("P");
}
else
{
lcd_gotoxy(0,9);
lcd_puts("R");
}
r1=ADC_result(0);
lcd_gotoxy(2,1);
sprintf(buf4,"a1=%2d",r1);
lcd_puts(buf4);
_delay_ms(50);
asm("sei");
}
if (menu==2)
{
asm("cli");
lcd_clrscr();
sprintf(buf2,"b=%2d",b);
lcd_puts(buf2);
b1=b/256;
b2=b%256;
// asm("cli");
if (!(PIND&1<<3))
{
flag2=1;
_delay_ms(20);
}
if (flag2==1&&PIND&1<<3)
{
// b1=a/256;
// b2=a%256;
flag2=0;
I2C_START();
I2C_SendByte(SLA_WR_RTC_ADDR);
I2C_SendByte(3);
I2C_SendByte(2);
I2C_Write_EEPROM(b1);
I2C_Write_EEPROM(b2);
I2C_STOP();
// eeprom_write_word (& save2,b);
}
if (ADC_result(1)>b)
{
lcd_gotoxy(0,9);
lcd_puts("P");
}
else
{
lcd_gotoxy(0,9);
lcd_puts("R");
}
r2=ADC_result(1);
lcd_gotoxy(2,1);
sprintf(buf5,"b1=%2d",r2);
lcd_puts(buf5);
_delay_ms(50);
asm("sei");
}
if (menu==3)
{
asm("cli");
lcd_clrscr();
sprintf(buf3,"c=%2d",c);
lcd_puts(buf3);
c1=c/256;
c2=c%256;
if (!(PIND&1<<3))
{
flag2=1;
_delay_ms(20);
}
if (flag2==1&&PIND&1<<3)
{
flag2=0;
I2C_START();
I2C_SendByte(SLA_WR_RTC_ADDR);
I2C_SendByte(5);
I2C_SendByte(4);
I2C_Write_EEPROM(c1);
I2C_Write_EEPROM(c2);
I2C_STOP();
// _delay_ms(5);
// eeprom_write_word (& save3,c);
}
if (ADC_result(2)>c)
{
lcd_gotoxy(0,9);
lcd_puts("R");
}
else
{
lcd_gotoxy(0,9);
lcd_puts("ND");
}
r3=ADC_result(2);
lcd_gotoxy(3,1);
sprintf(buf6,"c1=%2d",r3);
lcd_puts(buf6);
_delay_ms(50);
asm("sei");
}
if (menu==4)
{
menu=0;
}
}
}
а вот это не работает
/*
* main.c
*
* Created on: 12 авг. 2020 г.
* Author: Ivan
*/
#include"main.h"
#include<stdio.h>
#define button1 GPIOA->IDR &GPIO_IDR_ID6
#define button2 GPIOA->IDR &GPIO_IDR_ID7
//#include"#include"main.h"lcd2.h"
volatile unsigned int pauza=0;
volatile unsigned char flag=0;
volatile unsigned int b,c;
volatile unsigned int t,m;
volatile unsigned char menu;
volatile unsigned char menu_en;
volatile unsigned int adc_data1=0;
volatile unsigned int adc_data2=0;
volatile unsigned int adc_data3=0;
volatile unsigned int adc_data4=0;
char bufer1[16];
char bufer2[16];
uint16_t ADC_Data[4];
//#define z 0xB1//Я
typedef unsigned char byte; //переопределяем тип
void delay_ms(int a)
{
int i = 0;
int f = 0;
while(f < a)
{
while(i<60)
{i++;}
f++;
}
}
uint8_t bii [8]=
{
0B00000,
0B00000,
0B01010,
0B00100,
0B00100,
0B00100,
0B00100,
0B00000
};
uint8_t bk [8]=
{
0B00000,
0B00000,
0B01001,
0B01010,
0B01100,
0B01010,
0B01001,
0B00000
};
uint8_t bj [8]=
{
0B00000,
0B00000,
0B10101,
0B01110,
0B00100,
0B01110,
0B10101,
0B00000
};
uint8_t bm[]=
{
0B00000,
0B00000,
0B10001,
0B11011,
0B10101,
0B10001,
0B10001,
0B00000
};
uint8_t bn[]=
{
0B00000,
0B00000,
0B10010,
0B10010,
0B11110,
0B10010,
0B10010,
0B00000
};
uint8_t biu[]=
{
0B00000,
0B00000,
0B10111,
0B10101,
0B11101,
0B10101,
0B10111,
0B00000
};
uint8_t iorp[]=
{
0b00000,
0b01100,
0b11110,
0b11110,
0b01111,
0b00111,
0b00011,
0b00001
};
uint8_t ior2p[]=
{
0b00000,
0b00110,
0b01111,
0b01110,
0b11110,
0b11100,
0b11000,
0b10000
};
void init_IWDGtimer(void)
{
RCC->CSR|= RCC_CSR_LSION;
IWDG->KR = 0x5555; // Access to registers
IWDG->PR&= ~(IWDG_PR_PR_0 | IWDG_PR_PR_1 | IWDG_PR_PR_2); // 4096
IWDG->RLR =170;//0x7FF;
while (!((IWDG->SR & IWDG_SR_PVU) && (IWDG->SR & IWDG_SR_RVU))){} // wait while bist of PVU and RVU will be set.
IWDG->KR = 0xCCCC; // Start count down;
}
void program1(void)
{
if(pauza==1)
{
lcd_clear();
lcd_set_xy(0, 0);
// IWDG->KR = 0xAAAA;
}
if(pauza==20)
{
//PORTC13_ON;
lcd_clear();
lcd_set_xy(0, 0);
lcd_send(2,DATA);
}
if(pauza==35)
{
// PORTC13_OF;
lcd_clear();
lcd_set_xy(0, 0);
lcd_send('a',DATA);
lcd_send(2,DATA);
// pauza=0;
}
if(pauza==50)
{
lcd_clear();
lcd_set_xy(0, 0);
// lcd_set_user_char(0, bii);
// lcd_set_user_char(1, bj);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
}
if(pauza==65)
{
lcd_clear();
//lcd_set_user_char(0, bii);
// lcd_set_user_char(1, bj);
lcd_set_xy(0, 0);
lcd_send(0,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
//pauza=0;
}
if(pauza==80)
{
lcd_clear();
lcd_set_xy(0, 0);
lcd_send(' ' ,DATA);
lcd_send( 0 ,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
//pauza=0;
}
if(pauza==95)
{
lcd_clear();
// lcd_set_xy(0, 0);
// lcd_set_user_char(0, bii);
// lcd_set_user_char(1, bj);
lcd_set_xy(0, 0);
lcd_send(' ',DATA);
lcd_send(' ',DATA);
lcd_send( 0 ,DATA);
lcd_send(1,DATA);
lcd_send('a',DATA);
lcd_send(2,DATA);
lcd_set_xy(0, 1);
lcd_send(3,DATA);
lcd_send('e',DATA);
lcd_send(4,DATA);
lcd_send(5,DATA);
lcd_send(' ',DATA);
lcd_send( 3 ,DATA);
lcd_send('a',DATA);
lcd_send( 3 ,DATA);
lcd_send('a',DATA);
// lcd_out("mama");
// pauza=0;
}
}
void program2(void)
{
// TIM3->CNT=0;
// lcd_clear();
// b=100;
lcd_set_xy(0, 0);
//TIM3->CNT=b;
// t=0;
sprintf(bufer1,"b= %.4d" ,b);
lcd_out(bufer1);
// }
}
void program3(void)
{
// t=700;
lcd_set_xy(1,9);
sprintf(bufer2,"t= %.4d",t);
lcd_out(bufer2);
}
void Calbac (void)
{
ADC_Data[0]=ADC1->JDR1;
ADC_Data[1]=ADC1->JDR2;
ADC_Data[2]=ADC1->JDR3;
ADC_Data[3]=ADC1->JDR4;
//TIM4->CCR3=ADC_Data[2];
// TIM4->CCR3=ADC_Data[0];
//TIM4->CCR3=ADC_Data[2];
}
int main(void)
{
//char bufer1[16];
//lcd_delay();
//int b;
//init_IWDGtimer();
AHB1ER_init();
PORT_init();
timer2_init();
AFR_init_time3();
timer3_init();
AFR_init_time4();
time4_init();
time5_init();
timer6_init();
adc3_init_regular();
adc1_init_inject();
//lcd_init_GPIO();
// str_lcd("string");
// LCD_Clear();
ADC1->CR1|= ADC_CR1_JEOCIE;
ADC1->CR2 |= ADC_CR2_ADON;
NVIC_EnableIRQ ( ADC_IRQn);
ADC3->CR2|=ADC_CR2_EXTSEL_2 |ADC_CR2_EXTSEL_1;
ADC1->CR2|=ADC_CR2_JEXTSEL_1 |ADC_CR2_JEXTSEL_0;
//ADC1->CR2|=ADC_CR2_JSWSTART;
//LCD_init1();
lcd_init();
//lcd_clear();
//lcd_set_state(LCD_ENABLE, CURSOR_ENABLE, BLINK);
lcd_set_user_char(0, bii);
lcd_set_user_char(1, bj);
lcd_set_user_char(2, bk);
lcd_set_user_char(3, bm);
lcd_set_user_char(4, bn);
lcd_set_user_char(5, biu);
// Наша рыба это символ номер ноль
// lcd_out("This is fish"); //Выводим надпись в нулевую строку
// lcd_set_xy(0,1); //переводим курсор в первую строку
//lcd_send(0,DATA);
// lcd_send(1,DATA);
//lcd_send('a',DATA);
//Выводим символ номер ноль
// lcd_set_state(LCD_ENABLE, CURSOR_ENABLE, BLINK);
//lcd_set_state(LCD_ENABLE,CURSOR_ENABLE,NO_BLINK);
//lcd_clear();
//lcd_set_state(LCD_ENABLE,CURSOR_ENABLE,NO_BLINK);
//InitialLCD();
//ClearLCD();
//Cursor(0,2);
//lcd_out("mama");
//PrintStr("MAMA");
//lcd_set_xy(0, 1);
//lcd_out("mama");
//lcd_set_xy(6, 6);
//lcd_out("papa");
//lcd_send('X',DATA);
// lcd_send('y',DATA);
//lcd_send('e',DATA);
// clearlcd();
// str_lcd("string");
// delay_ms(50);
init_IWDGtimer();
while(1)
{
// IWDG->KR = 0xAAAA;
//lcd_clear();
// lcd_set_xy(0, 0);
//lcd_out("mama");
//lcd_set_xy(0, 1);
//lcd_out("papa");
//delay_ms(50);
//ADC1->CR2|=ADC_CR2_JSWSTART;
//ADC1->CR2|=ADC_CR2_JEXTSEL_1 |ADC_CR2_JEXTSEL_0;
//while(!(ADC1->SR & ADC_SR_JEOC));
// ADC1->SR &=~ ADC_SR_JEOC;
// Calbac ();
// if( ADC_Data[0]>2045)
//{
// PORTC13_ON;
// a=TIM3->CNT;
// if(a==5)
// {
// PORTC13_ON;
// }
// else
// {
// PORTC13_OF;
// }
//lcd_set_xy(2, 0);
//lcd_send(0,DATA);
//lcd_out("mama");
//lcd_set_xy(6, 0);
//lcd_out("papa");
//lcd_set_xy(0, 1);
// lcd_set_xy(0, 1);
// lcd_send('m',DATA);
if(menu==0)
{
// lcd_clear();
//lcd_set_xy(0, 0);
program1();
//lcd_out("mama");
// Delay(50);
// lcd_set_xy(6, 6);
//DWT_delay_ms(50);
// delay_(5);
// lcd_clear();
// lcd_set_xy(0, 1);
// lcd_send(' ',DATA);
// lcd_send('m',DATA);
// delay(1);
// PORTD1_ON;
// delay_ms(100);
// Delay(40);
}
if(menu==1)
{
program2();
// if(b>=50)
// {
// PORTC13_ON;
// }
// else
// {
// PORTD1_OF;
// PORTC13_OF;
// }
Delay(40);
// delay_ms(50);
}
if(menu==2)
{
program3();
Delay(40);
// delay_ms(50);
}
if(menu==3)
{
menu=0;
pauza=0;
}
//Delay(20);
// DWT_delay_ms(100);
// a=TIM3->CNT;
//TIM4->CCR3=a;
//TIM4->CCR3=ADC_Data[2];
// TIM4->CCR1=ADC_Data[0];
//ADC3->CR2|=ADC_CR2_JSWSTART;
// PORTD1_ON;
//TIM4->CCR1=4095;
//TIM4->CCR2=4095;
//TIM4->CCR3=4095;
//TIM4->CCR4=4095;
}
}
/*
* ISR.c
*
* Created on: 17 июл. 2020 г.
* Author: Ivan
*/
#include"main.h"
#include"PORT.h"
//void Calbac (void);
extern unsigned char flag;
extern unsigned char menu;
extern unsigned char menu_en;
extern unsigned int tic;
extern unsigned int a;
extern unsigned int b;
extern unsigned int t;
extern unsigned int pauza;
extern unsigned int adc_data1;
extern unsigned int adc_data2;
extern unsigned int adc_data3;
extern unsigned int adc_data4;
extern unsigned char flag;
void TIM1_IRQHandler (void)
{
}
void TIM2_IRQHandler (void)
{
}
void TIM3_IRQHandler (void)
{
if(TIM3->SR & TIM_SR_UIF)
{
TIM3->SR &= ~ TIM_SR_UIF;
// IWDG->KR = 0xAAAA;
// IWDG->KR = 0xAAAA;
// pauza++;
//if(pauza>20)
//{
// PORTC13_ON;
///PORTD1_ON;
// GPIOD->BSRR |= GPIO_BSRR_BS1;
//GPIOC-> BSRR |=GPIO_BSRR_BS13;
//}
// if(pauza>40)
//{
// PORTC13_OF;
//PORTD1_OF;
// GPIOD->BSRR |= GPIO_BSRR_BR1;
// GPIOC-> BSRR |=GPIO_BSRR_BR13;
// pauza=0;
// }
}
}
void TIM4_IRQHandler (void)
{
}
void TIM5_IRQHandler (void)
{
if(TIM5->SR & TIM_SR_UIF)
{
TIM5->SR &= ~ TIM_SR_UIF;
}
}
void TIM6_DAC_IRQHandler (void)
{
if(TIM6->SR & TIM_SR_UIF)
{
TIM6->SR &= ~ TIM_SR_UIF;
if(menu_en==1)
{
b=TIM3->CNT;
}
if(menu_en==2)
{
//TIM3->CNT++;
t=TIM3->CNT;
// menu_en=0;
}
if(menu_en==3)
{
menu_en=0;
}
//TIM3->CNT=b;
if(!(GPIOC->IDR&GPIO_IDR_ID0))
{
flag=1;
pauza=0;
// TIM3->CR1&=~TIM_CR1_CEN;
// TIM3->CNT=0;
// b=0;
RCC->APB1ENR &=~RCC_APB1ENR_TIM3EN;
// t=0;
// TIM3->CR1&=~ TIM_CR1_CEN;
DWT_delay_ms(10);
}
if(flag==1&&GPIOC->IDR&GPIO_IDR_ID0)
{
flag=0;
DWT_delay_ms(10);
RCC->APB1ENR |=RCC_APB1ENR_TIM3EN;
// TIM3->CR1|= TIM_CR1_CEN;
menu=menu+1;
menu_en++;
}
//program1();
// PORTC13_ON;
IWDG->KR = 0xAAAA;
pauza++;
}
}
//void TIM7_IRQHandler (void);
//void TIM8_IRQHandler (void);
//void TIM9_IRQHandler (void);
//void TIM10_IRQHandler (void);
//void TIM11_IRQHandler (void);
//void TIM12_IRQHandler (void);
//void TIM13_IRQHandler (void)
void ADC_IRQHandler(void)
{
if(ADC1->SR & ADC_SR_JEOC)
{
ADC1->SR &=~ ADC_SR_JEOC;
adc_data1=ADC1->JDR1;
TIM4->CCR1=adc_data1;
ADC1->SR &=~ ADC_SR_JEOC;
adc_data2=ADC1->JDR2;
TIM4->CCR2=adc_data2;
ADC1->SR &=~ ADC_SR_JEOC;
adc_data3=ADC1->JDR3;
TIM4->CCR3=adc_data3;
ADC1->SR &=~ ADC_SR_JEOC;
adc_data4=ADC1->JDR4;
TIM4->CCR4=adc_data4;
// return=ADC1->JDR1;
//flag=1;
// TIM4->CCR1=adc_data1;
// TIM4->CCR2=adc_data2;
// TIM4->CCR3=adc_data3;
// TIM4->CCR4=adc_data4;
// TIM4->CCR1=adc_data1;
// if( adc_data3>2045)
// {
// PORTD1_ON;
// PORTC13_ON;
// }
// else
// {
// PORTD1_OF;
// PORTC13_OF;
// }
}
}
вернее работает но не так как хотелось бы.Или я принцип энкодера не понимаю.Или вообще баран