PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các dự án mã nguồn mở (http://www.picvietnam.com/forum/forumdisplay.php?f=73)
-   -   Chia sẻ Mạch Ứng Dụng Cho PIC16F887 - SHT11 - DS1307 - LCD - UART (http://www.picvietnam.com/forum/showthread.php?t=33309)

caddish12 19-01-2014 01:50 AM

Chia sẻ Mạch Ứng Dụng Cho PIC16F887 - SHT11 - DS1307 - LCD - UART
 
1 Attachment(s)
http://i1142.photobucket.com/albums/...ps593bbc90.jpg

Chào các bạn!

Mình xin chia sẻ mạch dành cho những bạn mới làm quen với PIC16F887, Board ứng dụng nho nhỏ tích hợp sẵn ds1307+SHT11+UART+LCD16x2, mạch này thích hợp để ủi ^^
Gồm schematic+layout (orcad)+firmware

Main Code:
Code:

#include <htc.h>
#include <stdlib.h>
#include <stdio.h>
#include "lcd.h"
#include "rtc.h"
#include "i2c.h"
#include "uart.h"
#include "SHT.h"


__CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS);

void putch(char c)
{
        uart_putc(c);
}

char buf[50];
unsigned char s,m,h,day,date,month,year;


void ftoa(float value, char *string)
 {
    if (value < 0) {
        *string++ = '-';
        value = -value;
    }
    sprintf(string, (far char *)"%d.%02u",
                    (int) value,
                    (int) ((value - (int) value) * 100. + 0.5));  //important
 }
 
 
unsigned char bcd2dec(unsigned char a)
{
        unsigned char r,t;
  t = a & 0x0F;
  r = t;
  a = 0xF0 & a;
  t = a >> 4;
  t = 0x0F & t;
  r = t*10 + r;
  return r;
}
unsigned char dec2bcd(unsigned char a)
{
  unsigned char t1, t2;
  t1 = a%10;
  t1 = t1 & 0x0F;
  t2 = a/10;
  t2 = t2 << 4;
  t2 = 0xF0 & t2;
  t1 = t1 | t2;
  return t1;
}       
 
void rtc_readdatetime(void)
{       
        s = rtc_read(0);
    m = rtc_read(1);
    h = rtc_read(2);
        day = rtc_read(3);
    date = rtc_read(4);
    month = rtc_read(5);
    year = rtc_read(6);
    switch(bcd2dec(day))
    {
        case 0:
                  sprintf(buf,"Mon");
                  break;
        case 1:
                  sprintf(buf,"Tue");
                  break;
        case 2:
                  sprintf(buf,"Wed");
                  break;
        case 3:
                  sprintf(buf,"Thu");
                  break;
        case 4:
                  sprintf(buf,"Fri");
                  break;
        case 5:
                  sprintf(buf,"Sat");
                  break;
        case 6:
                  sprintf(buf,"Sun");
                  break;
  }
                                                                                                             
    lcd_gotoxy(0,0);       
    sprintf(buf,"%s %02u-%02u-%02u",buf,bcd2dec(date),bcd2dec(month),bcd2dec(year));
    lcd_puts(buf);
    printf("\n\r%s %02u-%02u-%02u",buf,bcd2dec(date),bcd2dec(month),bcd2dec(year));
    printf("\n\rTime: %02u:%02u:%02u",bcd2dec(h),bcd2dec(m),bcd2dec(s));
}
 
void main()
{       
        unsigned int a;
        char i;
        float tem,humi;
       
        ANSEL = 0;
        ANSELH = 0;

        TRISC0 = 0;
        uart_init();       
    lcd_init();
    sht_init(SHT_14_12_BIT); 
        i2c_init();
//        rtc_write(0,dec2bcd(0));
//        rtc_write(1,dec2bcd(53));
//        rtc_write(2,dec2bcd(13));
//        rtc_write(3,dec2bcd(4));
//        rtc_write(4,dec2bcd(17));
//        rtc_write(5,dec2bcd(1));
//        rtc_write(6,dec2bcd(13));
       
   
    printf("\n\r\n\rEmbedded RealTime System Project\n\r");
       
        rtc_readdatetime();
    __delay_ms(90);
   
        a=0;
        while(1)
        {
                  a++;       
                  RC0 ^= 1;                         
                  s = rtc_read(0);
                  m = rtc_read(1);
                  h = rtc_read(2);
                  lcd_gotoxy(1,0);               
                  sprintf(buf,"Time: %02u:%02u:%02u",bcd2dec(h),bcd2dec(m),bcd2dec(s));
                  lcd_puts(buf);                                 
                  if (a==200)
                        {
                               
                            sht_readTemHumi(&tem,&humi);
                            //ftoa(tem,buf);  //enable if you use Hi-Tech PRO only                       
                            printf("\n\rT: %s",buf);
                            //ftoa(humi,buf);                         
                            //printf(" H: %s\n\r",buf);                         
                                a = 0;
                        }
       
    }
}

Nếu bạn dùng bản Hi-Tech PRO thì hãy uncomment 3 dòng sau nhé{
Code:

                        ftoa(tem,buf);                       
                            ftoa(humi,buf);                         
                            printf(" H: %s\n\r",buf);

lý do là vì bản lite không có optimize code nên sẽ không đủ bộ nhớ cho PIC16F887

tbnbk 15-09-2014 10:42 PM

bạn còn cái code và mạch nào pic 16f887 hay hay và mạch bạn học rồi k cho xin vs.code bằng hitech c nha bạn.cảm ơn bạn nhiều


Múi giờ GMT. Hiện tại là 05:39 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam