Tải bản đầy đủ (.docx) (43 trang)

498289904 mạch 7 đoạn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (101.21 KB, 43 trang )

Bài 1.5: Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại 30 lần.
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)

Void main(void)
{
for(int i =0;i<30; i++)
{
Output_c(0x01);
Delay_ms(300);
Output_c(0x03);
Delay_ms(300);
Output_c(0x07);
Delay_ms(300);
Output_c(0xF);
Delay_ms(300);
Output_c(0x1F);
Delay_ms(300);
Output_c(0x3F);
Delay_ms(300);
Output_c(0x7F);
Delay_ms(300);
Output_c(0xFF);
Delay_ms(300);
Output_c(0x00);
Delay_ms(300);
}

Bài 1.6: Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại 30 lần, sau đó tắt
dần từ D1 – D8, lặp lại 257 lần


#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP


#use delay(clock=8M)

Void main(void)
{
for(int i =0;i<30; i++)
{
Output_c(0x01);
Delay_ms(300);
Output_c(0x03);
Delay_ms(300);
Output_c(0x07);
Delay_ms(300);
Output_c(0xF);
Delay_ms(300);
Output_c(0x1F);
Delay_ms(300);
Output_c(0x3F);
Delay_ms(300);
Output_c(0x7F);
Delay_ms(300);
Output_c(0xFF);
Delay_ms(300);
Output_c(0x00);
Delay_ms(300);
}
for(int16 j =0;j<257; j++)

{
Output_c(0xFF);
Delay_ms(300);
Output_c(0xFC);
Delay_ms(300);}


Bài 1.7: Sửa chương trình để Led sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại 30 lần, sau đó tắt
dần từ D1 – D8, lặp lại 257 lần. Lặp lại tồn bộ q trình 40 lần.
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)

Void main(void)
{
For(int K=0;K<40:K++)
{
for(int i =0;i<30; i++)
{
Output_c(0x01);
Delay_ms(300);
Output_c(0x03);
Delay_ms(300);
Output_c(0x07);
Delay_ms(300);
Output_c(0xF);
Delay_ms(300);
Output_c(0x1F);
Delay_ms(300);
Output_c(0x3F);

Delay_ms(300);
Output_c(0x7F);
Delay_ms(300);
Output_c(0xFF);
Delay_ms(300);
Output_c(0x00);
Delay_ms(300);
}
for(int16 j =0;j<257; j++)


{
Output_c(0xFE);
Delay_ms(300);
}}}

Bài 1.8: Vẽ lại sơ đồ mạch trong đó D1, D3, D5, D7 tích cực mức 1, 4 Led cịn lại tích cực mức 0. Viết lại
chương trình như bài 1.7.
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)

Void main(void)
{
For(int K=0;K<40:K++)
{
for(int i =0;i<30; i++)
{
Output_c(0x01);
Delay_ms(300);

Output_c(0x03);
Delay_ms(300);
Output_c(0x07);
Delay_ms(300);
Output_c(0xF);
Delay_ms(300);
Output_c(0x1F);
Delay_ms(300);
Output_c(0x3F);
Delay_ms(300);
Output_c(0x7F);
Delay_ms(300);
Output_c(0xFF);
Delay_ms(300);


Output_c(0x00);
Delay_ms(300);
}
Output_c(0xAB);
Delay_ms(300);
Output_c(0XA9);
Delay_ms(300);
Output_c(0xAC);
Delay_ms(300);

Viết chương trình hiện các Led đơn sáng dần từ D1 – D8, thời gian delay 300ms, lặp lại 8 lần đồng thời
hiện số lần lặp trên Led7 đoạn 4.
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)
CONST unsigned char LED[10] ={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
CONST unsigned char densangdan[9] ={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
void sangdan()
{
Output_c(0x01);
Delay_ms(300);
Output_c(0x03);
Delay_ms(300);
Output_c(0x07);
Delay_ms(300);
Output_c(0xF);
Delay_ms(300);
Output_c(0x1F);
Delay_ms(300);


Output_c(0x3F);
Delay_ms(300);
Output_c(0x7F);
Delay_ms(300);
Output_c(0xFF);
Delay_ms(300);
Output_c(0x00);
Delay_ms(300);
}
void main ()
{
for(int i =0;i<9;i++)
{output_b(LED[i+1]);

output_d(0xf7);//mo led 4
sangdan();
//delay_ms(100);
}
}
Mạch sáng dần led đơn
include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
void main (void)
{
While (1)
{
Output_c(0x01);
Delay_ms(400);
Output_c(0x03);
Delay_ms(400);
Output_c(0x07);


Delay_ms(400);
Output_c(0xF);
Delay_ms(400);
Output_c(0x1F);
Delay_ms(400);
Output_c(0x3F);
Delay_ms(400);
Output_c(0x7F);
Delay_ms(400);
Output_c(0xFF);

Delay_ms(400);
Output_c(0x00);
Delay_ms(400);
}
}
Mạch đếm 1-30
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
int chuc,donvi; //2 bien toan cuc
int dem;// dem:130
CONST unsigned char led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
CONST unsigned char densangdan[9] ={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
void hienthi()
{
chuc=dem/10;
donvi=dem%10;
output_d(0xff);
output_b(led7s[chuc]);
output_d(0xf7);
delay_ms(3);


output_d(0xff);//tat
output_b(led7s[donvi]);
output_d(0xfb);
delay_ms(3);
}
void delay_100ms()
{ for(int k=0;k<17;k++)

{hienthi();
}
}
void sangdan()
{
Output_c(0x01);
Delay_100ms();
Output_c(0x03);
Delay_100ms();
Output_c(0x07);
Delay_100ms();
Output_c(0xF);
Delay_100ms();
Output_c(0x1F);
Delay_100ms();
Output_c(0x3F);
Delay_100ms();
Output_c(0x7F);
Delay_100ms();
Output_c(0xFF);
Delay_100ms();
Output_c(0x00);
Delay_100ms();
}


void main ()
{
dem=1;
for(int i =0;i<30;i++)

{
sangdan();
if(dem < 30)
{dem=dem+1;}
if(dem==31)
{dem=1;}

}
}
Viết chương trình kiểm tra SW như sau:
-

Nhấn SW1: D5 tắt trong khi D6 sáng/tắt vô hạn; thời gian delay 200 ms.

-

Nhấn SW2: D6 tắt trong khi D5 sáng/tắt vô hạn; thời gian delay 500 ms.

#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#define D5

PIN_C4

#define D6

PIN_C5

#define SW1


PIN_B4

#define SW2

PIN_B5

void main (void)
{
while(1)
{
if(!input(SW1))
{output_low(D5);
while(1)


{output_toggle(D6);
for(int i=0;i<20;i++)
{if(!input(SW2))
{break;}
delay_ms(10);}
if(!input(SW2))
{break;}
}
}

if(!input(SW2))
{output_low(D6);
while(1)
{

output_toggle(D5);
for(int j=0;j<20;j++)
{if(!input(SW1))
{break;}
delay_ms(25);}
If(!input(SW1))
{break;}
}
}
}

#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#define D5

PIN_C4


#define D6

PIN_C5

#define SW1

PIN_B4

#define SW2

PIN_B5


int dem;
void main (void)
{
dem=0;
while(1)
{
if(!input(SW1))
{
output_low(D5);
while(1)
{
output_toggle(D6);
for(int i=0;i<20;i++)
{
if(!input(SW2))
{break;}
delay_ms(10);
}
if(!input(SW2))
{break;}
}
}

if(!input(SW2))
{
dem= dem+1;
delay_ms(200);// chong doi phim



if(dem==3)
{
dem=0;
output_low(D6);
while(1)
{
output_toggle(D5);
for(int j=0;j<20;j++)
{
if(!input(SW1))
{break;}
delay_ms(10);
}
If(!input(SW1))
{break;}
}
}
}
}
}
Led 7doan hien thi star- stop
#include <16F877A.h>
#FUSES NOWDT, HS, NOPUT, PROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8000000)
CONST unsigned char LEDstar[4] = {0x49,0xe1,0x11,0xf5};
CONST unsigned char LEDstop[4] = {0x49,0xe1,0x03,0x31};
CONST unsigned char dk[4] = {0xf7, 0xfb, 0xfd,0xfe};
void star ()
{ for (int8 i = 0; i < 4; i++)
{

output_d(0xff);


output_b(LEDstar[i]);
output_d(dk[i]);
delay_ms(3);
}
}
void stop ()
{ for (int j = 0; j < 4; j++)
{
output_d(0xff);
output_b(LEDstop[j]);
output_d(dk[j]);
delay_ms(3);
}
}

Void main (void)
{ output_d(0xff);
While (1)
{
for (int16 k=0 ; k<416; k++ )
{ star ();
}
for ( int16 h =0 ; h<416 ; h++ )
{ stop();
}
}
}

Mạch tổng hợp
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)


#define SW1

PIN_A3

#define SW2

PIN_A4

int16 dem;
int tram,chuc,donvi;
CONST unsigned char LEDstar[4] = {0x49,0xe1,0x11,0xf5};
CONST unsigned char LEDstop[4] = {0x49,0xe1,0x03,0x31};
CONST unsigned char led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
CONST unsigned char densangdan[9] ={0x01,0x03,0x07,0xf,0x1f,0x3f,0x7f,0xff,0x00};
CONST unsigned char dk[4] = {0xf7, 0xfb, 0xfd,0xfe};
void star()
{
for(int k=0;k<200;k++)
{
for (int8 i = 0; i < 4; i++)
{
output_d(0xff);
output_b(LEDstar[i]);
output_d(dk[i]);

delay_ms(3);
}
}
}

void sangdan()
{
Output_c(0x18);
Delay_ms(300);
Output_c(0x3C);
Delay_ms(300);
Output_c(0x7E);
Delay_ms(300);


Output_c(0xFF);
Delay_ms(300);
Output_c(0x00);
Delay_ms(300);
}
void hienthi()
{
tram=dem/100;
chuc=(dem%100)/10;
donvi=(dem%100)%10;
output_d(0xff);
output_b(led7s[tram]);
output_d(0xf7);
delay_ms(3);
output_d(0xff);

output_b(led7s[chuc]);
output_d(0xfb);
delay_ms(3);
output_d(0xff);//tat
output_b(led7s[donvi]);
output_d(0xfd);
delay_ms(3);
}
void delay_100ms()
{ for(int k=0;k<17;k++)
{hienthi();
}
}
void sang()
{
Output_c(0x01);


Delay_100ms();
Output_c(0x03);
Delay_100ms();
Output_c(0x07);
Delay_100ms();
Output_c(0xF);
Delay_100ms();
Output_c(0x1F);
Delay_100ms();
Output_c(0x3F);
Delay_100ms();
Output_c(0x7F);

Delay_100ms();
Output_c(0xFF);
Delay_100ms();
Output_c(0x00);
Delay_100ms();

}
void stop()
{
for (int t=0;t<200;t++)
{
for(int j=0;j<4;j++)
{
output_d(0xff);
output_b(LEDstop[j]);
output_d(dk[j]);
delay_ms(5);
}
}


}
void main (void)
{
//output_d(0xff);
dem=1;
while(1)
{
if(!input(SW1))
{

star();
sangdan();
for(int16 i =0;i<400;i++)
{
sang();
if(dem < 400)
{dem=dem+1;}
if(dem==401)
{dem=1;}
if (!input(SW2))
break;

}

}
if (!input(SW2))
{
stop();
}
}
}


Viết chương trình hiển thị chữ: “Counter:” trên dịng 1 và số đếm từ 00 – 99 trên dòng 2 từ tọa độ (x,y) = (10,2);
thời gian delay để tăng số đếm là 300 ms.
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#include <lcd.c>
void main ()

{
int8 sodem;
lcd_init();
set_tris_d(0x00);
output_d(0x00);
sodem=0;
lcd_gotoxy(1,1);
printf(lcd_putc,"Counter:");//yêu cầu đề bài
//-------------------------while(TRUE)
{
lcd_gotoxy(10,2);
printf(lcd_putc,"%03u",sodem);// hi?n th? 3 ch? s?
delay_ms(300);
sodem++;
if(sodem == 100)
break;
}
}//end main
Viết chương trình thực hiện:
-

Nhấn SW1: hiển thị chữ “Xin chao cac ban!” trên dòng 01 LCD tại (x,y) = (1,1)

-

Nhấn SW2: hiển thị chữ “19CDDV01” trên dòng 02 tại (x,y) = (10,2)

#include <16F877A.h>



#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#include <lcd.c>
#define SW1

PIN_C3

#define SW2

PIN_C4

void main ()
{
lcd_init();
set_tris_d(0x00);
output_d(0x00);
while(true)
{
if(!input(SW1))
{
lcd_gotoxy(1,1);
printf(lcd_putc,"xin chao cac ban !");
delay_ms(3);
}
if(!input(SW2))
{
lcd_gotoxy(9,2);
printf(lcd_putc,"19CDDV01");
delay_ms(3);
}

}
}
Viết chương trình thực hiện:
Viết chương trình thực hiện: hiển thị chữ “Set value:” trên dòng 1 tại (x,y) = (5,1) và hiển thị biến set_val (khởi
động = 0) trên dòng 2 tại (x,y) = (8,2); và nếu:
Nhấn SW1: nếu set_val < 200: set_val = set_val + 5
Nhấn SW2: Nếu set_val > 0: set_val = set_val -1


Nội dung thay đổi của set_val được cập nhật tức thời trên dịng 2 LCD tại vị trí (x,y) = (8,2).
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#include <lcd.c>
#define SW1

PIN_C3

#define SW2

PIN_C4

void main ()
{
lcd_init();
set_tris_d(0x00);
output_d(0x00);
int set_val;
set_val =0;


while(1)
{
lcd_gotoxy(5,1);
printf(lcd_putc,"Set value:");
delay_ms(3);
//hien thi set_val
lcd_gotoxy(8,2);
printf(lcd_putc,"%03u",set_Val);
delay_ms(3);
if((!input(SW1))&&(set_val<200))
{
delay_ms(200);
Set_val= set_val +5;
lcd_gotoxy(8,2);
printf(lcd_putc,"%03u",set_val);


delay_ms(3);
}
if((!input(SW2))&&(set_val >0))
{
delay_ms(200);//chong doi
Set_val= set_val -1;
lcd_gotoxy(8,2);
printf(lcd_putc,"%03u",set_val);
delay_ms(3);
}
}
}


Viết chương trình đồng hồ đếm giây: tại (1,1) hiển thị “DONG HO DEM GIAY”, tại (4,2) hiển thị “00:00”,
và khi:
Nhấn SW1: bắt đầu đếm “giây : phần trăm giây”
Nhấn SW2: dừng đếm
Nhấn giữ SW2 hơn 5 giây sẽ xóa số đếm về 0

#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#include <lcd.c>
#define SW1

PIN_C3

#define SW2

PIN_C4

void main ()
{
int giay,phantramgiay;
lcd_init();
set_tris_d(0x00);
output_d(0x00);
int16 dem;


while(1)
{
lcd_gotoxy(1,1);

printf(lcd_putc,"DONG HO DEM GIAY");
delay_ms(3);
if(!input(SW1))
{
lcd_gotoxy(4,2);
printf(lcd_putc,"%2u:%2u",giay,phantramgiay);
delay_ms(3);
while(1)
{
phantramgiay = phantramgiay + 1;
delay_ms(3);
if ( phantramgiay==100)
{
giay =giay+1;
Phantramgiay =0;
}
if (giay==100)
{
giay=0;
phantramgiay=0;
}
if(!input(SW2))
break;
lcd_gotoxy(4,2);
printf(lcd_putc,"%2u:%2u",giay,phantramgiay);
delay_ms(3);
}
}



while(!input(SW2))
{
if(!input(SW2))
{
dem=dem+1;
delay_ms(10);
}
if(dem==500)
{
giay=0;
phantramgiay=0;
dem=0;
lcd_gotoxy(4,2);
printf(lcd_putc,"%2u:%2u",giay,phantramgiay);
delay_ms(3);
}

}
}
}
C1
if(!input(SW2))
{
for(int n=0;n<250;n++)
{
If(!input(SW2))
delay_ms(20);
}
giay=0;
phantramgiay=0;



lcd_gotoxy(4,2);
printf(lcd_putc,"%2u:%2u",giay,phantramgiay);
delay_ms(3);

:Viết chương trình thực hiện: hiển thị chữ “DONG HO” trên dòng 1 tại (4,1) và hiển thị “giờ:phút:giây” tại (6,2);
thời gian bắt đầu là “00:00:00” và nếu:
Nhấn SW1: cho phép chỉnh giờ (0-23)
Nhấn SW2: cho phép chỉnh phút (0-59)
#include <16F877A.h>
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=8M)
#include <lcd.c>
#define SW1

PIN_C3

#define SW2

PIN_C4

int gio,phut,giay;
int flag;//co cho phep chay
void main ()
{
int giay,phantramgiay;
lcd_init();
set_tris_d(0x00);
output_d(0x00);

int16 dem;
gio=0;
phut=0;
giay=0;
flag =1;
while(1)
{

lcd_gotoxy(4,1);


printf(lcd_putc,"DONG HO");
delay_ms(3);
while(flag==1)
{
lcd_gotoxy(6,2);
printf(lcd_putc,"%2u:%2u:%2u",gio,phut,giay);
delay_ms(1000);
giay =giay + 1;
if (giay==60)
{
phut =phut+1;
giay=0;
}
if (phut==60)
{
gio=gio+1;
phut=0;
}
if(gio==24)

{
gio=0;
phut=0;
giay=0;
}
if(!input(SW1)||!input(SW2))
{
flag=0;
break;
}
}
while(!input(SW1))


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×