PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   anh chị coi giùm em cái code và chỉnh sủa nó giùm em cái. em cám ơn (http://www.picvietnam.com/forum/showthread.php?t=32942)

linhnguyen93nb 13-10-2013 09:08 AM

anh chị coi giùm em cái code và chỉnh sủa nó giùm em cái. em cám ơn
 
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
int x, y , z;
void hien(z);
void khong_lam_viec();
void main()
{
set_tris_b(0b00000001);
set_tris_c(0b00000001);
set_tris_d(0b00000000);
x=0;y=0;z=0;
while(1)
{
if(dk==0)
{
if(dk==1)
{
x=x+1;
}

}
else
{
if(dk1==0)
{
if(dk1==1)
{
y=y+1;
}
}
}
z=x-y;
hien(z);
}
}
void hien(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(z)
{
while(1)
{
hien(z);
}
}
mạch mô phỏng của nó:
https://mega.co.nz/#!Ap0VFayK!WIp4AG...umvZv69W9UW1wo

linhnguyen93nb 13-10-2013 08:43 PM

có ai gúp em với

lilean 18-10-2013 12:23 AM

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 (Post 83228)
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



Múi giờ GMT. Hiện tại là 12:44 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