Báo Cáo Thực Hành Vi Điều Khiển

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 39

BỘ GIÁO DỤC VÀ ĐÀO TẠO

ĐẠI HỌC CÔNG NGHỆ TP.HCM

BÁO CÁO THỰC HÀNH VI


ĐIỀU KHIỂN

Họ và tên :

Lớp : 19DOTD3

MSSV :

www.hutech.edu.vn
BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN

Ấn bản 2018
MỤC LỤC I

MỤC LỤC
MỤC LỤC..................................................................................................................1

BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN...................................................................2

BÀI 2: TIMER VÀ NGẮT................................................................................................4

BÀI 3: ADC VÀ PWM.....................................................................................................5


2 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

BÀI 1: ĐIỀU KHIỂN CÁC THIẾT


BỊ CƠ BẢN

Bài 1.3. Chương trình: include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

{ set_tris_c(0x00);

while(true)

{output_c(0xff);delay_ms(1000);

output_c(0x00);delay_ms(1000);

Bài 1.4.

Chương trình: #include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG,NOBROWNOUT, NOLVP

#use delay(clock=8M)

#define LED_1(x) output_bit(PIN_C0,x)

#define LED_2(x) output_bit(PIN_C1,x)

#define LED_3(x) output_bit(PIN_C2,x)

#define LED_4(x) output_bit(PIN_C3,x)

#define LED_5(x) output_bit(PIN_C4,x)

#define LED_6(x) output_bit(PIN_C5,x)

#define LED_7(x) output_bit(PIN_C6,x)


BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
3

#define LED_8(x) output_bit(PIN_C7,x)

void main()

{set_tris_c(0xff);

while(true)

{LED_1(1);DELAY_ms(300);LED_1(0);

LED_2(1);DELAY_ms(300);LED_2(0);

LED_3(1);DELAY_ms(300);LED_3(0);

LED_4(1);DELAY_ms(300);LED_4(0);

LED_5(1);DELAY_ms(300);LED_5(0);

LED_6(1);DELAY_ms(300);LED_6(0);

LED_7(1);DELAY_ms(300);LED_7(0);

LED_8(1);DELAY_ms(300);LED_8(0);

Bài 1.5. Chương trình:

#include<16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

#define led_1(x) output_bit(PIN_b0,x)

#define led_2(x) output_bit(PIN_b1,x)

#define led_3(x) output_bit(PIN_b2,x)

#define led_4(x) output_bit(PIN_b3,x)

#define led_5(x) output_bit(PIN_b4,x)

#define led_6(x) output_bit(PIN_b5,x)

#define led_7(x) output_bit(PIN_b6,x)

#define led_8(x) output_bit(PIN_b7,x)

void main()
4 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

{for(int8 i=0;i<30;i++)

{while (true)

{led_1(1);delay_ms(300);led_1(0);

led_2(1);delay_ms(300);led_2(0);

led_3(1);delay_ms(300);led_3(0);

led_4(1);delay_ms(300);led_4(0);

led_5(1);delay_ms(300);led_5(0);

led_6(1);delay_ms(300);led_6(0);

led_7(1);delay_ms(300);led_7(0);

led_8(1);delay_ms(300);led_8(0);

Bài 1.6. Chương trình:

#include<16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

#define led_1(x) output_bit(PIN_b0,x)

#define led_2(x) output_bit(PIN_b1,x)

#define led_3(x) output_bit(PIN_b2,x)

#define led_4(x) output_bit(PIN_b3,x)

#define led_5(x) output_bit(PIN_b4,x)

#define led_6(x) output_bit(PIN_b5,x)

#define led_7(x) output_bit(PIN_b6,x)

#define led_8(x) output_bit(PIN_b7,x)

void main()

{for(int8 i=0;i<30;i++)
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
5

{while (true)

{led_1(1);delay_ms(300);led_1(0);

led_2(1);delay_ms(300);led_2(0);

led_3(1);delay_ms(300);led_3(0);

led_4(1);delay_ms(300);led_4(0);

led_5(1);delay_ms(300);led_5(0);

led_6(1);delay_ms(300);led_6(0);

led_7(1);delay_ms(300);led_7(0);

led_8(1);delay_ms(300);led_8(0);

for(int16 j=0;j<257;j++)

output_b(0xff);delay_ms(300);

output_b(0xfc);delay_ms(300);

Bài 1.7. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

// Write your code here


6 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

for(int16 k=0;k<40;k++)

for(int i=0;i<30;i++)

output_c(0x00);delay_ms(300);

output_c(0x01);delay_ms(300);

output_c(0x03);delay_ms(300);

output_c(0x07);delay_ms(300);

output_c(0x0f);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);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
7

for(int16j=0<j<257;j++)

output_c(0xff);delay_ms(300);

output_c(0xfc);delay_ms(300);

Bài 1.8. Sơ đồ mạch:


8 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

Chương trình

#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(0x00);

Delay_ms(400);

Bài 1.9. Sơ đồ mạch:


BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
9

Chương trình:

#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(0x00);

Delay_ms(400);

Bài 1.11. Chương trình: #include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)
10 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

int8 LED7S[11] = {0xff,0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

void main (void)

int8 dem;

dem=0;

output_d(0xF7);

while (dem<11)

{ output_b(LED7S[dem]); dem++; delay_ms(400);

while(1);

Bài 1.12.

Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

while(1)

output_d(0xff);output_b(0x9f);output_low(pin_d3);delay_ms(3);

output_d(0xff);output_b(0x24);output_low(pin_d2);delay_ms(3);

output_d(0xff);output_b(0x0d);output_low(pin_d1);delay_ms(3);

output_d(0xff);output_b(0x99);output_low(pin_d0);delay_ms(3);

}
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
11

Bài 1.13. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void main (void)

while(1)

output_d(0xff);output_b(0x49);output_low(pin_d3);delay_ms(3);

output_d(0xff);output_b(0xe1);output_low(pin_d2);delay_ms(3);

output_d(0xff);output_b(0x03);output_low(pin_d1);delay_ms(3);

output_d(0xff);output_b(0x31);output_low(pin_d0);delay_ms(3);

Bài 1.14. Chương trình:

#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 main (void)

int8 i=0;

int8 a=0;

while(1)
12 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

output_d(0xff);

for(a=0;a<9;a++)

for(i=0;i<9;i++)

{output_c(densangdan[i]);

delay_ms(100);

output_b(LED[a+1]);

output_low(pin_D0);

delay_ms(100);

}}}

Bài 1.15. Chương trình:

#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 main (void)

int8 i=0;

int8 a=0;

while(1)

output_d(0xff);

for(a=0;a<9;a++)
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
13

for(i=0;i<9;i++)

{output_c(densangdan[i]);

delay_ms(100);

output_b(LED[a+1]);

output_low(pin_D0);

delay_ms(100);

}}}

Bài 1.16. Chương trình:

#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
14 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

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);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
15

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;}

Bài 1.18. Chương trình:

#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(TRUE)

if(!input(SW1)) {output_low(D5);

while(1)

{output_toggle(D6); delay_ms(200); if(!input(SW2)) break;}}


16 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

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

while (1)

{output_toggle(D5);delay_ms(200); if(!input(SW1)) break;}}}}

Bài 1.19. Chương trình:

#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()

while(TRUE)

if(!input(SW1))

output_low(D5);

while(1){

output_toggle(D6);

delay_ms(200);

if (!input(SW2)) break;

if(!input(SW2))

output_low(D6);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
17

while(1)

output_toggle(D5);

delay_ms(500);

if (!input(SW1)) break;

Bài 1.21. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

#include <lcd.c>

void main (void)

int8 sodem;

lcd_init();

set_tris_d(0x00);

output_d(0x00);

sodem=0;

lcd_gotoxy(1,1);

printf(lcd_putc,"Counter:");

while(TRUE)

lcd_gotoxy(10,2);

printf(lcd_putc,"%u",sodem);
18 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

delay_ms(300);

sodem++;

if(sodem==100)break;

}//endmain

Bài 1.22. Chương trình:

#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 (void)

{lcd_init();

while (1)

if(!input(SW1))

{lcd_gotoxy(1,1);

printf(lcd_putc,"Xin chao cac ban");if (!input(SW2)) break;}

if(!input(SW2))

{lcd_gotoxy(10,2);

printf (lcd_putc,"HUTECH");if(!input(SW1)) break;}

}}

Bài 1.23. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP


BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
19

#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);

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))
20 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

delay_ms(200);

Set_val=set_val-1;

lcd_gotoxy(8,2);

printf(lcd_putc,"%03u",set_val);

delay_ms(3);

Bài 1.24. Chương trình:

#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);
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
21

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(!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;
22 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

delay_ms(10);

if(dem==500)

giay=0;

dem=0;

lcd_gotoxy(4,2);

printf(lcd_putc,"%2u:%2u",giay,phantramgiay);

delay_ms(3);

Bài 1.25. Chương trình:

#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;

void main ()

int giay,phantramgiay;

lcd_init();
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
23

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;

}
24 BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN

if(gio==24)

gio=0;

phut=0;

giay=0;

if(!input(SW1)||!input(SW2))

flag=0;

break;

while(!input(SW1))

delay_ms(200);

gio=gio+1;

if(gio==24)

gio=0;

lcd_gotoxy(6,2);

printf(lcd_putc,"%2u:%2u:%2u",gio,phut,giay);

delay_ms(1);

while(!input(SW2))

delay_ms(200);

phut=phut+1;

if(phut==60)

phut=0;
BÀI 1: ĐIỀU KHIỂN CÁC THIẾT BỊ CƠ BẢN
25

lcd_gotoxy(6,2);

printf(lcd_putc,"%2u:%2u:%2u",gio,phut,giay);

delay_ms(1);

flag=1;

}
BÀI 2: TIMER VÀ NGẮT

Bài 2.2. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

void delay400ms()

int8 i;

Setup_timer_0(T1_INTERNAL|T1_DIV_BY_2); //1us/xung

For ( i = 0;i < 1000;i++) // c?n 400 000 xung = 10*40 000

Set_timer0(56);

While (get_timer0()>56) ;

void main (void)

While (1)

Output_c(0x01);

Delay400ms();

Output_c(0x00);

Delay400ms();

}
Bài 2.4. Tính thời gian ngắt:

Chương trình: #include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

int16 dem;

int tram,chuc,donvi;

CONST unsigned char


led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

void delay_100ms()

int8 i;

Setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);

For ( i = 0;i < 5;i++)

set_timer1(25536);

while(get_timer1()>25536);

#INT_TIMER0

void qled()

set_timer0(193);

Output_d(0xff);

Output_b(LED7s[tram]); output_low(PIN_D2); delay_ms(3);

Output_d(0xff);

Output_b(LED7s[chuc]); output_low(PIN_D1); delay_ms(3);

Output_d(0xff);

Output_b(LED7s[donvi]); output_low(PIN_D0); delay_ms(3);


}

void main (void)

enable_interrupts(GLOBAL);

enable_interrupts(INT_TIMER0);

setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL);

set_timer0(193);

dem=0;

while(1)

tram=dem/100;

chuc=(dem%100)/10;

donvi=dem%10;

dem=dem+1;

if(dem==1000)

{dem=0;}

delay_100ms();

Bài 2.5. Tính thời gian ngắt:

Chương trình: #include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#use delay(clock=8M)

int16 dem;

int tram,chuc,donvi;
CONST unsigned char
led7s[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

CONST unsigned char


sangdan[9]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,0x00};

void delay_100ms()

int16 i;

setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL);

for( i=0;i<10000;i++)

set_timer0(6);

while(get_timer0()>6);

void sang()

int j;

for( j=0;j<8;j++)

output_c(sangdan[j]);

delay_100ms();

#INT_TIMER1

void qled()

set_timer1(59536);

Output_d(0xff);

Output_b(0x63); output_low(PIN_D3); delay_ms(3);//c

Output_d(0xff);
Output_b(0xe0); output_low(PIN_D2); delay_ms(3); //t

Output_d(0xff);

Output_b(LED7s[chuc]); output_low(PIN_D1); delay_ms(3);//chuc

Output_d(0xff);

Output_b(LED7s[donvi]); output_low(PIN_D0); delay_ms(3);//donvi

void main(void)

enable_interrupts(GLOBAL);

enable_interrupts(INT_TIMER1);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);

set_timer1(59536);

dem=1;

int k;

for( k=0;k<30;k++)

output_d(0xff);

output_b(0x63);output_low(PIN_D3);delay_ms(3);//c

output_d(0xff);

output_b(0xe0);output_low(PIN_D2);delay_ms(3);//t

chuc=(dem%100)/10;

donvi=dem%10;

dem=dem+1;

if(dem==30)

{dem=0;}

sang();

}
BÀI 3: ADC VÀ PWM

Bài 3.2. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#device adc=10

#use delay(clock=8M)

int8 LED7S[10] = {0x03, 0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

int8 LED7S1[10] = {0x02, 0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};

int8 data_led[4] = {0xFF,0xFF,0xFF,0xFF};

int8 control_led[4] = {0xF7,0xFB,0xFD,0xFE};

int8 tram,chuc,dvi;

int16 temp;

float volt;

#INT_TIMER0

void qled()

int8 i;

for (i=0;i<4;i++)

output_d(0xFF);

output_b(data_led[i]);

output_d(control_led[i]);

delay_ms(2);

void main (void)


BÀI 3: ADC VÀ PWM
33

enable_interrupts(GLOBAL);

enable_interrupts(INT_TIMER0);

Setup_timer_0(RTCC_DIV_128|RTCC_INTERNAL);

// Cau hinh ADC

setup_adc(ADC_CLOCK_INTERNAL);

setup_adc_ports(AN0_AN1_VSS_VREF);

set_adc_channel(0);

while (1)

temp = read_adc();

volt = (float)(temp)*2.5/10.23;

temp = (int16)volt;

chuc = temp/10;

dvi = temp%10;

data_led[0] = LED7S[chuc];

data_led[1] = LED7S[dvi];

data_led[2] = 0x39;

data_led[3] = 0x63;

Bài 3.3. Chương trình:

#include <16F877A.h>

#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP

#device adc=10

#use delay(clock=8M)

int8 LED7S[10] = {0x03, 0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

int8 LED7S1[10] = {0x02, 0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};


int8 data_led[4] = {0xFF,0xFF,0xFF,0xFF};

int8 control_led[4] = {0xF7,0xFB,0xFD,0xFE};

int8 tram,chuc,dvi;

int16 temp;

float volt;

#INT_TIMER0

void qled()

int8 i ;

for ( i=0;i<4;i++)

output_d(0xFF);

output_b(data_led[i]);

output_d(control_led[i]);

delay_ms(2);

void main (void)

enable_interrupts(GLOBAL);

enable_interrupts(INT_TIMER0);

Setup_timer_0(RTCC_DIV_128|RTCC_INTERNAL);

// Cau hinh ADC

setup_adc(ADC_CLOCK_INTERNAL);

setup_adc_ports(AN0);

set_adc_channel(0);

while (1)

temp = read_adc();
BÀI 3: ADC VÀ PWM
35

volt = (float)(temp)*5/10.23;

temp = (int16)volt;

chuc = temp/10;

dvi = temp%10;

data_led[0] = LED7S[chuc];

data_led[1] = LED7S[dvi];

data_led[2] = 0x39;

data_led[3] = 0x63;

IF ( TEMP <=20 )

{output_low(PIN_C2);

output_low(PIN_C3);}

else if ( TEMP <30 )

{output_high(PIN_C2);

output_low(PIN_C3);}

IF ( TEMP >30 )

{output_low(PIN_C2);

output_high(PIN_C3);}

if (temp>35 )

{output_toggle(PIN_C2);

delay_ms(100);

output_toggle(PIN_C3);

delay_ms(100);}

Bài 3.5. Chương trình:

#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()

while(TRUE)

if(!input(SW1))

output_low(D5);

while(1){

output_toggle(D6);

delay_ms(200);

if (!input(SW2)) break;

if(!input(SW2))

output_low(D6);

while(1){

output_toggle(D5);

delay_ms(500);

if (!input(SW1)) break;

}
BÀI 3: ADC VÀ PWM
37

Bài 3.6. Chương trình:

You might also like