![]() |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: May 2007
Bài gửi: 15
: |
Chào anh nhh!
Cảm ơn anh đã post lên nhiều chương trình rất dễ hiểu. Anh cho hỏi: Tôi muốn vừa tiến hành đo điện áp và hiển thị lên LCD vừa định thời gian thì làm thế nào?. Cụ thể là tôi có bài tập tiến hành đo điện áp của 1 thiết bị sạc ác quy, vấn đề này thì không có gì, nhưng tôi muốn đo thời gian nó đã sạc nữa, đơn vị tính thời gian là phút. Mong anh nhh va các anh em trong diễn đàn giúp đỡ! Thanks alot! |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Oct 2006
Bài gửi: 10
: |
frequencymeter
Code:
#include <16f628.H> #use delay(clock=4000000)// #fuses NOPROTECT,NOWDT,PUT,noBROWNOUT,noLVP,NOMCLR,xt #BYTE PORT_A=0X05 #BYTE PORT_B=0X06 /***entegreterbiyecisi@yahoo.com***//***entegreterbiyecisi@yahoo.com***/ // LCD STUFF #define LCD_RS PIN_b0 #define LCD_EN PIN_b1 #define LCD_D4 PIN_b2 #define LCD_D5 PIN_b3 #define LCD_D6 PIN_b4 #define LCD_D7 PIN_b5 #define FIRST_LINE 0x00 #define SECOND_LINE 0x40 #define CLEAR_DISP 0x01 #define CURS_ON 0x0e #define CURS_OFF 0x0c /***entegreterbiyecisi@yahoo.com***/ #use standard_io ( a ) #use standard_io ( b ) /***entegreterbiyecisi@yahoo.com***/ // proto statements void LCD_Init ( void ); void LCD_SetPosition ( unsigned int cX ); void LCD_PutChar ( unsigned int cX ); void LCD_PutCmd ( unsigned int cX ); void LCD_PulseEnable ( void ); void LCD_SetData ( unsigned int cX ); /***entegreterbiyecisi@yahoo.com***//***entegreterbiyecisi@yahoo.com***/ /*************************entegreterbiyecisi@yahoo.com******************************/ int32 ab=0,hz=0; int1 stept_say=0,data_bitti=0,step,aa=0; int16 sayi=0,tr=20; /*************************entegreterbiyecisi@yahoo.com******************************/ #int_timer1 tas(){ ab++; } #int_timer0 sn(){sayi=0; set_timer0(61);//(255-60)*195*20=1000000us=dahili 1sn icin if(tr){ tr--;} else{delay_us ( 698 ); output_low(pin_a0); disable_interrupts (global); disable_interrupts(int_timer0); disable_interrupts(int_timer1); sayi=get_timer1(); aa=1; hz=sayi+(65536*ab); tr=20; }} /*************************entegreterbiyecisi@yahoo.com******************************/ void main() { setup_timer_1(t1_external|t1_div_by_1); setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_256); enable_interrupts(int_timer0); // timer0 enable_interrupts(int_timer1); enable_interrupts(global); lcd_init(); SET_TRIS_A(0b00100000); SET_TRIS_B(0b11000000); set_timer0(61); set_timer1(0); LCD_SetPosition(first_LINE+0); printf(lcd_putchar,"\NECATi KIYLIOGLU "); LCD_SetPosition(second_LINE+1); printf(lcd_putchar,"\ 0532 613 65 87"); delay_ms (500); LCD_PutCmd ( CLEAR_DISP ); sayi=0; hz=0; /*************************entegreterbiyecisi@yahoo.com******************************/ while(true){ if(aa==1){ //LCD_PutCmd ( CLEAR_DISP ); LCD_SetPosition(first_LINE+0); printf(lcd_putchar,"\FREQUENCYMETER "); if(999>=hz){ LCD_SetPosition(second_LINE+0); printf(lcd_putchar,"\FRQ=%ldHz ",hz);} ////////////////////////////////////////// if(hz>=1000){ if(999999>=hz){ LCD_SetPosition(second_LINE+0); printf(lcd_putchar,"\FRQ=%3.3wKhz ",hz);}} ///////////////////////////////////////////// if(hz>=1000000){ LCD_SetPosition(second_LINE+0); printf(lcd_putchar,"\FRQ=%2.6wMhz ",hz);} //////////////////////////////////////////// delay_ms (1); set_timer1(0); enable_interrupts(int_timer0); enable_interrupts(int_timer1); enable_interrupts (global); aa=0; ab=0; } }} /*************************entegreterbiyecisi@yahoo.com******************************/ /***entegreterbiyecisi@yahoo.com***/ //lcd basla void LCD_Init ( void ){ LCD_SetData ( 0x00 ); output_low ( LCD_RS ); LCD_SetData ( 0x03 ); // init with specific nibbles to start 4-bit mode LCD_PulseEnable(); LCD_PulseEnable(); LCD_PulseEnable(); LCD_SetData ( 0x02 ); // set 4-bit interface LCD_PulseEnable(); // send dual nibbles hereafter, MSN first LCD_PutCmd ( 0x2C ); // function set (all lines, 5x7 characters) LCD_PutCmd ( 0x0C ); // display ON, cursor off, no blink LCD_PutCmd ( 0x01 ); // clear display LCD_PutCmd ( 0x06 ); // entry mode set, increment } /***entegreterbiyecisi@yahoo.com***/ void LCD_SetPosition ( unsigned int cX ) { // this subroutine works specifically for 4-bit Port A LCD_SetData ( swap ( cX ) | 0x08 ); LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); LCD_PulseEnable(); } /***entegreterbiyecisi@yahoo.com***/ void LCD_PutChar ( unsigned int cX ) { // this subroutine works specifically for 4-bit Port A output_high ( LCD_RS ); LCD_SetData ( swap ( cX ) ); // send high nibble LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); // send low nibble LCD_PulseEnable(); output_low ( LCD_RS ); } /***entegreterbiyecisi@yahoo.com***/ void LCD_PutCmd ( unsigned int cX ) { // this subroutine works specifically for 4-bit Port A LCD_SetData ( swap ( cX ) ); // send high nibble LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); // send low nibble LCD_PulseEnable(); } /***entegreterbiyecisi@yahoo.com***/ void LCD_PulseEnable ( void ) { output_high ( LCD_EN ); delay_us ( 100 ); output_low ( LCD_EN ); delay_ms ( 5 ); } /***entegreterbiyecisi@yahoo.com***/ void LCD_SetData ( unsigned int cX ) { output_bit ( LCD_D4, cX & 0x01 ); output_bit ( LCD_D5, cX & 0x02 ); output_bit ( LCD_D6, cX & 0x04 ); output_bit ( LCD_D7, cX & 0x08 ); } /***entegreterbiyecisi@yahoo.com***/ //lcd son //////////////////////////////////////////////////////////////////////////// thay đổi nội dung bởi: namqn, 19-05-2007 lúc 08:30 PM. |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Lập nhóm PIC16F877A | nhh | Cơ bản về vi điều khiển và PIC | 285 | 08-03-2017 11:08 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |