Спойлер
Код: Выделить всё
#define F_CPU 8000000UL // Òàêòîâàÿ ÷àñòîòà
#define BAUDRATE 9600 // Ñêîðîñòü UART
//ìàêðîñû äëÿ çàäåðæåê
#define _delay_us(us) __delay_cycles((F_CPU / 1000000) * (us));
#define _delay_ms(ms) __delay_cycles((F_CPU / 1000) * (ms));
#include <ioavr.h>
#include <ina90.h>
#include "lcd_lib.c"
#define bit(n) (1 << (n))
#define u_on (PORTD |= bit(2))
#define u_off (PORTD &= ~bit(2))
//button
#define m1 (PINC & bit(0))
#define m2 (PINC & bit(1))
#define z1 (PINC & bit(2))
#define z2 (PINC & bit(3))
#define r1 (PINC & bit(4))
#define r2 (PINC & bit(5))
//îäíîáàéòíûé áóôåð
volatile unsigned char usartRxBuf = 0;
//èíèöèàëèçàöèÿ usart`a
void USART_Init(void)
{
UBRRH = (F_CPU/BAUDRATE/16-1) >> 8;
UBRRL = (F_CPU/BAUDRATE/16-1);
// UBRRH = 0;
// UBRRL = 51; //ñêîðîñòü îáìåíà 9600 áîä
// UCSRA = ( 1 << U2X); //óäâîíåíèå ñêîðîñòè
UCSRB = ( 1 << TXEN ) | ( 1 << RXEN );
UCSRB = ( 1 << RXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN ); //ðàçð. ïðåðûâ ïðè ïðèåìå, ðàçð ïðèåìà, ðàçð ïåðåäà÷è.
UCSRC = ( 1 << URSEL ) | ( 0 << UCSZ2 ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 ); //ðàçìåð ñëîâà 8 ðàçðÿäîâ
// UCSRC = ( 1 << URSEL ) | ( 0 << UPM1 ) | ( 0 << UPM0 );
UCSRC = ( 1 << URSEL ) | ( 0 << USBS ); //ñòîï áèò 1
_delay_ms(200);
}
//îòïðàâêà ñèìâîëà ïî usart`ó
void USART_SendChar(unsigned char symbol)
{
while(! (UCSRA & (1<<UDRE)) );
UDR = symbol;
}
void USART_SendStr(char *str)
{
unsigned char c;
while( ( c = *str++ ) != 0 ) {
USART_SendChar( c );
}
}
//÷òåíèå áóôåðà
__monitor unsigned char USART_GetChar(void)
{
unsigned char tmp = usartRxBuf;
usartRxBuf = 0;
return tmp;
}
//ïðèåì ñèìâîëà ïî usart`ó â áóôåð
#pragma vector=USART_RXC_vect
__interrupt void usart_rxc_my(void)
{
usartRxBuf = UDR;
}
//unsigned char sym;
int main( void )
{
_SEI();
//Âõîäû
DDRC = 0x00;
PORTC = 0x00;
//Âûõîäû
DDRD = 0xFF;
PORTD = 0x00;
USART_Init ();
LCD_Init ();
int But;
while(1){
if (m1 != 0){
LCD_SendString(": 1");
USART_SendStr("1\r\n");
_delay_ms(100);
}
else if (m2 != 0){
LCD_SendString(": 2");
USART_SendChar('2');
_delay_ms(100);
}
else if (z1 != 0){
LCD_SendString(": 3");
USART_SendChar(3);
_delay_ms(100);
}
else if (z2 != 0){
LCD_SendString(": 4");
USART_SendChar(0);
_delay_ms(100);
}
else {
PORTC = 0x00;
LCD_Clear();
}
}
return 0;
}
- Вложения
-
- Screenshot_4.png
- (50.41 КБ) 316 скачиваний


