PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Học CCS thông qua Tutorial PICVIETNAM (http://www.picvietnam.com/forum/showthread.php?t=689)

nguyenhuytuong 03-01-2010 08:27 PM

Mình đang viết chương trình hiển thị trên LCD, mình thấy rất khó khăn để hiểu các chương trình trên diễn đàn nếu không hiểu rõ về bộ điều khiển HD44780U của LCD của Hitachi. Nếu bạn nào cũng đang làm về LCD thì nên đọc datasheet của con này.

chang kho 12-01-2010 07:52 AM

#INCLUDE<16F877A.H>
#INCLUDE<def_877a.h>
#FUSES XT,NOWDT,NOPROTECT
#USE DELAY(CLOCK=20000000)
#DEFINE RS RE2
#DEFINE RW RE1
#DEFINE E RE0
#DEFINE LCD PORTB
CONST UNSIGNED CHAR LINE1[]={'D','O','','A','N','','T','O','T','','N','G','H' ,'I','E','P','#'};
CONST UNSIGNED CHAR LINE2[]={'K','I','T','','T','H','U','C','','T','A','P','' ,'P','I','C','','1','6','F','8','7','7','A','','', '#'};
CONST UNSIGNED CHAR LINE3[]={'','','K','H','O','A','','D','T','','-','','T','H','#'}
CONST UNSIGNED CHAR LINE4[]={
'','','G','V','H','D',':','P','H','U','N','G','',' B','A','O','','C','H','A','U',
'','','S','V','T','H',':','H','U','Y','N','H','',' V','A','N','','T','R','U','N','G'
,'','&','','N','G','U','Y','E','N','','T','U','A', 'N','','V','U','','','#'}
doan code nay hok bt sao ma em chay no hok dc
em bt no sai o cho defs_16f877a.
phai chen file def_877a nhu the nao
may anh cho file va chi dum nhe

lednghethuat 22-01-2010 10:54 PM

Chào các bạn. Mình học tin mới chuyển sang nghiên cứu pic. Hôm nay tìm trên diễn đàn mãi không được cái hàm trả về chiều dài của mảng. bạn nào biết chỉ mình với. thank nhiều:

Mảng A={1,2,3,4,5} muốn xác định chiều dài của nó thì dùng hàm nao?

manhdktd 14-06-2010 06:46 PM

Trích:

Nguyên văn bởi anhquangngai (Post 6240)
anh namqn cho em hỏi luôn cái chương trình này:
Code:

//Chuong trinh led sang don o PORTB
/*ket qua o PORTB là:00000001,00000010,00000100,00001000,00010000,00100000,01000000,10000000,10000001,10000010,10000100,10001000,.....cuoi cung thi PORTB=0xFF */
#include<16F877A.h>
#include<def_16f877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(b)
int8 sck,slx,bienxoay,bienluu,giatri;
main()
  {
      trisb=0;
    while(true){
      sck=8;
      portb=0;
      delay_ms(100);
      while(sck<1)
        {
            bienxoay=0;
            slx=sck;
          while(slx<1)
              {
              bienxoay=bienxoay<<1;
              giatri=bienluu|bienxoay;
              portb=giatri;
              delay_ms(100);
              slx--;
              }
          bienluu=giatri;
          sck--;
        }
      }
  }

chương trình em viết như thế nhưng sao nó ko chạy và ban đầu em gán cho biến sck=8 thì trong dk while nó có chạy hay ko?
Cảm ơn anh trước!
Em mới học nên ko hiểu!

làm sao chạy được khi giá trị ban đầu của sck=8 ma trong khi bạn kiểm tra vòng lặp while(sck<1)?????

manhdktd 14-06-2010 06:49 PM

Trích:

Nguyên văn bởi tiendungkct (Post 13501)
bạn cũng có thể viết như sau:
while(1)// vong lap luôn đúng
{
for(a=0;a=8;a++)
..................
}

for(a=0;a<8;a++)
bạn viết sai

manhdktd 14-06-2010 09:45 PM

Trích:

Nguyên văn bởi hopeman (Post 20173)
cả hai lệnh này đều là lệnh gọi hàm thôi bạn ơi
vd lcd_init() tức là gọi hàm void lcd_init(void){...} đây có lẽ là hàm khởi tạo cho lcd, còn hàm còn lại là hàm đẩy 1 ký tự (char) đi thôi.

cld_putc('\f')
là lệnh xóa màn hình

thanhphuc15 01-11-2010 09:00 AM

may a oi cho e hoi trong ccs thi thoi gian mac dinh la s , ms hay la us vay...
vi e lap trinh de giai ma remote tv sony nhung khi e get_timer xong roi e ho biet la phai so sanh cai timer nay voi s, ms hay la us nua..
mong cac anh chi giup

haitaccr113 14-12-2010 09:06 AM

Chào mọi người. E mới chân ướt chân ráo tìm hiểu pic mong mấy huynh chỉ giáo. E có câu hỏi này tuy ngớ ngẩn "Khi vẽ mạch orcad thì làm sao biết gắn các tụ bao nhiêu với chân nguồn ?

phamquocgia 01-04-2011 02:20 PM

bạn dùng tụ 104

alycuong 21-05-2011 02:22 AM

Hỏi code.
 
#include <16F877a.h>
#define LED1 PIN_B4 //HANG NGHIN
#define LED2 PIN_B5 //HANG TRAM
#define LED3 PIN_B6 //HANG CHUC
#define LED4 PIN_B7 //HANG DON VI
#fuses hs, nowdt, put, nolvp, brownout
#use delay(clock=20000000)
int16 a,b,i,j,dv,chuc,tram,nghin,n;


void led7()
{
nghin=a/1000;
a=a%1000;
tram=a/100;
a=a%100;
chuc=a/10;
dv=a%10;
output_b(dv|0b10000000); //hien hang don vi
delay_us(1000);
output_b(chuc|0b01000000);//hien hang chuc
delay_us(1000);
output_b(tram|0b00100000);//hien hang tram
delay_us(500);
output_b(nghin|0b00010000);//hien hang nghin
delay_us(500);
}
void main()
{
set_tris_b(0x00);//chon port b lam port dau ra
set_tris_d(0x00);//chon port b lam port dau ra
while(1)
{
n++;
a=n;
led7();
}
}



e có down trên diễn đàn về đoạn code về led 7 doan. Cho e hỏi trong phần code trên:

output_b(dv|0b10000000); có nghĩa là gì. xuất ra portb (dv|0b10000000) là như thế nào ah.

alycuong 23-05-2011 10:40 PM

Trích:

Nguyên văn bởi alycuong (Post 45320)
#include <16F877a.h>
#define LED1 PIN_B4 //HANG NGHIN
#define LED2 PIN_B5 //HANG TRAM
#define LED3 PIN_B6 //HANG CHUC
#define LED4 PIN_B7 //HANG DON VI
#fuses hs, nowdt, put, nolvp, brownout
#use delay(clock=20000000)
int16 a,b,i,j,dv,chuc,tram,nghin,n;


void led7()
{
nghin=a/1000;
a=a%1000;
tram=a/100;
a=a%100;
chuc=a/10;
dv=a%10;
output_b(dv|0b10000000); //hien hang don vi
delay_us(1000);
output_b(chuc|0b01000000);//hien hang chuc
delay_us(1000);
output_b(tram|0b00100000);//hien hang tram
delay_us(500);
output_b(nghin|0b00010000);//hien hang nghin
delay_us(500);
}
void main()
{
set_tris_b(0x00);//chon port b lam port dau ra
set_tris_d(0x00);//chon port b lam port dau ra
while(1)
{
n++;
a=n;
led7();
}
}



e có down trên diễn đàn về đoạn code về led 7 doan. Cho e hỏi trong phần code trên:

output_b(dv|0b10000000); có nghĩa là gì. xuất ra portb (dv|0b10000000) là như thế nào ah.

k có ai giúp e ah.

qiuyinffy 14-06-2011 09:15 AM

phía dưới bên trái có bảng mô phỏng

bbld 05-12-2011 05:46 PM

Trích:

Nguyên văn bởi FFGmember (Post 5609)
LCD cùng với led đơn và led 7 thanh là một trong những phương thức để hiển thị các kết quả các thông số. Thông thường tôi luôn chọn LCD vì lập trình đơn giản và đông thời có thể thể hiện được các giá trị mà mình mong muốn.

Có rất rất nhiều source code cho việc viết LCD 4 bit. Và một trong số đó là file lcd_lib_4bit.c đã đươc linhnc308 giới thiệu trong tập tutorial của mình

Lại thực thi các bước như ở trên, với đoạn code dưới đây.

PHP Code:

#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c> // Thu vien ham cho LCD

void main()
{
trisa 0xFF;
trisb 0x01;
trisd 0x00;
LCD_init();
Printf(LCD_putchar," PICVIETNAM tut");
LCD_putcmd(0xC3);
Printf(LCD_putchar," LCD 4bit ");



[/LIST]

mọi người cho mình hỏi 1 điều là LCD mình mới mua(chưa dùng đựoc lần nào).trong lcd_lib_4bit.c của anh linh có những hàm khởi tạo lcd đúng như nhà sx yêu cầu.vậy sao mình kết nối lcd dùng đoạn code trên thì ko chạy,chỉ hiện 1 dòng đen
mình đã define port rồi,RS=D0,EN=D2,D4-D7,vậy lỗi này có thể do LCD hỏng hay là do khởi tạo chưa đúng?

ngdnhanbk 11-01-2012 03:18 AM

Buồn quá! Học PIC qua tutorial mà chỉ được 1 cái tutorial. hix

teemo 06-12-2014 10:40 PM

anh ơi, làm sao khắc phục lỗi này vậy anh:
*** Error 18 "def_877a.h.c" Line 1(9,20): File can not be opened
Not in "E:\Program Files\PICC\devices\16F877A.h"
Not in "E:\Program Files\PICC\dr\16F877A.h"
Not in project "C:\Users\NhokPro1234\Documents\pi\project1\16F877 A.h"
*** Error 128 "def_877a.h.c" Line 3(1,12): A #DEVICE required before this line
2 Errors, 0 Warnings.


Múi giờ GMT. Hiện tại là 01:24 AM.

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