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 Bài Trong Ngày 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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 18-10-2013, 12:23 AM   #3
lilean
Nhập môn đệ tử
 
Tham gia ngày: Sep 2006
Bài gửi: 1
:
Mình chỉ sửa phần code nội dung thôi nhé, lâu ko làm Pic nên ko nhớ các flag bạn bật đã đúng chưa.
Theo mình hiểu thì ý bạn là:
- Khi nhấn nút RB0 rồi thả tay thì led7 sẽ đếm tiến từ biến đếm hiện tại tăng lên +1 và nếu đã tới 9 thì sẽ quay về 0
- Khi nhấn nút RC0 thì sẽ đếm lùi từ biến hiện tại giảm đi 1. và nếu đã đến 0 thì chuyển về 9.
Nếu mình hiểu ý bạn muốn như trên là đúng thì code sẽ thế này :


Trích:
Nguyên văn bởi linhnguyen93nb View Post
em xin đượ mô tả nguyên lý làm việc của nó như sau:
mạch em dùng 2 nút nhấn 1 nút nhân RB0 khi nhấn vào thì led 7 đoạn đếm số từ 0-9.
còn khi nhấn RC0 thì led 7 đoạn giảm xuống từ 9-0.
khi nhấn 1 trong 2 công tắc thi led chân RA0 sẽ sáng trong khoảng 5s rồi tắt.
em lập trình nó như sau:
anh chị coi sửa lại giùm em cái. em mới vào nghề nên phần này hơi kém.

#include <16f877a.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP, NOBROWNOUT
#use delay(clock=1200000)
#use fast_io(b)
#use fast_io(d)
#use fast_io(c)
#byte portd=0x08
#byte portb=0x06
#byte portc=0x07
#bit dk=portb.0
#bit dk1=portc.0
unsigned char x = 0; // hạn chế dùng biến loại int nếu ko cần thiết
void hien(unsigned char z);
void khong_lam_viec();
void main()
{
set_tris_b(0b00000001);
set_tris_c(0b00000001);
set_tris_d(0b00000000);
unsigned char i =0, j = 0; // biến chạy

while(1)
{
if(dk==0)
{
if (++i >= 10) // đợi 10 chu kỳ code để loại bớt nhiễu nút ấn
{
i = 10; // giới hạn i để tránh tràn bít
}
}
else
if ( dk == 1)
{ if (i >=10)
{
if ( ++x > 9) // tăng biến giá trị tới 9 thì cho về 0
x = 0;

}
i = 0;
}
// nút ấn lùi
if(dk1==0)
{
if (++j >= 10) // đợi 10 chu kỳ code để loại bớt nhiễu nút ấn
{
j = 10; // giới hạn j để tránh tràn bít
}
}
else
if ( dk1 == 1)
{ if (j >=10)
{
if ( x >= 1 ) // tăng biến giá trị tới 9 thì cho về 0
x--
else x = 9;
}
j = 0;
}
hien(x);
}
}
void hien(unsigned char z)
{
switch(z)
{
case 0: {portd=0x3F; break;}
case 1: {portd=0x06; break;}
case 2: {portd=0x5B; break;}
case 3: {portd=0x4F; break;}
case 4: {portd=0x66; break;}
case 5: {portd=0x6D; break;}
case 6: {portd=0x7D; break;}
case 7: {portd=0x07; break;}
case 8: {portd=0x7F; break;}
case 9: {portd=0x6F; break;}
default: break;
}
delay_ms(5);
}
void khong_lam_viec(unsigned char z)
{
while(1)
{
hien(z);
}
}
mạch mô phỏng của nó:
https://mega.co.nz/#!Ap0VFayK!WIp4AG...umvZv69W9UW1wo
lilean vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 09:20 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