You are on page 1of 26

Bo co Project 2

Tn ti: iu khin tc ng c t xa bng sng RF , hn


gi bt tt ng c bng bn phm in dung, hin th thi gian
thc, tc ng c ln LCD.

Cc thnh vin (#1 l nhm trng):

#1: Nguyn ng An

MSSV: 20111090

K tn: ____________________

#2: inh Trng Chuyn

MSSV : 20112559

K tn: ___________________

#3: L c L

MSSV: 20111752

K tn: ___________________

#4: T Quan Chnh

MSSV : 20111245

K tn: ____________________

#5: Nguyn Vn Chung

MSSV :20111258

K tn: ____________________

nh gi bo co

Ni dung/ tiu ch

im

H s

Tm tt ti

0 1 2 3 4 5 6 7 8 9 10

X2

Gii thiu v ti v s khi ca h thng

0 1 2 3 4 5 6 7 8 9 10

X1

Cc tiu ch cn phi t c

0 1 2 3 4 5 6 7 8 9 10

X2

Ni dung cc phn trnh by v cc khi ca h


thng

0 1 2 3 4 5 6 7 8 9 10

X4

Kt lun

0 1 2 3 4 5 6 7 8 9 10

X1

Ti liu tham kho

0 1 2 3 4 5 6 7 8 9 10

X1

Ph lc A: ng gp ca tng c nhn

0 1 2 3 4 5 6 7 8 9 10

X2

Ph lc B: M ngun

0 1 2 3 4 5 6 7 8 9 10

X1

Vn phong khoa hc

0 1 2 3 4 5 6 7 8 9 10

X6

im

Tng

Nhn xt:

...
2

Mc Lc
Li m u.................................................................................................................... 4
Tm tt ti.......................................................................................................... 5

I.

Gii thiu ti v s khi.................................................................................... 5

1.
a.

Gii thiu ti:................................................................................................. 5

b.

S khi :....................................................................................................... 5

2.

Cc tiu ch ca sn phm......................................................................................... 6

3.

Ni dung.............................................................................................................. 7
a.

iu khin ng c s dng sng RF........................................................................7

b.

iu chnh chiu quay ca ng c hin th ln LCD....................................................8

c.

iu chnh tc ca ng c hin ln LCD..............................................................9

d.

S dng bn phm in dung hn gi bt tt ng c...............................................11

II.

kt lun............................................................................................................. 13

III.

Ti liu tham kho.............................................................................................. 14

Phc Lc A: M Ngun................................................................................................... 14
Ph Lc B: Cc bn v thit k, bn v mch in ca sn phm...................................................22

Li m u
iu khin ng c c ng dng vo nhiu lnh vc trong cuc sng
(trong cng ngh ch to robot).mach iu khin ng c c ngha rt quan
trng trong vic iu khin ng c theo mc ch ca ngi s dng.c im ca
mch iu khin l ng c c th quay thun hoc quay nghch ,tc ca ng
c c th tng hoc gim ty theo thch .mch s dng chp vi iu khin ca
hng TI . c bit hn l iu khin ng c t xa. Vic ny c th to ra nhng
robot c th gip con ngi lm vic iu kin mi trng khc nghit, c
hi

n II chng em lm ln ny gip chng em rn lyn thm cc k nng lp trnh


cho kit launchpad MSP430, k nng lm mch in trn altium. Tm hiu v bit r
hn v module thu pht sng RF, bn phm in dung. ng c encoder . vn dng
nhng kin thc hc trn ging ng vo thc t v ng thi rn luyn c
k nng lm vic nhm, lm vic c lp. Nhng do thi gian c hn, kh nng
cn hn ch, ng thi phi tip xc vi nhng ci mi l nn bn ca chng
em cn mc nhiu sai st , khuyt im. Qua y chng em cng xin chn thnh
cm n thy gio HN HUY DNG gip rt nhit tnh chng em hon
thnh c ti ny.

I.

Tm tt ti.

Gii thiu ti v s khi.

a. Gii thiu ti:

ti Project 2 ca chng em l iu khin tc ng c t xa bng sng


RF , hn gi bt tt ng c bng bn phm in dung, hin th thi gian thc,
tc ng c ln LCD. Trong ti ny s c phn ra cc phn nh, cc
phn nh ny s c chia ra v phn tch rt c th phn ni dung ti .

ti thc hin cc yu cu chc nng:


-

iu khin tc , chiu ng c t xa.


Hn tt bt ng c bng bn phm in dung.
Hin th chiu, tc ng c, thi gian thc, thi gian bt tt ln LCD.

Trong ti vic iu khin ng c s c thc hin bng IC L298. Ic ny


c nhim v s thc hin i chiu quay v lm thay i tc ng c. IC
L298 sau c kt ni vi chip MSP430F2272 . vic iu khin tc ,
chiu v bt tt ng c s c thc hin bi module thu pht sng RF 4 nt
iu khin. Hin th thi gian thc, tc v chiu ng c s c hin th
ln LCD kch thc 16*2 . Vic hn gi bt tt ng c bng bn phm in
dung s c thc hin ging nh 1 bn phm 4*4 thng thng.

b. S khi :

khi pht
RF

Khi thu
RF

Khi hin th
(LCD)

Khi
keypad
(cm ng

Khi x l
(MSP430G2272)

Khi thi
gian thc

Motor driver

(DS1302)
3.3 V
Khi ngun
12V

Cc tiu ch ca sn phm.
(tiu ch sn phm hay cn gi l yu cu phi chc nng)

Tiu ch quan trng nht l mch phi chy c, thc hin c tt c


cc chc nng ra.
Mch lm vic n nh, khng b li sau 1 thi gian hot ng.
Tc ng c c o phi chnh xc sai s khon 5%-10%.
Mch in c v v hn p.
Cc thng s c lu li khi mch b mt in.

Ni dung.
ti c chia ra nhiu phn nh:
a. iu khin ng c s dng sng RF

Trong ti thc hin vic iu khin ng c t xa chng em s dng module


thu pht sng RF tn s 315 mHZ.
Thng s ca module thu pht sng RF
Module pht RF315:
- S dng in p mt chiu 12v
- Dng hot ng 4 mA
- nhy -105dB
- Cng sut tiu th : 25mW
- Tc truyn tt nht: 4.8kbps
- tn s lm vic : 315Mhz
- Khong cch truyn ti : t 50-100m (ty vo iu kin mi trng)
- S dng ic PT2262 m ha
Module thu sng RF315:
- S dng in p 1 chiu 5v
- Dng hot ng: 4mA
- Tn s hot ng: 315mhz
- Tc nhn tt nht: 9.6kbps
S dng ic pt2272 gii m.
Cch s dung :
Module pht c 4 nt bm. A,B,C,D
- Nt A: bt tt ng c.
- Nt B : thay i chiu ng c.
- Nt C: tng tc ng c.
- Nt D : gim tc ng c.

Hnh 1.1 : Module thu pht sng RF.

b. iu chnh chiu quay ca ng c hin th ln LCD


c th o c chiu quay ca ng c em s s dng mch cu H
,sau y em s trnh by v nguyn tc hot ng ca cu H v t nguyn tc
s hnh thnh nn mch iu chnh chiu quay.

Hnh 1.2: Mch cu.

y i tng l morto
Thnh phn chnh to nn mch cu H l 4 kha L1,L2,R1 v R2. iu
kin bnh thng th 4 kha ny m v cu H khng hot ng.Gi s bng
cch no m kha L1 v R2 c ng li (L2 v R1 vn m) ,khi s
c mt dng in chy t V qua kha L1 n u A v xuyn qua morto n
8

u B ca n trc khi qua kha R2 v v GND,vi trng hp ny ng


c s quay theo chiu thun(hnh di).

hnh 1.3 : Mch cu

Ngc li ,nu L2 v R1 c ng li trong khi ta m 2 kha L1 v


R2 th,dng in s i theo chiu t V,qua R1 ,motor,L2 v v GND.Lc
ng c s quay theo chiu ngc li.Vy l chng ta c th o c chiu
quay ca ng c bng cch dng mch cu H i chiu dng in chy
qua ng c.

c. iu chnh tc ca ng c hin ln LCD


-

iu khin tc ca ng c s dng xung PWM , chia tc ca ng


c thnh 20 mc t 0 20.
Cch to mt xung PWM nh sau :
+ To mt tn s chun t 0,1 ms n 10ms dng cc b timer ca vi iu
khin.
+ Thay i rng xung bng cch thay i t s xung mc 1 v mc 0 ca
tn s chun kt qu cho xung nh yu cu.

Hnh 1.4: th dng xung iu ch PWM

Vic iu chnh chiu quay v tc ca ng c, chng em s dng IC L298 .


Chc nng chnh ca L298 l dng khuch i cng sut ca ng c.

Hnh 1.5 : IC L298

10

Hnh 1.6 : IC L298 trn thc t.

d. S dng bn phm in dung hn gi bt tt ng c


C nhiu cch xc nh s thay i, phng php kinh in nht c a
ra t nm 1976 l np tch in cho t, sau cho t x dn in tch qua mt in
tr v o thi gian x ca t, so snh thi gian gia cc ln x xc nhn l mt
nt bm.
MSP430 xc nh bng cch m s xung do b dao ng c to bi phn
cng bn trong VK v t in ni vo chn VK. Khi t in chn ni vo
VK thay i th s xung do b dao ng to ra cng thay i v VK s o s
thay i .
C 2 cch o in dung MSP430:
+ Cch o RO (Relaxation Oscillator):

Hnh 1.7 Cch o RO

11

y l s bn trong chn dao ng ca MSP430 h tr cm ng in dung.


Trong mt khong thi gian Gate Time c nh, MSP430 s m s dao ng,
khi in dung thay i th s xung m c s thay i. T a ra c gi
tr in dung.
+ Cch o RC (Resistor-Capacitor Timer Constant Measurement):

Hnh 1.8 Cch o RC


cch o ny, MSP430 s m s xung nht nh. Vi mi gi tr ca t in
th thi gian m ht mt s xung xc nh s l khc nhau. Da vo im
ny m ta tnh ton ra c gi tr ca t in tng ng. T y ta xc nh
c l phm cm ng c c nhn hay khng hoc a ra thng s in
dung ca t o.
12

Nh bit th xc nh c mt phm c c bm hay khng ta da


vo tham s threshold c define trc . Threshold l gi tr min ca
thay i in dung khi ta chm tay vo nt bm ,nu gi tr in dung thay
i ln hn gi tr Threshold th mt pad mi c xc nh l bm.
Mi pad ban u s c mt in dung nn base_cnt[i] . ta s bit c gi
tr ny bng hm measure_count() m ta nh ngha c. Khi mt phm
c nhn ,s t ng gi hm ny ln o gi tr in dung mi .Khi so
snh gi tr delta_cnt[i]= base_cnt[i] meas_cnt[i] xc nh nt c
bm.

II.

kt lun.
Thng qua n II chng em lm ln ny gip chng em rn lyn thm
cc k nng lp trnh cho kit launchpad MSP430, k nng lm mch in trn
altium. Tm hiu v bit r hn v module thu pht sng RF, bn phm in
dung. ng c encoder . vn dng nhng kin thc hc trn ging ng
vo thc t v ng thi rn luyn c k nng lm vic nhm, lm vic
c lp. Nhng do thi gian c hn, kh nng cn hn ch, ng thi phi
tip xc vi nhng ci mi l nn bn ca chng em cn mc nhiu sai
st , khuyt im.

13

III. Ti liu tham kho.


1.
2.
3.
4.

Trang Wed : http://www.diendanti.com/


Trang Wed : http://www.dientuvietnam.net/
Trang Wed : http://codientu.org/
Sch Getting Started with the MSP430 LaunchPad Workshop do TI xut
bn.

Phc Lc A: M Ngun
Includes ------------------------------------------------------------------*/
#include <msp430.h>
#include "LCD1602.h"
#include "DS1302.h"
/* Private typedef -----------------------------------------------------------*/
typedef unsigned char uchar;
/* Private define ------------------------------------------------------------*/
#define KEY_PORT_OUT P3OUT
#define KEY_PORT_IN
P3IN
/*RF Connection*/
#define RF_PORT P1IN
#define RF_D3 3
#define RF_D2 2
#define RF_D1 1
#define RF_D0 0
#define
#define
#define
#define
#define

RF_D0_IN()
RF_D1_IN()
RF_D2_IN()
RF_D3_IN()
RF_IN()

RF_PORT&(1<<RF_D0)
RF_PORT&(1<<RF_D1)
RF_PORT&(1<<RF_D2)
RF_PORT&(1<<RF_D3)
RF_PORT & 0x0f

/*PWM*/
#define
#define
#define
#define
#define

LEVEL_MAX
PERIOD
DUTY_K
MOTOR_ON()
MOTOR_OFF()

20
800
// f=20KHz
PERIOD/20
P4OUT |= 1<<0
P4OUT &= ~(1<<0)

/* LCD BLACK LIGHT */


#define LCD_LED_PIN_ON()
P2OUT &= ~(1<<0)
#define LCD_LED_PIN_OFF()
P2OUT |= 1<<0
#define Lcd_Led_On();
Lcd_Led_Cnt = 20
/* SPEAKER */
#define SP_PIN_ON()
P1OUT &= ~(1<<4)
#define SP_PIN_OFF() P1OUT |= 1<<4
#define Sp_On()
Sp_Cnt = 2
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
const uchar KeyCode[16]={ '1','4','7','*',
'2','5','8','0',
'3','6','9','#',
'A','B','C','D',};
/* Private variables ---------------------------------------------------------*/
uchar menu, select,menu_select;
uchar Display_Change;

14

uchar Lcd_Led_Cnt, Sp_Cnt;


uchar Pointer_Cnt,Pointer_Blink, Pointer_Addr;
uchar Key_Old, Key_New, Key_Num;
uchar RF_Old, RF_New, RF_Act;
uchar sec,min,hour,date,month,year;
uchar min_on,min_off,hour_on,hour_off;
uchar motor_speed,motor_direct, motor_on, motor_change;
uchar Time_Update_Cnt;
uchar cnt;
/* Private function prototypes -----------------------------------------------*/
unsigned char KeyScan();
void ShowTime();
/* Private functions ---------------------------------------------------------*/
void print2Dec(unsigned char d)
{
LCD_PutC(d/10+48);
LCD_PutC(d%10+48);
}
void Num_Typing(unsigned char* value, unsigned char max)
{
*value = (*value%10)*10+Key_New-48;
if(*value>max)*value=0;
}
void Update_Pointer()
{
LCD_Goto(Pointer_Addr);
LCD_PutC(126-Pointer_Blink*94);
}
void Set_Pointer(unsigned char Addr)
{
LCD_Goto(Pointer_Addr);
LCD_PutC(32);
Pointer_Addr = Addr;
}
/*
* @brief: MENU Handle
*/
void AKEY_Handle()
{
menu++;
select=0;
switch(menu)
{
case 4: menu=0;
case 0:
{
RTC_GetDate(&date,&month,&year);
Set_Pointer(0x10);
LCD_Clr();
LCD_Goto(0x00);
LCD_PutS("TIME");
LCD_Goto(0x08);
LCD_PutS("- -20");
LCD_Goto(0x4A);
LCD_PutS(": :");
Display_Change=1;
break;
}
case 1:
{
Set_Pointer(0x4D);
LCD_Clr();
LCD_Goto(0x00);
LCD_PutS("SET");
LCD_Goto(0x40);
LCD_PutS("TIME");
LCD_Goto(0x0C);

15

LCD_PutS("20");
Display_Change=1;
break;
}
case 2:
{
Set_Pointer(0x09);
LCD_Clr();
LCD_Goto(0x00);
LCD_PutS("TIME-ON :");
LCD_Goto(0x40);
LCD_PutS("TIME-OFF:");
LCD_Goto(0x0C);
LCD_PutC(':');
LCD_Goto(0x4C);
LCD_PutC(':');
Display_Change=1;
break;
}
case 3:
{
Set_Pointer(0x00);
LCD_Clr();
LCD_Goto(0x01);
LCD_PutS("SPEED");
LCD_Goto(0x41);
LCD_PutS("DIRECT");
Display_Change=1;
break;
}
default: menu=0;break;
}
menu_select=(menu<<4)|select;
}
/*
* @brief: SELECT Handle
*/
void BKEY_Handle()
{
select++;
menu_select=(menu<<4)|select;
switch(menu_select)
{
case 0x01:select=0;
case 0x00:break;
//Page 1 : Set Time
case 0x16:select=0;menu_select=0x10;
case 0x10:Set_Pointer(0x4D);break;
case 0x11:Set_Pointer(0x4A);break;
case 0x12:Set_Pointer(0x47);break;
case 0x13:Set_Pointer(0x05);break;
case 0x14:Set_Pointer(0x08);break;
case 0x15:Set_Pointer(0xB);break;
//Page 2: Set ON/OFF Time
case 0x24:select=0;menu_select=0x20;
case 0x20:Set_Pointer(0x09);break;
case 0x21:Set_Pointer(0x0D);break;
case 0x22:Set_Pointer(0x49);break;
case 0x23:Set_Pointer(0x4D);break;
//Page 2: Set Speed & Direct
case 0x32:select=0;menu_select=0x30;
case 0x30:Set_Pointer(0x00);break;
case 0x31:Set_Pointer(0x40);break;
default:
}
}

16

void CKEY_Handle() // ON/OFF Key


{
RF_Act=1;
RF_New=0x02;
}
void DKEY_Handle()
{
RF_Act=1;
RF_New=0x08;
}
void EKEY_Handle()
{
RF_Act=1;
RF_New=0x04;
}
void FKEY_Handle()
{
RF_Act=1;
RF_New=0x01;
}
/*Num_Typing(&min,59);Display_Change=1;RTC_SetTime(hour,min,sec);break;*/
void Update_Item()
{
switch(menu_select)
{
case 0x00:break;
//Page 1
case 0x10:sec=0;RTC_SetTime(hour,min,sec);break;
case 0x11:Num_Typing(&min,59);Display_Change=1;RTC_SetTime(hour,min,sec);break;
case 0x12:Num_Typing(&hour,23);Display_Change=1;RTC_SetTime(hour,min,sec);break;
case 0x13:Num_Typing(&date,31);Display_Change=1;RTC_SetDate(date,month,year);break;
case 0x14:Num_Typing(&month,12);Display_Change=1;RTC_SetDate(date,month,year);break;
case 0x15:Num_Typing(&year,99);Display_Change=1;RTC_SetDate(date,month,year);break;
//Page 2
case 0x20:Num_Typing(&hour_on,23);break;
case 0x21:Num_Typing(&min_on,59);break;
case 0x22:Num_Typing(&hour_off,23);break;
case 0x23:Num_Typing(&min_off,59);break;
//Page 3
case 0x30:Num_Typing(&motor_speed,LEVEL_MAX);motor_change=1;break;
case 0x31:Num_Typing(&motor_direct,1);motor_change=1;break;
default:
}
}
void Update_Display()
{
switch(menu)
{
case 0:
{
LCD_Goto(0x40);
print2Dec(motor_speed);
if(motor_direct)
{
LCD_PutC(0x3C);
LCD_PutC(0x3C);
}
else
{
LCD_PutC(0x3E);
LCD_PutC(0x3E);
}
ShowTime();
break;
}

17

case 1:ShowTime();break;
case 2:
{
LCD_Goto(0x0A);
print2Dec(hour_on);
LCD_Goto(0x0E);
print2Dec(min_on);
LCD_Goto(0x4A);
print2Dec(hour_off);
LCD_Goto(0x4E);
print2Dec(min_off);
break;
}
case 3:
{
LCD_Goto(0x0E);
print2Dec(motor_speed);
LCD_Goto(0x49);
if(motor_direct)
LCD_PutS("FORWARD");
else
LCD_PutS("REVERSE");
break;
}
default:
}
}

/*Timer A0 interrupt service routine-----*/


#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
/*Speaker On Delay*/
if(Sp_Cnt)
{
Sp_Cnt--;
SP_PIN_ON();
}
else SP_PIN_OFF();
/*RF Check-------------------*/
RF_New = RF_IN();
if(RF_New!=RF_Old)
{
RF_Act=1;
if(RF_New){Lcd_Led_On();Sp_On();}
}
RF_Old=RF_New;
/*Key Scan-------------------*/
Key_New=KeyScan();
if(Key_New!=Key_Old)
{
switch(Key_New)
{
case 0: break;
case 'A':
AKEY_Handle();break;
case 'B':
BKEY_Handle();break;
case 'C':
CKEY_Handle();break;
case 'D':
DKEY_Handle();break;
case '*':
EKEY_Handle();break;
case '#':
FKEY_Handle();break;
default:
Key_Num=1; break;
}
if(Key_New)

18

{Lcd_Led_On();Sp_On();}
}
Key_Old=Key_New;
/*Read Time------------------*/
Time_Update_Cnt++;
if(Time_Update_Cnt==20)
{
Time_Update_Cnt=0;
RTC_GetTime(&hour, &min, &sec);
if(sec==0)
if(min==0)
if(hour=0)
RTC_GetDate(&date,&month,&year);
Display_Change=1;
/*LCD Black Light On Delay*/
if(Lcd_Led_Cnt)
{
Lcd_Led_Cnt--;
LCD_LED_PIN_ON();
}
else LCD_LED_PIN_OFF();
}
/*Pointer Blink*/
Pointer_Cnt++;
if(Pointer_Cnt==20)
{
Pointer_Cnt=0;
Pointer_Blink^=0x01;
Update_Pointer();
}
/**/
/**/
TACCR0 += 40000;

// Add Offset to TACCR0

/**
* @brief
*/

Main program.

int main(void)
{
uchar i;
WDTCTL = WDTPW + WDTHOLD;
DCOCTL = CALDCO_16MHZ;
BCSCTL1 = CALBC1_16MHZ;
/*PORT Configuration------------*/
//------PORT1--------------------P1DIR=0xf0;
P1.3: RFIN, P1.4: Speaker
SP_PIN_OFF();
First
//------PORT2--------------------P2DIR=0xff;
Led
P2SEL=0x00;
//------PORT3--------------------P3DIR=0x0f;
//------PORT4--------------------P4DIR=0xff;
/*Timer A -----------------------*/
TACCTL0 = CCIE;
TACCR0 = 50000;

// Stop WDT

// P1.5-P1.7: DS1302, P1.0// Turn Off Speaker


// P2.2-P2.7: LCD, P2.0: LCD

// P3: Matrix Key


// P4: L298 & Current FeedBack
// TACCR0 interrupt enabled

19

TACTL = ID_2 + TASSEL_2 + MC_2;


/*Timer B -----------------------*/
TBCTL = TBSSEL_2 + MC_1;
TBCCR0 = PERIOD;
TBCCTL1 = OUTMOD_7;
TBCCR1 = 2;
TBCCTL2 = OUTMOD_7;
TBCCR2 = 2;

// 1/8, SMCLK, contmode


// SMCLK, up mode
// PWM Period
// TBCCR1 reset/set
// TBCCR1 PWM duty cycle

/*Peripheral Initial-------------*/
LCD_Init();
/*Initial First Display*/
LCD_PutS("MOTOR DRIVER...");
for(i=0;i<15;i++)
{
LCD_Goto(0x40+i);
LCD_PutC(0xff);
__delay_cycles(1000000);
}
//motor_speed = RTC_ReadRam(1);
RTC_GetDate(&date,&month,&year);
Set_Pointer(0x10);
LCD_Clr();
LCD_Goto(0x00);
LCD_PutS("TIME");
LCD_Goto(0x08);
LCD_PutS("- -20");
LCD_Goto(0x4A);
LCD_PutS(": :");
Display_Change=1;
__bis_SR_register(GIE);
// Enter LPM0 w/ interrupt
for(;;)
{
/*Item Update---------------------------------------*/
if(Key_Num)
{
Key_Num=0;
Update_Item();
}
/*Display Update-----------------------------------*/
if(Display_Change)
{
Display_Change=0;
Update_Display();
}
/*RF Handle---------------------------------------*/
if(RF_Act)
{
RF_Act=0;
motor_change=1;
switch(RF_New)
{
case 0x01://Key D: DOWN SPEED
if(motor_speed>0)motor_speed--;
break;
case 0x02://Key C: ON/OFF
motor_on ^=0x01;
break;
case 0x04://Key B: UP SPEED
if(motor_speed<LEVEL_MAX)motor_speed++;
break;
case 0x08://Key A: DIRECT
motor_direct ^=0x01;
break;
}
}

20

/*Motor Driver Control------------------------------*/


if(motor_change)
{
motor_change=0;
//RTC_WriteRam(1,motor_speed);
//RTC_WriteRam(2,motor_direct);
MOTOR_OFF();
//Duty
TBCCR1 = DUTY_K*motor_speed;
TBCCR2 = DUTY_K*motor_speed;
//Direct
if(motor_direct)
{
P4SEL &= ~0x02;
P4OUT &= ~0x02;
P4SEL |= 0x04;
//P4OUT=0x04;
}
else
{
P4SEL &= ~0x04;
P4OUT &= ~0x04;
P4SEL |= 0x02;
//P4OUT=0x02;
}

//P4.1: IO
//P4.2:PWM

//P4.2: IO
//P4.1:PWM

//On/Off
if(motor_on)
MOTOR_ON();
else
MOTOR_OFF();
}
/* Motor Timer Control-------------------*/
if(min_on==min)
{
if(hour_on==hour)
MOTOR_ON();
}
if(min_off==min)
{
if(hour_off==hour)
MOTOR_OFF();
}

}
}
/*
* @brief: Key Scan Program
*/
unsigned char KeyScan()
{
uchar i,key_index;
for(i=0;i<4;i++)
{
KEY_PORT_OUT=1<<i;
if(KEY_PORT_IN & 0xf0)
{
switch(KEY_PORT_IN & 0xf0){
case 0x10:key_index=0x00;break;
case 0x20:key_index=0x01;break;
case 0x40:key_index=0x02;break;
case 0x80:key_index=0x03;break;

21

default:
}
return KeyCode[key_index|(i<<2)];
}
}
return 0;
}
void ShowTime()
{
__disable_interrupt();
LCD_Goto(0x06);
print2Dec(date);
LCD_Goto(0x09);
print2Dec(month);
LCD_Goto(0x0E);
print2Dec(year);
LCD_Goto(0x48);
print2Dec(hour);
LCD_Goto(0x4B);
print2Dec(min);
LCD_Goto(0x4E);
print2Dec(sec);
__enable_interrupt();
}

Ph Lc B: Cc bn v thit k, bn v mch in ca sn phm

22

Hnh 1: S nguyn l ca mch.

23

Hnh 2 : S mch in sn phm.

24

Hnh 3 : Sn Phm hon chnh.

25

26

You might also like