Professional Documents
Culture Documents
LED ĐƠN 1/ Nháy Led Đơn
LED ĐƠN 1/ Nháy Led Đơn
***LED ĐƠN***
1/ Nháy led đơn
void main()
{
while(TRUE)
{
output_high (pin_b0);
delay_ms (500);
output_low (pin_b0);
delay_ms (500);
}
}
int8 i, y;
void main()
{
while(TRUE)
{
y = 0xff; //1111 1111 tat het
for (i = 0; i <= 8; i++) //Sang tu trai qua
{
output_b(y);
delay_ms (500);
y = y << 1;
}
1
Doan Trong Hieu ®
y = 0xff;
for (i = 0; i <= 8; i++) //Sang tu phai qua
{
output_b(y);
delay_ms (500);
y = y >> 1;
}
}
}
void main()
{
while(TRUE)
{
y = 0xfe; //Led dau tien sang (1111 1110)
void main()
{
while(TRUE)
{
for (i = 0; i < 9; i++)
{
output_b (A[i]);
delay_ms (500);
}
}
}
***LED 7 ĐOẠN***
5/ Led 7 đoạn đếm 0 9
int Led [10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
2
Doan Trong Hieu ®
int i;
void main()
{
while(TRUE)
{
for (i = 0; i < 10; i++)
{
output_b (Led[i]);
delay_ms (500);
}
}
}
void main()
{
while(TRUE)
{
for (i = 0; i < 10; i++)
{
output_b (Led[i]);
for (j = 0; j < 10; j++)
{
output_c (Led[j]);
delay_ms (125);
}
}
}
}
3
Doan Trong Hieu ®
{
chuc = dem / 10;
donvi = dem % 10;
output_b (Led[chuc]);
output_low (pin_d0);
delay_ms (5);
output_high (pin_d0);
output_b (Led[donvi]);
output_low (pin_d1);
delay_ms (5);
output_high (pin_d1);
}
void main()
{
while(TRUE)
{
for (i = 0; i < 25; i++) //Hien thi 1 so chiem 10ms*25 = 0.25s
{
hien_thi_2_led();
}
dem ++;
if (dem == 100) dem = 0;
}
}
4
Doan Trong Hieu ®
output_b(Led[donvi]);
output_low(pin_d2); delay_ms(1); output_high(pin_d2);
output_b(Led[chuc]);
output_low(pin_d1); delay_ms(1); output_high(pin_d1);
output_b(Led[tram]);
output_low(pin_d0); delay_ms(1); output_high(pin_d0);
}
void main()
{
while(TRUE)
{
for (i=0;i<=25;i++) //vong lap nay chiem 3ms*50=0.075s
{
hien_thi_3_led();
}
dem++;
if (dem==1000) dem=0;
}
}
5
Doan Trong Hieu ®
10/ Led 7 đoạn đếm số lẻ
void main()
{
dem = 1;
while(TRUE)
{
if (dem == 101) dem = 1;
if (dem%2 != 0)
{
for (i = 0; i < 25; i++) //Hien thi 1 so chiem 10ms*25 = 0.25s
{
hien_thi_2_led();
}
}
dem = dem + 2;
}
}
void main()
{
while(TRUE)
{
output_b (Led[dem]);
if (Nhan == 0)
{
dem++;
if (dem == 10) dem = 0;
while (Nhan == 0) //Con nhan giu thi chua tang bien dem, hold
output_b (Led[dem]);
}
}
}
6
Doan Trong Hieu ®
output_b (Led[chuc]);
output_low (pin_d0);
delay_ms (5);
output_high (pin_d0);
output_b (Led[donvi]);
output_low (pin_d1);
delay_ms (5);
output_high (pin_d1);
}
void main()
{
while(TRUE)
{
if (dem == 100) dem = 0;
hien_thi_2_led();
if (Nhan == 0)
{
while (Nhan == 0) hien_thi_2_led();
dem++;
}
}
}
7
Doan Trong Hieu ®
***IC 74LS138***
13/ 74LS138 điều khiển 8 Led 7
int8 i;
int Led [10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main()
{
while(TRUE)
{
for (i=0; i<8; i++)
{
output_d (i);
output_b (Led[i]);
delay_ms (1);
}
}
}
int16 i;
void main()
{
while(true)
{
for (i=0; i<16; i++)
{
output_d (i); //Kich hoat tung Led
8
Doan Trong Hieu ®
output_b (Led[i]); //Xuat ma Led tuong ung voi tung Led
delay_ms (1);
}
}
}
void main()
{
set_tris_c(0x00); //dat trang thai cho port C, 0: Output
while(TRUE)
{
for (i = 0; i < 16; i++)
{
output_c (y);
delay_ms(500);
y++;
}
}
}
9
Doan Trong Hieu ®
***IC 74HC595***
16/ 74595 điều khiển 8 Led đơn
int16 Ma[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
int t = 250, i;
//595 8 bit------------------------------------------------------------------------------------------
#define SH_CP pin_b0 //XUNG
#define DS pin_b1 //DU LIEU
#define ST_CP pin_b2 //CHOT
void HC595_out_8bit (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
10
Doan Trong Hieu ®
while(TRUE)
{
for (i=0; i<15; i++)
{
HC595_out_8bit(Ma[i]);
delay_ms (t);
}
}
}
int16 y, i;
int t = 250;
//-----------------------------------------------------------------------------------------------------------
--------
void HC595_out_16bit (int16 data) //Moi lan goi ham nay thi se xuat 16 bit du lieu ra 2 con 595
{
int16 i;
#BIT bit_con = data.15 //Bit DS, .15: Truy xuat dia chi bit thu 15 (MSB) trong du lieu dang xet
11
Doan Trong Hieu ®
}
//-----------------------------------------------------------------------------------------------------------
--------
void main()
{
set_tris_d (0x00); //port D xuat du lieu
while(TRUE)
{
y = 0x00; //Ban dau tat het led, xuat 1 thi led sang
for (i=0; i<=16; i++)
{
HC595_out_16bit (y);
delay_ms (t);
y = (y<<1)|(0x01);
}
}
}
//595 8 bit------------------------------------------------------------------------------------------
#define SH_CP pin_c0 //XUNG
#define DS pin_c1 //DU LIEU
#define ST_CP pin_c2 //CHOT
void HC595_out_8bit_active_led (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int8 i;
12
Doan Trong Hieu ®
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
void HC595_out_8bit_led_code (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
void main()
{
while(TRUE)
{
y = 0x01; //Bien de kich hoat tung Led
for (i=0;i<8;i++)
{
HC595_out_8bit_active_led (y); //Kich hoat lan luot tung con Led
HC595_out_8bit_led_code (Led[i]); //Xuat ma Led ra con Led da kich hoat
delay_ms(1);
y = y << 1; //Chuyen sang kich hoat con led tiep theo
}
}
}
13
Doan Trong Hieu ®
//595 8 bit------------------------------------------------------------------------------------------
#define SH_CP pin_b0 //XUNG
#define DS pin_b1 //DU LIEU
#define ST_CP pin_b2 //CHOT
void HC595_out_8bit (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
void main()
{
14
Doan Trong Hieu ®
while(TRUE)
{
for (i = 0; i < 10; i++)
{
HC595_out_8bit (Led[i]);
delay_ms (250);
}
}
}
//595 8 bit------------------------------------------------------------------------------------------
#define SH_CP pin_b0 //XUNG
#define DS pin_b1 //DU LIEU
#define ST_CP pin_b2 //CHOT
void HC595_out_8bit (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
15
Doan Trong Hieu ®
data = data << 1; //dich data.6, bit thu 6 duoc day qua bit thu 7 de tiep tuc kiem tra
}
output_low (ST_CP); output_high (ST_CP); //tao xung chot de chuyen du lieu ra output
}
//-------------------------------------------------------------------------------------------------------
void Hien_thi_2_led () //chuong trinh nay chiem 5ms+5ms=10ms
{
chuc = dem/10;
donvi=dem%10;
HC595_out_8bit (Led[chuc]);
output_low (pin_d0);
delay_ms (5);
output_high (pin_d0);
HC595_out_8bit (Led[donvi]);
output_low (pin_d1);
delay_ms (5);
output_high (pin_d1);
}
//----------------------------------------------------------------------------
void main()
{
while(TRUE)
{
for(i=0;i<=25;i++) //vong lap for chiem 10ms*25=0.25s
{
Hien_thi_2_led();
}
dem++;
if (dem==100) dem=0;
}
}
16
Doan Trong Hieu ®
//595 8 bit------------------------------------------------------------------------------------------
#define SH_CP pin_b0 //XUNG
#define DS pin_b1 //DU LIEU
#define ST_CP pin_b2 //CHOT
void HC595_out_8bit (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
17
Doan Trong Hieu ®
}
//-------------------------------------------------------------------------------------------------------
void main()
{
while(TRUE)
{
HC595_out_8bit (Led[dem]);
if (Nhan==0)
{
dem++;
if (dem==10) dem=0;
while (Nhan==0)
{
HC595_out_8bit (Led[dem]);
}
}
}
}
18
Doan Trong Hieu ®
{
Push++;
if (Push==2) Push=0;
}
//_____________________________________________________________________________
void active_ngat_ngoai ()
{
enable_interrupts (int_ext); //Kich hoat ngat ngoai
enable_interrupts (global); //Kich hoat ngat toan cuc
ext_int_edge (H_to_L); //Chon ngat canh xuong
}
//595 8 bit____________________________________________________________________
#define SH_CP pin_C0 //XUNG
#define DS pin_C1 //DU LIEU
#define ST_CP pin_C2 //CHOT
void HC595_out_8bit (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
19
Doan Trong Hieu ®
delay_ms(500);
if(Push==0) break;
}
}
//_____________________________________________________________________________
void main()
{
set_tris_b(0x01); set_tris_c(0x00);
active_ngat_ngoai ();
while(TRUE)
{
if (Push==0) Mode1();
if (Push==1) Mode2();
}
}
***LED MATRIX***
Học thêm tại: http://iot47.com/category/ma-tran-led/
int Col [] = {0xff, 0x03, 0xed, 0xee, 0xee, 0xed, 0x03, 0xff}; //'A'
//595 Row____________________________________________________________________
20
Doan Trong Hieu ®
#define DS pin_b1 //DU LIEU
void HC595_out_row (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
output_bit (DS, bit_con); //xuat ra chan DS gia tri MSB cua byte xuat
output_low (SH_CP); output_high (SH_CP); //tao xung canh len de dich du lieu, dua vao Q0
data = data << 1; //dich data.6, bit thu 6 duoc day qua bit thu 7 de tiep tuc kiem tra
output_low (ST_CP); output_high (ST_CP); //tao xung chot de chuyen du lieu ra output
//____________________________________________________________________________
//595 Col____________________________________________________________________
void HC595_out_col (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
int8 i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
output_bit (DS1, bit_con); //xuat ra chan DS gia tri MSB cua byte xuat
output_low (SH_CP1); output_high (SH_CP1); //tao xung canh len de dich du lieu, dua vao Q0
data = data << 1; //dich data.6, bit thu 6 duoc day qua bit thu 7 de tiep tuc kiem tra
output_low (ST_CP1); output_high (ST_CP1); //tao xung chot de chuyen du lieu ra output
//____________________________________________________________________________
void main()
21
Doan Trong Hieu ®
{
row = 0x01;
while(TRUE)
HC595_out_row (row);
HC595_out_col (Col[i]);
delay_ms (1);
row = row << 1; //Sau khi quet xong hang thu n thi quet hang thu n+1
22
Doan Trong Hieu ®
24/ Led matrix – 2
int16 i;
int16 Col [] = {0xff, 0x03, 0xed, 0xee, 0xee, 0xed, 0x03, 0xff
//595 Row____________________________________________________________________
void HC595_out_row (int16 data) //Moi lan goi ham nay thi se xuat 16 bit du lieu ra 2 con 595
int16 i;
#BIT bit_con = data.15 //Bit DS, .15: Truy xuat dia chi bit thu 15 (MSB) trong du lieu dang xet
output_bit (DS, bit_con); //xuat ra chan DS gia tri MSB cua byte xuat
output_low (SH_CP); output_high (SH_CP); //tao xung canh len de dich du lieu, dua vao Q0
data = data << 1; //dich data.14, bit thu 14 duoc day qua bit thu 7 de tiep tuc kiem tra
23
Doan Trong Hieu ®
}
output_low (ST_CP); output_high (ST_CP); //tao xung chot de chuyen du lieu ra output
//____________________________________________________________________________
//595 Col____________________________________________________________________
void HC595_out_col (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
int i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
output_bit (DS1, bit_con); //xuat ra chan DS gia tri MSB cua byte xuat
output_low (SH_CP1); output_high (SH_CP1); //tao xung canh len de dich du lieu, dua vao Q0
data = data << 1; //dich data.6, bit thu 6 duoc day qua bit thu 7 de tiep tuc kiem tra
output_low (ST_CP1); output_high (ST_CP1); //tao xung chot de chuyen du lieu ra output
//____________________________________________________________________________
void main()
while(TRUE)
row = 0x0001;
HC595_out_row (row);
HC595_out_col (Col[i]);
delay_ms (1);
row = row << 1; //Sau khi quet xong hang thu n thi quet hang thu n+1
24
Doan Trong Hieu ®
25/ Led matrix – 4
int32 i;
int32 row;
char Col [] = {
0xFF, 0x81, 0xEF, 0xEF, 0xEF, 0xEF, 0x81, 0xFF //H
0xFF, 0xBD, 0xBD, 0x81, 0x81, 0xBD, 0xBD, 0xFF //I
0xFF, 0x81, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xFF //E
0xFF, 0xC1, 0xBF, 0xBF, 0xBF, 0xBF, 0xC1, 0xFF //U
};
//595 Row____________________________________________________________________
#define SH_CP pin_b0 //XUNG
#define DS pin_b1 //DU LIEU
#define ST_CP pin_b2 //CHOT
void HC595_out_row (int32 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int32 i;
#BIT bit_con = data.31 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
25
Doan Trong Hieu ®
//____________________________________________________________________________
//595 Col____________________________________________________________________
#define SH_CP1 pin_b3 //XUNG
#define DS1 pin_b4 //DU LIEU
#define ST_CP1 pin_b5 //CHOT
void HC595_out_col (int8 data) //Moi lan goi ham nay thi se xuat 8 bit du lieu ra 1 con 595
{
int i;
#BIT bit_con = data.7 //Bit DS, .7: Truy xuat dia chi bit thu 7 (MSB) trong du lieu dang xet
void main()
{
while(TRUE)
{
row = 0x00000001;
for (i = 0; i < 32; i++)
{
HC595_out_row (row);
HC595_out_col (Col[i]);
delay_ms (1);
row = row << 1; //Sau khi quet xong hang thu n thi quet hang thu n+1
}
}
}
26
Doan Trong Hieu ®
26/ 3 Led matrix – Chạy chữ
while(TRUE)
{
for (rol = 0 ; rol < 85 ; rol++)
{//font. 23x8[8x8 matrix] = 112
for(delay = 0 ; delay < 5 ; delay++) //Toc do chay chu
{
DS(1);
SH_CP(0); SH_CP(1); ST_CP(0); ST_CP(1);
for (col = 0 ; col < 24 ; col++) //24 Cot
{
output_B( font[col + rol]);
delay_ms(1);
DS(0);
SH_CP(0); SH_CP(1); ST_CP(0); ST_CP(1);
}
}
}
}
}
27
Doan Trong Hieu ®
***TIMER***
Tần số thạch anh/xung: f OSC =20 MHz ;T OSC =50ms
f OSC
f PIC = =5 MHz (Bộ chia cứng: /4)
4
Chọn bộ chia mềm là x 1
f 1
f Timer = PIC →T Timer = (Chu kỳ Timer: Khoảng thời gian để Timer tăng lên 1 đơn vị)
x1 f Timer
Cho tổng thời gian tràn mong muốn: x 2. Có: x 2=T Timer . x 3 Tìm ra x 3 (Sau x 3 chu kỳ thì Timer tràn)
(Muốn chia xung trong 1 chu kỳ thành mấy phần? Mỗi phần rộng x 2)
Đặt giá trị ban đầu cho Timer: x 4 =2Số bitTimer −x3
PIC18F4550
Timer 0, 1, 3: 16 bit Timer 2: 8 bit
16 bit = 2 =65536
16
8 bit = 28=256
D: Phần trăm thời gian xung ở mức cao trong 1 chu kỳ
Khi Timer tràn thì chương trình kiếm tới #int_timern
28
Doan Trong Hieu ®
int16 Value = 49911; //Dat gia tri ban dau cho Timer
void main()
{
set_tris_c (0x00);
setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_8); //Su dung Timer noi, bo chia 8
set_timer0 (Value); //Dat gia tri thoi gian ban dau cho Timer
enable_interrupts (int_timer0); //Cho phep chuong trinh ngat Timer
enable_interrupts (global); //Cho phep ngat toan cuc
while(TRUE) {}
}
29
Doan Trong Hieu ®
if (Count>= 1 && Count<=4) output_high (pin_c0);
}
void main()
{
set_tris_c (0x00);
setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_8); //Su dung Timer noi, bo chia 8
set_timer0 (Value); //Dat gia tri thoi gian ban dau cho Timer
enable_interrupts (int_timer0); //Cho phep chuong trinh ngat Timer
enable_interrupts (global); //Cho phep ngat toan cuc
void main()
{
set_tris_c (0x00);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Su dung Timer noi, bo chia 8
set_timer1 (Value); //Dat gia tri thoi gian ban dau cho Timer
enable_interrupts (int_timer1); //Cho phep chuong trinh ngat Timer
30
Doan Trong Hieu ®
enable_interrupts (global); //Cho phep ngat toan cuc
void main()
{
set_tris_c (0x00);
setup_timer_2 (T2_DIV_BY_16, Value, 16); //Su dung Timer 2, bo chia 16, bo chia sau 16
set_timer2 (Value); //Dat gia tri thoi gian ban dau cho Timer
enable_interrupts (int_timer2); //Cho phep chuong trinh ngat Timer
enable_interrupts (global); //Cho phep ngat toan cuc
31
Doan Trong Hieu ®
#define LCD_RW pin_b1
#define LCD_E pin_b2
#define output_LCD output_d
void LCD_DATA (unsigned char x) //RS = 1 //Gui du lieu ra LCD de hien thi
{
output_high (LCD_RS); output_LCD (x); //Output high: Lua chon thanh ghi hien thi GIA TRI
output_high (LCD_E); delay_us (20);
output_low (LCD_E); delay_us (20);
}
#include <LCD.c>
void main ()
{
set_tris_e (0x00); set_tris_d (0x00); LCD_SETUP (); //Khoi tao cac port & LCD
32
Doan Trong Hieu ®
LCD_COMMAND (ADDR_LINE1); delay_us (10); //Khoi tao dia chi hang 1 (Lua chon vi tri hien thi)
LCD_DATA ("DH Ton Duc Thang");
#include <LCD.c>
unsigned char gio, phut, giay;
//Hien thi thoi gian___________________________________________________________
void display_time ()
{
LCD_COMMAND (0xc7); delay_us (10); //Chon vi tri de bat dau hien thi thoi gian
LCD_DATA ((gio/10) + 0x30); LCD_DATA ((gio%10) + 0x30); //LCD chi hien thi so BCD nen +0x30
LCD_DATA (":");
LCD_DATA ((phut/10) + 0x30); LCD_DATA ((phut%10) + 0x30); //Hien thi Phut
LCD_DATA (":");
LCD_DATA ((giay/10) + 0x30); LCD_DATA ((giay%10) + 0x30); //Hien thi Giay
}
void lcd_display_time ()
{
LCD_COMMAND (ADDR_LINE2); delay_us (10); //Khoi tao dia chi hang 2
LCD_DATA ("Clock: ");
33
Doan Trong Hieu ®
{
set_tris_d (0x00); LCD_SETUP (); //Khoi tao cac port & LCD
LCD_COMMAND (ADDR_LINE1); delay_us (10); //Khoi tao dia chi hang 1 (Lua chon vi tri hien thi)
LCD_DATA ("Doan Trong Hieu");
lcd_display_time ();
while (TRUE) {}
}
33/ Đo nhiệt độ
Tính toán độ phân giải
−¿
V ref
+¿− =4,887mV ¿
Độ phân giải (Step Size): SS=V 10
2 −1
¿ (2 : ADC 10 bit)
10
ref
10 mV
Tỷ lệ chênh lệch: =2,046 (10 mV =1o C : Độ phân giải của cảm biến LM35)
4,887 mV
#include <LCD.c>
//#device ADC = 10
int8 i;
int16 k_qua;
void doc_nhiet_do ()
{
k_qua = 0;
for (i=0; i<100; i++) //Do 100 lan de lay trung binh
{
k_qua = k_qua + read_adc (); //
delay_ms (1);
}
k_qua = k_qua/100/2.046; //Chia kq cho 100 lan, chia tiep cho do chenh lech phan giai
}
void main()
{
34
Doan Trong Hieu ®
LCD_SETUP (); //Khoi tao LCD
setup_adc (ADC_CLOCK_INTERNAL);
setup_adc_ports (AN0);
set_adc_channel (0);
while(TRUE)
{
doc_nhiet_do ();
LCD_COMMAND (ADDR_LINE1);
LCD_DATA ("Do nhiet do LM35: ");
LCD_COMMAND (ADDR_LINE2);
LCD_DATA ("Ket qua: ");
LCD_DATA (k_qua/10 + 0x30); LCD_DATA (k_qua%10 + 0x30);
}
}
2- Đo nhiệt độ hiển thị trên LCD; Nhấp nháy Led với điều khiển
Yêu cầu: Đo nhiệt độ, nếu nhiệt độ nằm trong giới hạn giữa High & Low (h & l) thì Led chớp tắt; <
Low thì Led sáng; > High thì Led tắt; Thay đổi giới hạn High & Low bằng nút nhấn.
#include <LCD.c>
//_____________________________________________________________________________
#define Mode pin_c0
#define Tang pin_c1
#define Giam pin_c2
int8 i, h, l, modee;
int16 kq;
void Hien_thi ()
{
LCD_COMMAND (ADDR_LINE1); //Truy cap vi tri thu 1, hang 1
LCD_DATA ("T=");
LCD_DATA (kq/10 + 0x30); LCD_DATA (kq%10 + 0x30);
LCD_DATA (0xdf); //Do
LCD_DATA ("C");
35
Doan Trong Hieu ®
LCD_COMMAND (0x8c);
LCD_DATA ("H=");
LCD_DATA (h/10 + 0x30); LCD_DATA (h%10 + 0x30);
LCD_COMMAND (0x87);
LCD_DATA ("L=");
LCD_DATA (l/10 + 0x30); LCD_DATA (l%10 + 0x30);
}
//Chong doi___________________________________________________________________
void chong_doi_mode ()
{
if (input(Mode) == 0) //Test xem co nhan phim khong
{
delay_ms (20); //Khoang thoi gian bi doi
if (input(Mode) == 0) //Test xem co con nhan phim hay khong
{ //Xu ly chuc nang phim
modee++;
if (modee==3) modee = 0;
}
while (input(Mode) == 0); //Cho nha phim
}
}
void chong_doi_tang ()
{
if (input(Tang) == 0)
{
delay_ms (20);
if (input(Tang) == 0)
{
switch (modee)
{
case 1: l++;
if (l<25) l=25;
else if (l>29) l=29;
Hien_thi (); break;
case 2: h++;
if (h<26) h=26;
else if (h>30) h=30;
Hien_thi (); break;
}
}
while (input(Tang) == 0);
}
}
void chong_doi_giam ()
{
if (input(Giam) == 0)
{
delay_ms (20);
if (input(Giam) == 0)
{
switch (modee)
{
case 1: l--;
if (l<25) l=25;
else if (l>29) l=29;
Hien_thi (); break;
case 2: h--;
if (h<26) h=26;
else if (h>30) h=30;
Hien_thi (); break;
36
Doan Trong Hieu ®
}
}
while (input(Giam) == 0);
}
}
//____________________________________________________________________________
//Doc nhiet do________________________________________________________________
void read_temp ()
{
kq = 0;
for (i=0; i<100; i++) //Do 100 lan de lay trung binh
{
kq = kq + read_adc (); //
delay_ms (1);
}
kq = kq/100/2.046; //Chia kq cho 100 lan, chia tiep cho do chenh lech phan giai
}
//____________________________________________________________________________
void main()
{
LCD_SETUP (); //Khoi tao LCD
h=30; l=25;
setup_adc (ADC_CLOCK_INTERNAL); //Khoi tao ADC, Lay mau tu dong dung xung noi
setup_adc_ports (an0); //Khai bao cong ADC, dung kenh 0
set_adc_channel (0);
while(TRUE)
{
read_temp ();
chong_doi_mode (); chong_doi_tang (); chong_doi_giam ();
if (kq<l) output_bit (pin_c5, 1); //Ket qua < Min thi den sang
else if (kq<h) //Ket qua nam trong pham vi cho phep
{ //Den chop tat
output_bit (pin_c5, 1); delay_ms (100); output_bit (pin_c5, 0);
}
else output_bit (pin_c5, 0); //Ket qua > Max thi den tat
Hien_thi ();
LCD_COMMAND (ADDR_LINE2);
LCD_DATA (" DO NHIET DO ");
}
}
37
Doan Trong Hieu ®
3- Đo nhiệt độ hiển thị trên Led 7 đoạn – Quét
#device adc=10
int16 k_qua, k_qua_tb;
int8 i, ma_don_vi, ma_chuc, ma_tram;
int Led [10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void giai_ma ()
{
ma_tram = Led [k_qua_tb/100]; if (ma_tram==0xc0) ma_tram = 0xff; //Xoa so 0 vo nghia
ma_chuc = Led [(k_qua_tb/10) % 10];
ma_don_vi = Led [k_qua_tb%10];
}
void hien_thi ()
{
output_b (ma_don_vi);
output_low (pin_d0); delay_ms (1); output_high (pin_d0);
output_b (ma_chuc);
output_low (pin_d1); delay_ms (1); output_high (pin_d1);
output_b (ma_tram);
output_low (pin_d2); delay_ms (1); output_high (pin_d2);
}
void doc_nhiet_do ()
{
k_qua = 0; //Ban dau cho ket qua = 0
for (i=0; i<100; i++)
{
k_qua = k_qua + read_adc ();
hien_thi (); //Cho led sang lien tuc
}
k_qua_tb = k_qua/100/2.046;
giai_ma ();
}
void main()
{
set_tris_b (0x00); set_tris_d (0x00); set_tris_a (0x01);
setup_adc (ADC_CLOCK_INTERNAL);
setup_adc_ports (AN0); //Khai bao cong ADC, dung kenh 0
set_adc_channel (0);
while(TRUE)
38
Doan Trong Hieu ®
{
doc_nhiet_do ();
}
}
39