Nội dung tài liệu bao gồm: Lưu đồ thuật toán và code khối đồng hồ thực .Lưu đồ thuật toán và code khối nhận kí tự nhấn từ bàn phím.Lưu đồ thuật toán và code báo động.Đề tài nằm trong chương trình thực tập công nhân khoa Điện tử Viễn Thông, Đại học Bách Khoa Đà Nẵng.
Trang 1I Nội dung báo cáo
- Lưu đồ thuật toán và code khối đồng hồ thực
- Lưu đồ thuật toán và code khối nhận kí tự nhấn từ bàn phím.
- Lưu đồ thuật toán và code báo động.
Lưu đồ thuật toán khối đồng hồ thực
START
TIMER HOẠT ĐỘNG
S
S
Đ
Đ GIÂY>60
GIỜ ++
PHÚT>60 PHÚT ++
GIÂY ++
Trang 2GIỜ =24, GIỜ = 0
S
KIỂM TRA PHÚT
Trang 3Lưu đồ bàn phím :
S
RST
TÍN HIỆU ĐIỀU KHIỂN
Đ
Đ
KIỂM TRA GIỜSTART
QUÉT PHÍM
Đ
Đ
Đ Đ Đ
HIỂN THỊ
THAY ĐỔI GIỜ HẸN
THAY ĐỔI ĐỘ ẨM
THAY ĐỔI NHIỆT
ĐỘ
LƯU TẠM VÀ XỬ LÝ SỐ
S S S
CHẾ ĐỘ 3
CHẾ ĐỘ 2
CHẾ ĐỘ 1 QUÉT PHÍM CHỌN CHẾ ĐỘ
Trang 4Báo Động:
S S
Đ
S
THOÁT CHẾ ĐỘ
S
Đ LƯU GIÁ TRỊ MỚI
RST
Nhập điều kiện báo động: nhiệt độ, độ ẩm, Vch(V cửa hở)
Đọc dữ liệu
Nhiệt độ = điều kiện Loa, led-red
Hiển thị lên LCD Nhiệt độ=?
Độ ẩm = điều kiện
Loa,led-green
Trang 5Đ
S
Đ
Chương trình thiết lập thời gian thực:
#include <regx52.h>
unsigned char cnt0 = 100,cnt1=5; // bien chay counter
unsigned int gio=0, phut=0, giay=0; // khoi tao gio phut giay unsigned int TIMEs[6]= {0,0,0,0,0,5}; /// gia lap thoi gian unsigned int j =0;
void DongHo_SoSanh_DieuKhien()
Hiển thị lên LCD
Độ ẩm=?
Vch = điều kiện Loa, led-yellow
Hiển thị lên LCD Vch=?
Kết thúc
Trang 6{
if (giay >=60) { phut++; giay = 0 ; }
if (phut >=60) gio++;
if (gio == 24) gio = 0;
if ((gio == TIMEs[0]*10 +TIMEs[1] )&&(phut == TIMEs[2]*10 +
TIMEs[3] )&&(giay == TIMEs[4]*10 + TIMEs[5] ))
{
// gia su luc 00:00:05 P1_4 = 1;
P1_5 = 1;
P1_6 = 1;
P1_7 = 1;
} }
void timer_hoat_dong(void) interrupt 1
{
// Nap lai gia tri cho TH0 va TL0
TH0 = 0xD8;
TL0 = 0xF0; // chay tu 55536 - 65536 : du 10000 xung la 10ms.
cnt0 ;
if(cnt0==0)
{
cnt0 = 100;
giay++;
P1_0 =! P1_0; // dao gia tri cong sau 1s.
P1_1 =! P1_1;
Trang 7P1_2 =! P1_2;
P1_3 =! P1_3;
}
}
void main()
{
P1_0 = 1;
P1_1 = 1;
P1_2 = 1;
P1_3 = 1;
P1_4 = 1;
P1_5 = 1;
P1_6 = 1;
P1_7 = 1;
TMOD = 0x11; // Cau hinh cho timer0 hoat dong o muc 1
TH0 = 0xD8;
TL0 = 0xF0; // timer0_ đồng hồ 55536 - 65536 : 10ms/ chu ky.
ET0 = 1; // Cho phep ngat timer 0
EA = 1; // Cho phep ngat toan cuc
TR0 = 1; // Cho phep timer0 hoat dong
while(1) {}
}
Trang 8Chương trình nhấn bàn phím.
unsigned char code ma_nut[12]={ //Khaibaomang nut nhan
'1','2','3',
'4','5','6',
'7','8','9',
'*','0','#'
};
/*******Ham quet matrix phimnhan 4x3******/
unsigned char check_but(){ //Kiemtra nut nhan
row0=row1=row2=row3=0;
if(!col1 || !col2 || !col3 )return 1;
return 0;
}
void scan_row(unsigned char r){ //Quet hang
row0=row1=row2=row3=1;
if(r==0) row0=0;
else if(r==1)row1=0;
else if(r==2)row2=0;
else if(r==3)row3=0;
}
unsigned char check_col(){ //Kiemtra cot
unsigned char c=0;
if(!col1)c=1;
else if(!col2)c=2;
else if(!col3)c=3;
return c;
}
unsigned char get_key(){ //Ham trave vi tri nut 1-16, =0 la khongnhan
unsigned char row,col;
Trang 9unsigned char last_key;
unsigned char kq_key;
unsigned char nhan_nut=0;
unsigned char call_key;
kq_key='\0';
do{
for(call_key=0;call_key<=10;call_key++)
{
if(nhan_nut==1) {
if(!check_but()) {
kq_key=last_key;
nhan_nut=0;
last_key='\0';
} else {
for(row=0;row<4;row++) //ktphimnao dc nhan {
scan_row(row); //Quet hang col=check_col(); //Lay vi tri cot if(col>0)
{
last_key = ma_nut[((row*3)+col)-1]; //Trave vi tri nut duocnhan
nhan_nut=1;
} }
} }
Trang 10else { if(check_but()){
// delay_ms(5);
// if(check_but()){
for(row=0;row<4;row++){
scan_row(row); //Quet hang
col=check_col(); //Lay vi tri cot if(col>0)
{ last_key=ma_nut[((row*3)+col)-1]; //Trave vi tri nut duocnhan
nhan_nut=1;
} } // }
} } }
}while(check_but());
return kq_key; //Khong co nut naoduocnhanhoac nut da nha
Chương trình cảnh báo:
#include "regx51.h"
#define bat 0
#define tat 1
#define nhietdo P1^0
#define doam P1^1
#define cuaho P1^2 sbit Leddo = P2^7;
sbit Ledxanh = P2^6;
sbit Ledvang = P2^5;
sbit loa = P2^0;
void delay(unsigned int time) {
unsigned int i,j;
Trang 11{for(j=0;j<125;j++);}
}
void main(void)
{
while(1) {
P3_6 = 0;
if(28 >nhietdo> 24)
{Leddo = bat;
delay(1000);
Leddo = bat;
delay(1000);
Leddo= tat;
delay(1000);
loa = bat;
delay(1000);}
else Leddo= tat;
if(78 >doam>82)
{Ledxanh = bat;
delay(1000);
Ledxanh=tat ;
delay(1000);
Ledxanh = bat;
delay(1000);
loa = bat;
delay(1000);}
else Ledxanh=tat;
if( cuaho < 3.6)
{Ledvang = bat;
delay(1000);
Ledvang=tat;
delay(1000);
Ledvang = bat;
delay(1000);
loa = bat;
delay(1000);
Trang 12else Ledvang=tat; }
}