Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: zadatakful.c
- * Author: Admin
- *
- * Created on 25 March 2019, 20:43
- */
- // CONFIG
- #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
- #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
- #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
- #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
- #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
- #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
- #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
- #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
- #include <xc.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<conio.h>
- #define _XTAL_FREQ 20000000
- #define Baud_rate 9600
- #define CRVENA RC1
- #define ZUTA RC2
- #define RS RD2
- #define EN RD3
- #define D4 RD4
- #define D5 RD5
- #define D6 RD6
- #define D7 RD7
- void Lcd_Port(char a){
- if(a&1)
- D4=1;
- else
- D4=0;
- if(a&2)
- D5=1;
- else
- D5=0;
- if(a&4)
- D6=1;
- else
- D6=0;
- if(a&8)
- D7=1;
- else
- D7=0;
- }
- void Lcd_Cmd(char a){
- RS=0;
- Lcd_Port(a);
- EN=1;
- __delay_ms(4);
- EN=0;
- }
- Lcd_Clear(){
- Lcd_Cmd(0);
- Lcd_Cmd(1);
- }
- void Lcd_Set_Cursor(char a, char b){
- char temp, z, y;
- if(a==1){
- temp=0x80+b-1;
- z=temp>>4;
- y=temp&0x0F;
- Lcd_Cmd(z);
- Lcd_Cmd(y);
- }
- else if(a==2){
- temp=0xC0+b-1;
- z=temp>>4;
- y=temp&0x0F;
- Lcd_Cmd(z);
- Lcd_Cmd(y);
- }
- }
- void Lcd_Init(){
- Lcd_Port(0x00);
- __delay_ms(20);
- Lcd_Cmd(0x03);
- __delay_ms(5);
- Lcd_Cmd(0x03);
- __dely_ms(11);
- Lcd_Cmd(0x03);
- Lcd_Cmd(0x02);
- Lcd_Cmd(0x03);
- Lcd_Cmd(0x08);
- Lcd_Cmd(0x00);
- Lcd_Cmd(0x0C);
- Lcd_Cmd(0x03);
- Lcd_Cmd(0x06);
- }
- Lcd_Write_Char(char a){
- char temp, y;
- temp=a&0x0F;
- y=a&0x0F;
- RS=1;
- Lcd_Port(y>>4);
- EN=1;
- __delay_us(40);
- EN=0;
- Lcd_Port(temp);
- EN=1;
- __delay_us(40);
- EN=0;
- }
- void Lcd_Write_String(char *a){
- int i;
- for(i=0;a[i]!='\0';i++){
- Lcd_Write_Char(a[i]);
- }
- }
- void UART_Init(void){
- TRISC6=0;
- TRISC7=1;
- SPBRG=((_XTAL_FREQ/16)/Baud_rate)-1;
- BRGH=1;
- SYNC=0;
- SPEN=1;
- TXEN=1;
- CREN=1;
- TX9=0;
- RX9=0;
- }
- char UART_Send_Char(char a){
- while(!TXIF);
- TXREG=a;
- }
- char UART_Get_Char(){
- if(OERR){
- CREN=0;
- CREN=1;
- }
- while(!RCIF);
- return RCREG;
- }
- void putch(char a){
- UART_Send_Char(a);
- }
- void ADC_Initialize(){
- ADCON0=0b01000001;
- ADCON1=0b11000000;
- }
- unsigned int ADC_Read(unsigned char channel){
- ADCON0 &=0X11000101;
- ADCON0 |=channel<<3;
- __delay_ms(2);
- GO_nDONE=1;
- while(GO_nDONE);
- return((ADRESH<<8)+ADRESL);
- }
- void ServoRotiraj0(){
- unsigned int i;
- for(i=0;i<50;i++){
- RC0=1;
- __delay_us(800);
- RC0=0;
- __delay_us(19200);
- }
- }
- void ServoRotiraj90(){
- unsigned int i;
- for(i=0;i<50;i++){
- RC0=1;
- __delay_us(1500);
- RC0=0;
- __delay_us(18500);
- }
- }
- void ServoRotiraj180(){
- unsigned int i;
- for(int i=0;i<50;i++){
- RC0=1;
- __delay_us(2200);
- RC0=0;
- __delay_us(17800);
- }
- }
- void main(void) {
- PORTB=0;
- TRISB=0;
- TRISC0=0;
- TRISC1=0;
- TRISC2=0;
- PORTD=0;
- TRISD=0;
- Lcd_Init();
- Lcd_Clear();
- UART_Init();
- float adc;
- float volt, temp;
- int C1, C2, C3, C4, temp1;
- ADC_Initialize();
- char DISPLEJ[10]={0x3F, 0x06, 0x05B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
- char broj=0;
- int opcija;
- CRVENA=0;
- ZUTA=0;
- do{
- printf("****Dobrodosli!****");
- printf("\r1. Rotiranje servo motora");
- printf("\r2.Brojanje na 7sef displeju");
- printf("\r3.Ispis trenutne temperature na LCD-u");
- printf("\r**************************************");
- printf("\r Molimo vas da izaberete opciju 1, 2 ili 3");
- opcija=UART_Get_Char();
- UART_Send_Char(opcija);
- printf("\r********");
- switch(opcija){
- case '1':
- printf("\r Izabrali ste opciju 1");
- Lcd_Set_Cursor(1,1);
- Lcd_Write_String("Rotiranje servo motora u jednu,");
- Lcd_Set_Cursor(2,1);
- Lcd_Write_String("a zatim u drugu stranu 3 puta");
- for(int i=0;i<3;i++){
- ServoRotiraj0();
- CRVENA=1;
- ZUTA=0;
- __delay_ms(150);
- ServoRotiraj180();
- ZUTA=1;
- CRVENA=0;
- __delay_ms(150);
- }
- Lcd_Clear();
- ZUTA=0;
- CRVENA=0;
- break;
- case '2':
- printf("\r\r Izabrali ste opciju 2");
- Lcd_Clear();
- Lcd_Set_Cursor(1,1);
- Lcd_Write_String("Brojanje na 7seg displeju");
- Lcd_Set_Cursor(2,1);
- Lcd_Write_String("0-9, 0-5, 0-2-4-6-8-1-3-5-7-9-0");
- for(int i=0;i<10;i++){
- PORTB=DISPLEJ[i];
- __delay_ms(350);
- if(i==9){
- __delay_ms(5000);
- for(int j=0;j<6;j++){
- PORTB=DISPLEJ[j];
- __delay_ms(350);
- if(j==5){
- for(int k=0;k<9;k++){
- if(k%2==0){
- PORTB=DISPLEJ[k];
- __delay_ms(350);
- if(k==8){
- for(int z=0;z<10;z++){
- if(z%2!=0){
- PORTB=DISPLEJ[z];
- __delay_ms(350);
- if(z==9)
- PORTB=DISPLEJ[0];
- }
- }
- }
- }
- }
- }
- }
- }
- }
- Lcd_Clear();
- break;
- case '3':
- printf("\r\r Izabrali ste opciju 3");
- adc=(ADC_Read(4));
- volt=adc*4,88281;
- temp=volt/10.0;
- temp1=temp*100;
- C1 =(temp1/1000)%10;
- C2 =(temp1/100)%10;
- C3 =(temp1/10)%10;
- C4 =(temp1/1)%10;
- printf("\r\r Temperatura: ");
- printf("%i",C1);
- printf("%i",C2);
- printf(".");
- printf("%i",C3);
- printf("%i",C4);
- printf("C");
- printf("\r\r");
- Lcd_Clear();
- Lcd_Set_Cursor(1,3);
- Lcd_Write_String("Temperatura ");
- Lcd_Set_Cursor(2,5);
- Lcd_Write_Char(C1+'0');
- Lcd_Write_Char(C2+'0');
- Lcd_Write_String(".");
- Lcd_Write_Char(C3+'0');
- Lcd_Write_Char(C4+'0');
- Lcd_Write_Char(0xDF);
- Lcd_Write_String("C");
- __delay_ms(3000);
- Lcd_Clear();
- break;
- }
- }
- while(opcija!=0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement