Chào các bạn trong bài đăng này mình sẽ hướng dẫn các bạn đếm từ 0 - 99 sử dụng 2 nút nhấn. Một nút nhấn tăng và một nút nhấn giảm.
Ảnh mô phỏng protues.
Đây là code chương trình.
#include <16f877a.h>
#include <def_877a.h>
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=8000000)
int maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int giatri;
int chuc,donvi;
#bit led1 =porta.1
#bit led2 =porta.2
void tachso()
{
chuc=(giatri)/10;
donvi=(giatri)%10;
}
void hienthi()
{
portb=maled[chuc];
led2=0;
delay_ms(1);
led2=1;
portb=maled[donvi];
led1=0;
delay_ms(1);
led1=1;
}
void main()
{
trisa=0x00;
trisb=0x00;
porta=0xff;
trisc=0xff;
while(true)
{
tachso();
hienthi();
if(!rc0)
{
delay_ms(10);
while(!rc0);
giatri++;
if(giatri>10)
{
giatri=0;
}
}
else
if(!rc1)
{
delay_ms(10);
while(!rc1);
giatri--;
if(giatri<=0)
{
giatri=99;
}
}
}
}
Link download project.
http://adf.ly/11512871/0-99-button
Ảnh mô phỏng protues.
Đây là code chương trình.
#include <16f877a.h>
#include <def_877a.h>
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=8000000)
int maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int giatri;
int chuc,donvi;
#bit led1 =porta.1
#bit led2 =porta.2
void tachso()
{
chuc=(giatri)/10;
donvi=(giatri)%10;
}
void hienthi()
{
portb=maled[chuc];
led2=0;
delay_ms(1);
led2=1;
portb=maled[donvi];
led1=0;
delay_ms(1);
led1=1;
}
void main()
{
trisa=0x00;
trisb=0x00;
porta=0xff;
trisc=0xff;
while(true)
{
tachso();
hienthi();
if(!rc0)
{
delay_ms(10);
while(!rc0);
giatri++;
if(giatri>10)
{
giatri=0;
}
}
else
if(!rc1)
{
delay_ms(10);
while(!rc1);
giatri--;
if(giatri<=0)
{
giatri=99;
}
}
}
}
Link download project.
http://adf.ly/11512871/0-99-button
3 nhận xét
Write nhận xétEm mới tập tành vào học pic, gặp bài này không biết làm, nhờ mọi người giúp đỡ e với. Em cảm ơn !
ReplyĐề Bài:
a. Sử dụng timer ( tự chọn ) , viết chương trình ( C) tạo xung vuông với tần số 200KHz. Khi nhấn nút số 1, xung phát ra với chu kỳ nhiệm vụ là 50%, khi ấn nút 2 , xung phát ra với chu kỳ nhiệm vụ 80%
b. Thực hiện câu a dùng hàm delay thay cho timer
Trước tiên e phải tạo xung bằng timer đã. Rồi thêm nút nhấn giống trên bài đăng này thay phần điều kiện vào thôi.
Replye thử tham khảo cách tạo xung này thử nha a không rành về ccs lắm nên không biết đúng không nữa. E thêm vào nút nhấn với thay đổi thông số cài đặt cho timer là được.
Reply#include <16f877a.h>
#include
#fuses HS,NOLVP,NOWDT,PUT,XT
#use delay(clock=4000000)
int i;
void main()
{
TMR1IF=0;
setup_timer_1(T1_INTERNAL | T1_DIV_BY_2);
set_timer1(24280);
trisb=0x00;
portb=0x00;
while(true)
{
while(TMR1IF==0)
{
i++;
TMR1IF=0;
set_timer1(24280);
if(i==2)
{
delay_ms(10);
rb0 = !rb0;
}
}
}
}
EmoticonEmoticon