![]() |
|
![]() |
#1 |
Đệ tử 6 túi
Tham gia ngày: May 2007
Bài gửi: 127
: |
đây là 1 đoạn code viết cho 74hc595 :
Code:
//-------------------------------------------------------------- #define DATA RB7 #define CLK RB6 #define STR RB5 void display_used_74hc595(unsigned char x) { unsigned char i ; for(i=0;i<8;i++) { if( bit_test(x,0) == 1 ) { DATA=1 ; } else { DATA=0 ; }; CLK=0; CLK=1; x = x>>1 ; }; } //-------------------------------------------------- void main(void) { TRISA=0xff; TRISB=0x00; TRISC=0xff; TRISD=0xff; while(true) { display_used_74hc595( 1 ) ; STR=1; STR=0; }; } thay đổi nội dung bởi: namqn, 04-12-2008 lúc 02:08 AM. |
![]() |
![]() |
![]() |
#2 |
Đệ tử 5 túi
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
: |
hii cho thử nghiệm là sao vậy pác?
__________________
------------------------------------------------------------------- Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo. Mời tham quan: https://www.facebook.com/eshop1109 Cung cấp dịch vụ order hàng từ Aliexpress Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/ |
![]() |
![]() |
![]() |
#3 |
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: Vietnam
Bài gửi: 48
: |
Gọi là thử nghiệm vì là sử dụng c***k. Có thể phát sinh lỗi không mong muốn trong quá trình sử dụng. Nếu sử dụng bản này và phát sinh lỗi, có thể chia sẻ với mọi người.
__________________
More friends more foods |
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 30
: |
Các bác cho em hỏi tại sao em lập trình với 16f887 trên CCS 4.068 thì khi cho nhấp nháy portb.3 và portb.2 cùng lúc nhưng chỉ có portb.3 là nhấp nháy còn portb.2 thì không ??
Thanks !! |
![]() |
![]() |
![]() |
#5 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 30
: |
em đã thử cả trên proteus và trên mạch thật. Đây là code của em :
Code:
#include <16F887.h> #include <DEF_887.h> #device *=16adc=10 #fuses HS,NOWDT,NOPROTECT,NOLVP #use DELAY(clock=20000000) #include <lcd.c> void init_main(void) { //khoi tao ADC setup_adc(adc_clock_internal); setup_adc_ports(all_analog); //khoi tao pwm setup_timer_2(T2_DIV_BY_1,250, 1); setup_ccp1(ccp_pwm); setup_ccp2(ccp_pwm); //khoi tao I/O TRISB2 = 0; TRISB3 = 0; trisb0 = 1; trisd = 0x00; trisc = 0x00; portb = 0xff ; } void main (void) { init_main(); while (1) { rb2 = 1; rb3= 1; delay_ms(1000); rb2= 0 ; rb3 = 0; delay_ms(1000); } } thay đổi nội dung bởi: namqn, 10-01-2009 lúc 06:00 PM. |
![]() |
![]() |
![]() |
#7 |
Trưởng lão PIC bang
|
Bạn sửa lại code trong vòng while (1) của bạn thành như sau xem:
Code:
while (1) { PORTB = PORTB | 0x0C; //Bat cac bit RB2 va RB3 delay_ms(1000); PORTB = PORTB & 0xF3; //Tat cac bit RB2 va RB3 delay_ms(1000); } http://www.picvietnam.com/forum/showthread.php?p=4613 Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
#8 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 30
: |
Cảm ơn bác Namqn nhiều em thử được rồi ! Mấy hôm trước em cũng viết vậy nhưng vẫn chạy bình thường, cứ tưởng là máy bị Virut cơ chứ .
|
![]() |
![]() |
![]() |
#9 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#10 |
Nhập môn đệ tử
Tham gia ngày: Dec 2008
Bài gửi: 7
: |
Code:
#include <16F877A.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) #use fast_io(b) #byte portb=0x06 #define led pin_B0 int16 count; int8 a; //Chuong trinh ngat TMR0 #int_timer0 void interrupt_timer0() { set_timer0(6); ++count; if(count==2000) { count=0; a=a<<1; // dich trai a 1bit } if(a==256) { a=1; count=0; } } //Chuong trinh chinh main() { set_tris_b(0); enable_interrupts(global); enable_interrupts(int_timer0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); set_timer0(6); count=0; a=1; while(true) { portb=a; } } thay đổi nội dung bởi: namqn, 14-01-2009 lúc 07:00 AM. |
![]() |
![]() |
![]() |
#11 |
Nhập môn đệ tử
Tham gia ngày: Dec 2008
Bài gửi: 7
: |
Việc tính toán thời gian định thời của Timer em đã hiểu, chỉ còn vấn đề tại sao lại set_timer0 (6). Mong sớm nhận được câu trả lời .
|
![]() |
![]() |
![]() |
#12 |
Đệ tử 5 túi
|
set_timer0 (6) là để cho chương trình đếm từ bắt đầu từ số 6 chứ không phải là số 0. Tức là mỗi lần tràn là 256-6=250.
__________________
Bảng ledsigns chất lượng cao... http://www.ledviet.info - manhha2700@yahoo.com Đt:0949299699 thay đổi nội dung bởi: manhha2799, 19-01-2009 lúc 09:28 AM. |
![]() |
![]() |
![]() |
#13 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
#14 |
Nhập môn đệ tử
Tham gia ngày: Dec 2008
Bài gửi: 7
: |
Một số chương trình hiến thị LCD có viết là LCD = 0xC3 // vị trí hàng 2,cột 4//,em chưa hiểu mấy cách xác định vị trí này.
|
![]() |
![]() |
![]() |
#15 | |
Trưởng lão PIC bang
|
Trích:
http://www.winpicprog.co.uk/pic_tutorial3.htm Để đặt con trỏ màn hình LCD ở một vị trí nào đó, bạn sẽ dùng lệnh "Set Display Address", có bit 7 mang giá trị '1' (ứng với giá trị 0x80). 7 bit thấp hơn của lệnh sẽ xác định địa chỉ cần di chuyển con trỏ đến. Thông thường, hàng 1 của LCD có địa chỉ bắt đầu là 0x00, hàng 2 của LCD có địa chỉ bắt đầu là 0x40. Do đó, cột 4 của hàng 2 sẽ có địa chỉ là 0x43. Như vậy cần xuất lệnh 0x80 + 0x43 = 0xC3 để di chuyển đến hàng 2, cột 4. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
![]() |
![]() |
![]() |
|
|