PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 27-04-2011, 03:09 PM   #1
tomato2711
Đệ tử 2 túi
 
tomato2711's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 26
:
Trích:
Nguyên văn bởi tdm View Post
while(true)
{

portb=1;
portb=2;
portb=4;
portb=8;
hienthi();
}
bạn viết thế này thì phím không nhấn nó cũng hiển thị ra lcd.
VẬY viết lại SAO?bạn chỉnh lại dùm mình đi!
__________________
Càng học càng thấy ngu ra.(~.~)...............
tomato2711 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2011, 04:45 PM   #2
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi tomato2711 View Post
VẬY viết lại SAO?bạn chỉnh lại dùm mình đi!
code:
Code:
//*****************************************************************************
// Author  : nhh
// Date    : 03/04/06
// Hardware: PIC16F877A
//*****************************************************************************
#include <16F877A.h>
#include <defs_16F877A.h>
#include <lcd_lib.c>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
void hienthi(void);
int a,i;
const unsigned char dig[]={"0123456789abcdef"};
                  // ma hoa digital duoi dang mang
// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
   {
         {
         if(RB4&&RB0)
         a=dig[0];
         }
         {
         if(RB4&&RB1)
         a=dig[4];
         }
         {
         if(RB4&&RB2)
         a=dig[8];
         }
         {
         if(RB4&&RB3)
         a=dig[12];
         }
//.......
         {
         if(RB5&&RB0)
         a=dig[1];
         }
         {
         if(RB5&&RB1)
         a=dig[5];
         }
         {
         if(RB5&&RB2)
         a=dig[9];
         }
         {
         if(RB5&&RB3)
         a=dig[13];
         }
//........
          {
         if(RB6&&RB0)
         a=dig[2];
         }
         {
         if(RB6&&RB1)
         a=dig[6];
         }
         {
         if(RB6&&RB2)
         a=dig[10];
         }
         {
         if(RB6&&RB3)
         a=dig[14];
         }
//........
          {
         if(RB7&&RB0)
         a=dig[3];
         }
         {
         if(RB7&&RB1)
         a=dig[7];
         }
         {
         if(RB7&&RB2)
         a=dig[11];
         }
         {
         if(RB7&&RB3)
         a=dig[15];
         }
   RBIF=0; //Xoa co ngat RB
   }
   hienthi();
   while(bit_test(PORTB,4))
   {
   }
    while(bit_test(PORTB,5))
   {
   }
   while(bit_test(PORTB,6))
   {
   }
   while(bit_test(PORTB,7))
   {
   }
   delay_ms(1);//chong nay phim
  
}
// Chuong trinh chinh
main()
{
set_tris_b(0b11110000);
set_tris_d(0);
set_tris_e(0);
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
portb=0;
portc=0;
lcd_init();
lcd_putcmd(0x01);
printf(lcd_putchar,"gia tri phim:");
 lcd_putcmd(0xc0);
while(true)
   {
   portb=1;
   portb=2;
   portb=4;
   portb=8;
   
   }
}
  
void hienthi()
{
lcd_putcmd(0xc0);
printf(lcd_putchar,"                          ");
lcd_putcmd(0xc0);
lcd_putchar(a);// doc gia tri nut nhan lên man hinh LCD
}
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2011, 10:45 PM   #3
tomato2711
Đệ tử 2 túi
 
tomato2711's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 26
:
cảm ơn TDM nha ! có chổ chống nảy phím hơi khó hiểu!
__________________
Càng học càng thấy ngu ra.(~.~)...............
tomato2711 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-04-2011, 11:35 PM   #4
tomato2711
Đệ tử 2 túi
 
tomato2711's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 26
:
void hienthi()
{
lcd_putcmd(0xc0); //xóa
printf(lcd_putchar," "); //xóa
lcd_putcmd(0xc0); //xóa
lcd_putchar(a);// doc gia tri nut nhan lên man hinh LCD
}

Em vừa xóa thử 3 dòng trong hienthi của tdm, thì LCD hiển thị nút nhấn nhanh hơn, nên ko bit2 3 dòng có tác dụng gì? (biết là có 1 lệnh ép con trỏ về đầu dòng)
Em sửa lại code hiển thị để LCD hiển thị 11 số,
void hienthi()
{

lcd_putchar(a);// doc gia tri nut nhan lên man hinh LCD
i=i+1;
if (i>12)
{
i=0;
lcd_putcmd(0x01);
printf(lcd_putchar,"gia tri phim:");
lcd_putcmd(0xc0);
}
}
nhưng ko hiểu sao:
1/ số đầu tiên lại ko hiển thị ngay ô đầu dòng, mà hiển thị ô kế bên (khi nhập lần 2 mới đc đầu dỏng)
2/ phím nhấn có lúc lại hiển thị số double( khi nhấn 1 lần nhưng lại hiển thị liên tục 2 số, thỉnh thoảng bị )
__________________
Càng học càng thấy ngu ra.(~.~)...............
tomato2711 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2011, 02:22 PM   #5
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi tomato2711 View Post
void hienthi()
{
lcd_putcmd(0xc0); //xóa
printf(lcd_putchar," "); //xóa
lcd_putcmd(0xc0); //xóa
lcd_putchar(a);// doc gia tri nut nhan lên man hinh LCD
}

Em vừa xóa thử 3 dòng trong hienthi của tdm, thì LCD hiển thị nút nhấn nhanh hơn, nên ko bit2 3 dòng có tác dụng gì? (biết là có 1 lệnh ép con trỏ về đầu dòng)
Em sửa lại code hiển thị để LCD hiển thị 11 số,
void hienthi()
{

lcd_putchar(a);// doc gia tri nut nhan lên man hinh LCD
i=i+1;
if (i>12)
{
i=0;
lcd_putcmd(0x01);
printf(lcd_putchar,"gia tri phim:");
lcd_putcmd(0xc0);
}
}
nhưng ko hiểu sao:
1/ số đầu tiên lại ko hiển thị ngay ô đầu dòng, mà hiển thị ô kế bên (khi nhập lần 2 mới đc đầu dỏng)
2/ phím nhấn có lúc lại hiển thị số double( khi nhấn 1 lần nhưng lại hiển thị liên tục 2 số, thỉnh thoảng bị )
int a,i=0x00;//gán i=0x00 ngay tại đầu ct sẽ hết lỗi (1)
lỗi (2):
viết lại như sau:
while(bit_test(PORTB,4))
{
}
delay_ms(10);//chong nay phim
while(bit_test(PORTB,5))
{
}
delay_ms(10);//chong nay phim
while(bit_test(PORTB,6))
{
}
delay_ms(10);//chong nay phim
while(bit_test(PORTB,7))
{
}
delay_ms(10);//chong nay phim
chèn thêm lệnh delay_ms(10) sau mỗi lần thoát khỏi while
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2011, 02:28 PM   #6
tomato2711
Đệ tử 2 túi
 
tomato2711's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 26
:
Trích:
Nguyên văn bởi tdm View Post
int a,i=0x00;//gán i=0x00 ngay tại đầu ct sẽ hết lỗi (1)
lỗi (2):
viết lại như sau:
while(bit_test(PORTB,4))
{
}
delay_ms(10);//chong nay phim
while(bit_test(PORTB,5))
{
}
delay_ms(10);//chong nay phim
while(bit_test(PORTB,6))
{
}
delay_ms(10);//chong nay phim
while(bit_test(PORTB,7))
{
}
delay_ms(10);//chong nay phim
chèn thêm lệnh delay_ms(10) sau mỗi lần thoát khỏi while
oh yeah! cám ơn anh tdm rất nhìu, bít thêm chút ít nữa. Cám ơn anh đã chỉ giáo
__________________
Càng học càng thấy ngu ra.(~.~)...............
tomato2711 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2011, 02:41 PM   #7
tomato2711
Đệ tử 2 túi
 
tomato2711's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 26
:
à, em muốn hỏi thêm tí, vậy nếu em muốn truyền thêm i2c để lưu vào epprom ngoài (24c256) thì sẽ gọi trong phần hienthi phai ko? và nếu em lưu vào con 24c256 thì làm sao để biết là nó đã lưu vào rồi hay chưa? vì nếu con savle là con pic thì minh ktra đc, còn con này thì e potay

yahoo em: nhoc_tomato2711@yahoo.com
__________________
Càng học càng thấy ngu ra.(~.~)...............
tomato2711 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam