Lp CQ DD08
Mn thi: THIT K H THNG NHNG - Thi gian: 50 pht
(Sinh vin c php tham kho ti liu;
Sinh vin khng c php s dng my vi tnh, laptop)
Bi 1: (3 im) Cho mt d n thit k h thng nhng s dng chip PIC16F877 cho sn phm my bm
ti cy t ng vi m t sau:
H thng c kh nng t bm nc ti cy theo thi gian ci t trc, kh nng cnh bo khi
nc trong h cha cn, kh nng t ng ngt van khi nc trong h cha y, kh nng cnh
bo khi bm qu nhit.
H thng h tr mn hnh LCD1602, bn phm 16 nt, cm bin nhit LM35, cm bin mc nc,
IC thi gian thc DS1302, ci bo hiu.
H thng h tr chc nng chnh gi h thng, chnh gi ti, c cm bin nhit, cm bin mc
nc, iu khin bm v van nc h cha bng FET IRF630N.
Hy m t li h thng theo c t (specification) ca quy trnh thit k h thng nhng.
Tr li:
No.
Specification
Description
(Thng s k thut)
M t
1
Product specification
H thng c kh nng t bm nc ti cy theo thi gian ci t
trc, kh nng cnh bo khi nc trong h cha cn, kh nng t
ng ngt van khi nc trong h cha y, kh nng cnh bo khi
bm qu nhit.
2
Engineering specification
Input: cm bin nhit, cm bin mc nc, tn hiu ng h thi
gian thc
Output: iu khin relay bm, van nc h cha
User interface: LCD, bn phm, ci bo hiu
3
Hardware specification
Hnh v s khi:
LCD
Cm bin nhit
Cm bin mc
nc
iu khin
bm
PIC16F877
IC thi gian
iu khin van
iu khin ci
Software specification
R1
R2
R3
10k
10k
10k
UP
C1
DOWN
1nF
X1
CRYSTAL
C2
1nF
CLEAR
U1
16
15
4
OSC1/CLKIN
OSC2/CLKOUT
MCLR
R11
RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
10k
RESET
17
18
1
2
3
6
7
8
9
10
11
12
13
R4
R5
R6
220
R7
220
R8
220
R9
220
R10
220
220
220
PIC16F84A
/* io.c */
#include <io.h>
void main()
{
int button;
int BCD = 0;
output_B(0);
while(1)
{
button = button_check();
switch (button)
int button_check()
{
int1 button_UP, button_DOWN, button_CLEAR;
button_UP = input(PIN_A0);
button_DOWN = input(PIN_A1);
button_CLEAR = input(PIN_A2);
if (!button_UP)
{
{
case 1:
if (BCD<9)BCD++;
break;
case 2:
if (BCD>0)BCD--;
break;
case 3:
BCD = 0;
break;
default:
break;
}
display(BCD);
delay_ms(20);
}
}
delay_ms(10);
button_UP = input(UP);
if (!button_UP) return 1;
}
else if(!button_DOWN)
{
delay_ms(10);
button_DOWN = input(DOWN);
if (!button_DOWN) return 2;
}
else if(!button_CLEAR)
{
delay_ms(10);
button_CLEAR = input(CLEAR);
if (!button_CLEAR) return 3;
}
else
return 0;
}
void display(int BCD)
{
const int data[10] = {0xc0, 0xf9, 0xa4, 0xb0,
0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
int out;
if (BCD<10) out = data[BCD];
else
out = 0xff;
out_LED7 (out);
}