|
Tài trợ cho PIC Vietnam |
Các dự án mã nguồn mở Nếu bạn không mở mã nguồn, ít nhất là một phần nào đó trong dự án của bạn, xin đừng vào đây. |
|
Ðiều Chỉnh | Xếp Bài |
19-01-2014, 01:50 AM | #1 |
Đệ tử 1 túi
Tham gia ngày: Apr 2010
Bài gửi: 25
: |
Chia sẻ Mạch Ứng Dụng Cho PIC16F887 - SHT11 - DS1307 - LCD - UART
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; } } } Code:
ftoa(tem,buf); ftoa(humi,buf); printf(" H: %s\n\r",buf);
__________________
Thanh Nguyen, International University, VNU |
|
|