code mau

Màu nền
Font chữ
Font size
Chiều cao dòng

\u00ff\u00fe#include <16f877a.h> \r 

#include <def_877a.h> \r 

#device *=16 ADC=8 \r 

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT \r 

#use delay(clock=20000000) \r 

#include <lcd_lib_4bit.c> \/\/ Thu vien ham cho LCD \r 

\r 

void main() \r 

{ \r 

trisa = 0xFF; \r 

trisb = 0x01; \r 

trisd = 0x00; \r 

LCD_init(); \r 

Printf(LCD_putchar," PICVIETNAM tut"); \r 

LCD_putcmd(0xC3); \r 

Printf(LCD_putchar," LCD 4bit "); \r 

Project3: \u0010\u0001i\u00c1\u001eu khi\u00c3\u001en \u0010\u0001\u00d9\u001eng C\u00a1\u0001 d\u00f9ng Timer2\r 

#include <16F877A.h>\r 

#device PIC16F877A*=16 adc=8\r 

#fuses HS,NOWDT,NOPROTECT,NOLVP\r 

#use delay(clock=20000000)\r 

\/\/ Dinh nhgia chan va port\r 

#define DIR_DC_L PIN_C3 \/\/Dao DC Trai\r 

#define PWM_DC_L PIN_C2 \/\/ PWM trai(CCP2)\r 

#define DIR_DC_R PIN_C0 \/\/ Dao DC Phai\r 

#define PWM_DC_R PIN_C1 \/\/ PWM phai (CCP1)\r 

\/\/ set ADC\r 

#define adc 90 \/\/gia tri nguong so sanh\r 

\/\/ Khai bao bien cho toan chuong trinh\r 

int8 adc0,adc1,adc2,adc3,adc4,adc5,adc6,adc7;\r 

int8 cambien=0x00;\r 

int line_st=0; \/\/ Trang thai vach\r 

\/\/******************chuong trinh khoi tao************************\r 

void khoi_tao()\r 

{\r 

SET_TRIS_A(0xFF); \/\/ NHAN TIN HIEU TU SENDOR DO DUONG\r 

SET_TRIS_C(0x00); \/\/ Dieu Khien DC \r 

SET_TRIS_D(0x00); \/\/ Hien thi tin hieu sensor\r 

SET_TRIS_E(0b111); \r 

Setup_ADC (ADC_CLOCK_INTERNAL); \r 

setup_adc_ports(ALL_ANALOG);\r 

}\r 

\/\/****************************** Doc cam bien *******************\r 

void doc_cam_bien()\r 

{\r 

set_adc_channel(0);\r 

delay_us (10);\r 

adc0=read_adc();\r 

if (adc0<=225) bit_clear(cambien,0);\r 

else bit_set(cambien,0);\r 

.....................................\r 

\/\/************************** Dieu khien motor **********************\r 

void dc_trai_tien (int value)\r 

{\r 

output_bit(DIR_DC_L,0);\r 

setup_timer_2(T2_DIV_BY_4,124,1);\r 

setup_ccp2(CCP_PWM);\r 

set_pwm2_duty(value);\r 

}\r 

void dc_trai_lui(int value)\r 

{\r 

output_bit(DIR_DC_L,1);\r 

setup_timer_2(T2_DIV_BY_4,124,1); \r 

setup_ccp2(CCP_PWM);\r 

set_pwm2_duty(value);\r 

}\r 

void dc_trai_dung()\r 

{\r 

setup_ccp2(CCP_OFF); \r 

}\r 

\/\/******* Chuong trinh xu ly toc do 2 dong co************************\r 

void toc_do(signed int toc_do_dc_trai, signed int toc_do_dc_phai)\r 

{\r 

int trai=0,phai=0;\r 

if(toc_do_dc_trai>=0)\r 

{ trai=1.25*(100-toc_do_dc_trai);\r 

dc_trai_tien(trai); \r 

}\r 

else \r 

{toc_do_dc_trai=-toc_do_dc_trai;\r 

trai=1.25*(100-toc_do_dc_trai);\r 

dc_trai_lui(trai);\r 

}\r 

\/\/************Do duong theo vach den************************\r 

void do_duong()\r 

{\r 

doc_cam_bien();\r 

switch (cambien)\r 

{\r 

case 0b00011000: {toc_do(70,70);line_st=0;} break;\r 

case 0b00000000: {dc_dung();kiem_tra_vach();} break;\r 

default: {toc_do(70,70);}\r 

}\r 

}\r 

void main()\r 

{ \r 

khoi_tao();\r 

delay_ms(10);\r 

while(1)\r 

{\r 

doc_cam_bien();\r 

output_d(cambien);\r 

delay_ms(50);\r 

do_duong();\r 

}\r 

}\r 

\u0010\u0001\u00e2y l\u00e0 ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh d\u00f9ng ng\u00af\u001et Timer0 \u0011\u0001\u00cb\u001enh th\u00ec 1s.\r 

\u0010\u0001\u00a7\u001eu ti\u00ean led \u00df\u001e ch\u00e2n RB0 s\u00e1ng, sau 1s s\u00bd\u001e d\u00cb\u001ech sang tr\u00e1i, ngh)\u0001a l\u00e0 led 1 tr\u00ean ch\u00e2n RB1 s\u00e1ng , l\u00a7\u001en l\u00b0\u0001\u00e3\u001et nh\u00b0\u0001 v\u00ad\u001ey cho c\u00e1c led tr\u00ean portB v\u00e0 l\u00b7\u001ep l\u00a1\u001ei m\u00e3i m\u00e3i.\r 

#include <16F877A.h>\r 

#fuses NOWDT,PUT,XT,NOPROTECT\r 

#use delay(clock=4000000)\r 

#byte PORTB = 0x06\r 

\r 

int16 count;\r 

int8 a;\r 

\/\/Chuong trinh ngat TMR0\r 

#int_timer0\r 

void interrupt_timer0()\r 

{\r 

set_timer0(6);\r 

++count;\r 

if(count == 2000) \/\/ 2000*500us = 500000us = 1s\r 

{\r 

count=0;\r 

rotate_left(&a,1);\r 

}\r 

}\r 

void main(void)\r 

{\r 

set_tris_b(0);\r 

enable_interrupts(int_timer0);\r 

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); \r 

enable_interrupts(global);\r 

set_timer0(6);\/\/ T_dinhthi = 2*(256 - 6)*1us = 500us\r 

a = 0x01;\r 

\r 

while(true)\r 

{\r 

PORTB = a;\r 

}\r 

}\r 

M\u00d7\u001ei Timer \u0011\u0001\u00c1\u001eu c\u00f3 2 t\u00e1c d\u00e5\u001eng:\r 

\r 

T\u00e1c d\u00e5\u001eng \u0011\u0001\u00cb\u001enh th\u00dd\u001ei: Timer s\u00bd\u001e d\u00f1\u001ea v\u00e0o c\u00e1c xung t\u00a1\u001eo ra b\u00df\u001ei b\u00d9\u001e dao \u0011\u0001\u00d9\u001eng (th\u00a1\u001ech anh, dao \u0011\u0001\u00d9\u001eng RC, ...) cung c\u00a5\u001ep cho vi \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en \u0011\u0001\u00c3\u001e \u0011\u0001\u00bf\u001em. V\u00e0 d\u00f1\u001ea v\u00e0o t\u00a7\u001en s\u00d1\u001e b\u00d9\u001e dao \u0011\u0001\u00d9\u001eng, gi\u00e1 tr\u00cb\u001e c\u00e1c b\u00d9\u001e chia t\u00a7\u001en s\u00d1\u001e v\u00e0 gi\u00e1 tr\u00cb\u001e c\u00e7\u001ea Timer, ta c\u00f3 th\u00c3\u001e x\u00e1c \u0011\u0001\u00cb\u001enh \u0011\u0001\u00b0\u0001\u00e3\u001ec th\u00dd\u001ei gian th\u00f1\u001ec. Nh\u00b0\u0001 v\u00ad\u001ey trong tr\u00b0\u0001\u00dd\u001eng h\u00e3\u001ep mu\u00d1\u001en Timer ho\u00a1\u001et \u0011\u0001\u00d9\u001eng \u00df\u001e ch\u00bf\u001e \u0011\u0001\u00d9\u001e \u0011\u0001\u00cb\u001enh th\u00dd\u001ei, ta ph\u00a3\u001ei khai b\u00e1o rtcc_state l\u00e0 "RTCC_INTERNAL" (x\u00ed\u001e d\u00e5\u001eng t\u00a7\u001en s\u00d1\u001e dao \u0011\u0001\u00d9\u001eng n\u00d9\u001ei).\r 

\r 

T\u00e1c d\u00e5\u001eng \u0011\u0001\u00bf\u001em: Timer s\u00bd\u001e d\u00f1\u001ea v\u00e0o c\u00e1c xung l\u00a5\u001ey t\u00eb\u001e m\u00f4i tr\u00b0\u0001\u00dd\u001eng b\u00ean ngo\u00e0i \u0011\u0001\u00c3\u001e \u0011\u0001\u00bf\u001em. T\u00f9y theo Timer m\u00e0 ta s\u00ed\u001e d\u00e5\u001eng ch\u00e2n l\u00a5\u001ey xung t\u00b0\u0001\u00a1\u0001ng \u00e9\u001eng (Timer 0 l\u00e0 ch\u00e2n RA4, Timer1 l\u00e0 ch\u00e2n RC0). C\u00e1c xung n\u00e0y c\u00f3 t\u00e1c d\u00e5\u001eng ph\u00a3\u001en \u00e1nh c\u00e1c hi\u00c7\u001en t\u00b0\u0001\u00e3\u001eng trong th\u00f1\u001ec t\u00bf\u001e, v\u00e0 vi\u00c7\u001ec \u0011\u0001\u00bf\u001em c\u00e1c xung ci\u0001ng \u0011\u0001\u00d3\u001eng ngh)\u0001a v\u00db\u001ei vi\u00c7\u001ec \u0011\u0001\u00bf\u001em c\u00e1c hi\u00c7\u001en t\u00b0\u0001\u00e3\u001eng \u0011\u0001\u00f3. V\u00e0 \u0011\u0001\u00c3\u001e linh \u0011\u0001\u00d9\u001eng h\u00a1\u0001n trong qu\u00e1 tr\u00ecnh x\u00ed\u001e l\u00ed, Timer c\u00f2n cho ph\u00e9p ch\u00cd\u001en c\u00a1\u001enh t\u00e1c \u0011\u0001\u00d9\u001eng l\u00ean b\u00d9\u001e \u0011\u0001\u00bf\u001em (ch\u00bf\u001e \u0011\u0001\u00d9\u001e n\u00e0y ch\u00c9\u001e c\u00f3 \u00df\u001e Timer 0). Nh\u00b0\u0001 v\u00ad\u001ey mu\u00d1\u001en Timer ho\u00a1\u001et \u0011\u0001\u00d9\u001eng \u00df\u001e ch\u00bf\u001e \u0011\u0001\u00d9\u001e \u0011\u0001\u00bf\u001em, ta ph\u00a3\u001ei khai b\u00e1o rtcc_state l\u00e0 m\u00d9\u001et trong 2 tr\u00b0\u0001\u00dd\u001eng h\u00e3\u001ep c\u00f2n l\u00a1\u001ei (s\u00ed\u001e d\u00e5\u001eng dao \u0011\u0001\u00d9\u001eng ngo\u00e0i).\r 

ps_state l\u00e0 m\u00d9\u001et trong nh\u00ef\u001eng constant sau:\r 

\r 

RTCC_DIV_2\r 

RTCC_DIV_4\r 

RTCC_DIV_8\r 

RTCC_DIV_16\r 

RTCC_DIV_32\r 

RTCC_DIV_64\r 

RTCC_DIV_128\r 

RTCC_DIV_256\r 

WDT_18MS\r 

WDT_36MS\r 

WDT_72MS\r 

WDT_144MS\r 

WDT_288MS\r 

WDT_576MS\r 

WDT_1152MS\r 

WDT_2304MS\r 

\u00de\u001e \u0011\u0001\u00e2y c\u00f3 \u0011\u0001\u00bf\u001en 2 h\u00e0m d\u00f9ng \u0011\u0001\u00c3\u001e \u00a5\u001en \u0011\u0001\u00cb\u001enh t\u00c9\u001e s\u00d1\u001e chia c\u00e7\u001ea prescaler, m\u00d9\u001et h\u00e0m l\u00e0 "RTCC_DIV_...", m\u00d9\u001et h\u00e0m l\u00e0 "WDT_ ...". \u0010\u0001\u00f3 l\u00e0 b\u00df\u001ei v\u00ec Timer 0 v\u00e0 WDT d\u00f9ng chung b\u00d9\u001e chia t\u00a7\u001en s\u00d1\u001e. Khi b\u00d9\u001e chia \u0011\u0001\u00b0\u0001\u00e3\u001ec Timer 0 s\u00ed\u001e d\u00e5\u001eng th\u00ec WDT kh\u00f4ng \u0011\u0001\u00f1\u001eoc h\u00d7\u001e tr\u00e3\u001e v\u00db\u001ei b\u00d9\u001e chia n\u00e0y n\u00ef\u001ea. Nh\u00b0\u0001 v\u00ad\u001ey s\u00f1\u001e kh\u00e1c bi\u00c7\u001et v\u00c1\u001e thao t\u00e1c gi\u00ef\u001ea 2 h\u00e0m n\u00e0y c\u00f3 th\u00c3\u001e l\u00e0 nh\u00b0\u0001 sau:\r 

\r 

H\u00e0m "RTCC_DIV_..." : cho ph\u00e9p Timer 0 s\u00ed\u001e d\u00e5\u001eng b\u00d9\u001e chia t\u00a7\u001en s\u00d1\u001e, kh\u00f4ng cho ph\u00e9p WDT s\u00ed\u001e d\u00e5\u001eng v\u00e0 \u00a5\u001en \u0011\u0001\u00cb\u001enh t\u00c9\u001e s\u00d1\u001e chia c\u00e7\u001ea n\u00f3.\r 

\r 

H\u00e0m "WDT_ ..." : cho ph\u00e9p WDT 0 s\u00ed\u001e d\u00e5\u001eng b\u00d9\u001e chia t\u00a7\u001en s\u00d1\u001e, kh\u00f4ng cho ph\u00e9p Timer 0 s\u00ed\u001e d\u00e5\u001eng v\u00e0 \u00a5\u001en \u0011\u0001\u00cb\u001enh t\u00c9\u001e s\u00d1\u001e chia c\u00e7\u001ea n\u00f3.\r 

\r 

Tr\u00edch:\r 

T2_DISABLED \r 

T2_DIV_BY_1\r 

T2_DIV_BY_4\r 

T2_DIV_BY_16\r 

\r 

period l\u00e0 s\u00d1\u001e nguy\u00ean t\u00eb\u001e 0-255, x\u00e1c \u0011\u0001\u00cb\u001enh gi\u00e1 tr\u00cb\u001e xung reset\r 

postscale l\u00e0 s\u00d1\u001e nguy\u00ean 1-16, x\u00e1c \u0011\u0001\u00cb\u001enh reset bao nhi\u00eau l\u00a7\u001en tr\u00b0\u0001\u00db\u001ec khi ng\u00af\u001et. \r 

h\u00f4m nay 09:30 AM\r 

\r 

Ta c\u00f3 th\u00c3\u001e nh\u00ad\u001en th\u00a5\u001ey l\u00e0 Timer 2 c\u00f3 \u0011\u0001\u00bf\u001en 2 b\u00d9\u001e chia t\u00a7\u001en s\u00d1\u001e tr\u00b0\u0001\u00db\u001ec v\u00e0 sau, m\u00d9\u001et b\u00d9\u001e prescaler \u0011\u0001\u00b0\u0001\u00e3\u001ec \u0011\u0001\u00ednh k\u00e8m v\u00e0o c\u00e1c ch\u00bf\u001e \u0011\u0001\u00d9\u001e ho\u00a1\u001et \u0011\u0001\u00d9\u001eng c\u00e7\u001ea Timer 2 (T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16), m\u00d9\u001et b\u00d9\u001e l\u00e0 postscaler cis t\u00c9\u001e s\u00d1\u001e chia t\u00eb\u001e 1:16. Nh\u00b0\u0001 v\u00ad\u001ey n\u00f3 cho ph\u00e9p vi\u00c7\u001ec l\u00f1\u001ea ch\u00cd\u001en t\u00c9\u001e s\u00d1\u001e chia linh \u0011\u0001\u00d9\u001eng h\u00a1\u0001n.\r 

\r 

Timer 2 kh\u00f4ng ho\u00a1\u001et \u0011\u0001\u00d9\u001eng \u00df\u001e ch\u00bf\u001e \u0011\u0001\u00d9\u001e \u0011\u0001\u00bf\u001em. Ch\u00e9\u001ec n\u0003\u0001ng c\u00e7\u001ea n\u00f3 ch\u00e7\u001e y\u00bf\u001eu l\u00e0 t\u00e1c \u0011\u0001\u00d9\u001eng l\u00ean t\u00d1\u001ec \u0011\u0001\u00d9\u001e baud cho MSSP th\u00ec ph\u00a3\u001ei. Kh\u00f4ng nh\u00db\u001e r\u00f5 l\u00af\u001em.\r 

\r 

Tr\u00edch:\r 

postscale l\u00e0 s\u00d1\u001e nguy\u00ean 1-16, x\u00e1c \u0011\u0001\u00cb\u001enh reset bao nhi\u00eau l\u00a7\u001en tr\u00b0\u0001\u00db\u001ec khi ng\u00af\u001et.\r 

\r 

C\u00e1i n\u00e0y \u0011\u0001\u00c3\u001e m\u00ecnh coi l\u00a1\u001ei \u0011\u0001\u00e3, t\u00a1\u001ei sao n\u00f3 l\u00a1\u001ei x\u00e1c \u0011\u0001\u00cb\u001enh reset bao nhi\u00eau l\u00a7\u001en tr\u00b0\u0001\u00db\u001ec khi ng\u00af\u001et ??. Ph\u00a3\u001ei coi l\u00a1\u001ei c\u00e1i s\u00a1\u0001 \u0011\u0001\u00d3\u001e kh\u00d1\u001ei c\u00e7\u001ea Timer 2 m\u00db\u001ei bi\u00bf\u001et \u0011\u0001\u00b0\u0001\u00e3\u001ec.\r 

\r 

\r 

\r 

Project 7 : Ng\u00af\u001et ngo\u00e0i________________________________________\r 

\r 

Ch\u00e0o c\u00a3\u001e nh\u00e0 !\r 

\r 

Sao kh\u00f4ng th\u00a5\u001ey b\u00e1c n\u00e0o post b\u00e0i v\u00e0o lu\u00d3\u001eng n\u00e0y v\u00ad\u001ey k\u00e0 !Tr\u00a7\u001em qu\u00e1...!Tr\u00a7\u001em qu\u00e1...!Hay c\u00e1i CCS C n\u00e0y kh\u00f4ng h\u00a5\u001ep d\u00ab\u001en m\u00cd\u001ei ng\u00b0\u0001\u00dd\u001ei ch\u0003\u0001ng!\r 

Kh\u00f4ng ai vi\u00bf\u001et g\u00ec, t\u00db\u001e v\u00ab\u001en post cho n\u00f3 \u0011\u0001\u00e1\u001e tr\u00a7\u001em....!\r 

\u0010\u0001\u00e3 v\u00ed d\u00e5\u001e v\u00c1\u001e ng\u00af\u001et Timer, sau \u0011\u0001\u00e2y l\u00e0 2 v\u00ed d\u00e5\u001e v\u00c1\u001e ng\u00af\u001et ngo\u00e0i tr\u00ean ch\u00e2n RB0 v\u00e0 tr\u00ean c\u00e1c ch\u00e2n RB4 \u0011\u0001\u00bf\u001en RB7:\r 

Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh sau d\u00f9ng ng\u00af\u001et ngo\u00e0i tr\u00ean RB0 \u0011\u0001\u00bf\u001em s\u00d1\u001e l\u00a7\u001en c\u00e1i button \u0011\u0001\u00b0\u0001\u00e3\u001ec nh\u00a5\u001en xu\u00d1\u001eng, hi\u00c3\u001en th\u00cb\u001e l\u00ean led 7 \u0011\u0001o\u00a1\u001en (common cathode).N\u00bf\u001eu s\u00d1\u001e l\u00a7\u001en nh\u00a5\u001en v\u00b0\u0001\u00e3\u001et qu\u00e1 9, ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh s\u00bd\u001e quay v\u00c1\u001e hi\u00c3\u001en th\u00cb\u001e l\u00ean led t\u00eb\u001e s\u00d1\u001e 1.\r 

Code:\r 

\/\/*****************************************************************************\r 

\/\/ Author : nhh\r 

\/\/ Date : 03\/04\/06\r 

\/\/ Hardware: PIC16F877A\r 

\/\/*****************************************************************************\r 

#include <16F877A.h>\r 

#fuses NOWDT,PUT,XT,NOPROTECT\r 

#use delay(clock=4000000)\r 

#use fast_io(b)\r 

#use fast_io(d)\r 

#byte portb=0x06\r 

#byte portd=0x08\r 

const unsigned char digital[]={0b00000110, 0b01011011, 0b01001111, 0b01100110,\\\r 

0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};\r 

\/\/ ma hoa digital duoi dang mang\r 

\/\/ Chuong trinh ngat\r 

#int_ext\r 

void ngat_RB0()\r 

{\r 

int i;\r 

if(i<9)\r 

{\r 

portd=digital[i];\r 

++i;\r 

}\r 

if(i==9)\r 

{\r 

i=0;\r 

}\r 

}\r 

\/\/ Chuong trinh chinh\r 

main()\r 

{\r 

set_tris_b(0b00000001);\r 

set_tris_d(0);\r 

enable_interrupts(global);\r 

enable_interrupts(int_ext);\r 

ext_int_edge(H_to_L);\r 

portd=0b00111111;\r 

while(true)\r 

{\r 

\/\/ chi doi ngat nen vong lap nay ko co gi ca !\r 

}\r 

}\r 

\r 

Ng\u00af\u001et ngo\u00e0i tr\u00ean RB4-RB7\r 

________________________________________\r 

C\u00f2n \u0011\u0001\u00e2y l\u00e0 \u00e9\u001eng d\u00e5\u001eng ng\u00af\u001et ngo\u00e0i tr\u00ean RB4 \u0011\u0001\u00bf\u001en RB7 \u0011\u0001\u00c3\u001e thay \u0011\u0001\u00d5\u001ei ki\u00c3\u001eu ci\u0001ng nh\u00b0\u0001 t\u00d1\u001ec \u0011\u0001\u00d9\u001e ch\u00db\u001ep nh\u00e1y m\u00a5\u001ey con led ch\u00c9\u001e \u0011\u0001\u00c3\u001e....ng\u00af\u001em cho vui m\u00af\u001et !\r 

\r 

\u00a4\u001en sw1, led1 nh\u00a5\u001ep nh\u00e1y v\u00db\u001ei delay 250ms\r 

\u00a4\u001en sw2, led1,2 nh\u00a5\u001ep nh\u00e1y v\u00db\u001ei delay 200ms\r 

\u00a4\u001en sw3, led1,2,3 nh\u00a5\u001ep nh\u00e1y v\u00db\u001ei delay 150ms\r 

\u00a4\u001en sw4, led1,2,3,4 nh\u00a5\u001ep nh\u00e1y v\u00db\u001ei delay 100ms \r 

Code:\r 

\/\/*****************************************************************************\r 

\/\/ Author : nhh\r 

\/\/ Date : 03\/04\/06\r 

\/\/ Hardware: PIC16F877A\r 

\/\/*****************************************************************************\r 

#include <16F877A.h>\r 

#fuses NOWDT,PUT,XT,NOPROTECT\r 

#use delay(clock=4000000)\r 

#use fast_io(b)\r 

#byte portb=0x06\r 

#byte intcon=0x000B\r 

#bit RB4=portb.4\r 

#bit RB5=portb.5\r 

#bit RB6=portb.6\r 

#bit RB7=portb.7\r 

#bit RBIF=intcon.0 \/\/dinh nghia co ngat RB\r 

#bit RBIE=intcon.3 \/\/dinh nghia bit cho phep ngat RB\r 

int led=0,speed;\r 

\/\/ Chuong trinh ngat\r 

#int_RB\r 

void ngat_RB()\r 

{\r 

if((RBIF)&&(RBIE)) \r 

{ \r 

\/\/Kiem tra sw1\r 

{\r 

if(RB4==0)\r 

{\r 

led=0b00000001; \/\/led1 sang\r 

speed=250;\r 

} \r 

}\r 

\/\/Kiem tra sw2 \r 

{\r 

if(RB5==0)\r 

{\r 

led=0b00000011; \/\/led1,2 sang\r 

speed=200;\r 

} \r 

}\r 

\/\/Kiem tra sw3\r 

{\r 

if(RB6==0)\r 

{\r 

led=0b00000111; \/\/led1,2,3 sang\r 

speed=150;\r 

} \r 

}\r 

\/\/Kiem tra sw4\r 

{\r 

if(RB7==0)\r 

{\r 

led=0b00001111; \/\/led1,2,3,4 sang\r 

speed=100;\r 

} \r 

}\r 

RBIF=0; \/\/Xoa co ngat RB \r 

}\r 

}\r 

\/\/ Chuong trinh chinh\r 

main()\r 

{\r 

set_tris_b(0b11110000);\r 

portb=0b00001111;\r 

enable_interrupts(global);\r 

enable_interrupts(int_RB);\r 

ext_int_edge(H_to_L);\r 

while(true)\r 

{\r 

portb=led;\r 

delay_ms(speed);\r 

portb=0;\r 

delay_ms(speed); \r 

}\r 

}\r 

Project 8: Gi\u00a3\u001ei m\u00e3 b\u00e0n ph\u00edm\r 

________________________________________\r 

M\u00a1\u001ech qu\u00e9t 16 ph\u00edm, hi\u00c7\u001en k\u00bf\u001et qu\u00a3\u001e l\u00ean led 7 \u0011\u0001o\u00a1\u001en.\r 

Code:\r 

\/\/*****************************************************************************\r 

\/\/ Author : nhh\r 

\/\/ Date : 03\/04\/06\r 

\/\/ Hardware: PIC16F877A\r 

\/\/*****************************************************************************\r 

#include <16F877A.h>\r 

#fuses NOWDT,PUT,XT,NOPROTECT\r 

#use delay(clock=4000000)\r 

#use fast_io(b)\r 

#use fast_io(c)\r 

#byte portb = 0x06\r 

#byte portc = 0x07\r 

#bit RB0 = 0x06.0\r 

#bit RB1 = 0x06.1\r 

#bit RB2 = 0x06.2\r 

#bit RB3 = 0x06.3\r 

#bit RB4 = 0x06.4\r 

#bit RB5 = 0x06.5\r 

#bit RB6 = 0x06.6\r 

#bit RB7 = 0x06.7\r 

#bit RBIF=intcon.0 \/\/dinh nghia co ngat RB\r 

#bit RBIE=intcon.3 \/\/dinh nghia bit cho phep ngat RB\r 

int a;\r 

const unsigned char dig[]={0b00111111,0b00000110, 0b01011011,0b01001111,\\\r 

0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111,0b01110111,\\\r 

0b01111100,0b00111001,0b01011110,0b11111001,0b11110001};\r 

\/\/ ma hoa digital duoi dang mang\r 

\/\/ Chuong trinh ngat\r 

#int_RB\r 

void ngat_RB()\r 

{\r 

if((RBIF)&&(RBIE))\r 

{\r 

{\r 

if(RB4&&RB0)\r 

a=dig[0];\r 

}\r 

{\r 

if(RB4&&RB1)\r 

a=dig[4];\r 

}\r 

{\r 

if(RB4&&RB2)\r 

a=dig[8];\r 

}\r 

{\r 

if(RB4&&RB3)\r 

a=dig[12];\r 

}\r 

\/\/.......\r 

{\r 

if(RB5&&RB0)\r 

a=dig[1];\r 

}\r 

{\r 

if(RB5&&RB1)\r 

a=dig[5];\r 

}\r 

{\r 

if(RB5&&RB2)\r 

a=dig[9];\r 

}\r 

{\r 

if(RB5&&RB3)\r 

a=dig[13];\r 

}\r 

\/\/........\r 

{\r 

if(RB6&&RB0)\r 

a=dig[2];\r 

}\r 

{\r 

if(RB6&&RB1)\r 

a=dig[6];\r 

}\r 

{\r 

if(RB6&&RB2)\r 

a=dig[10];\r 

}\r 

{\r 

if(RB6&&RB3)\r 

a=dig[14];\r 

}\r 

\/\/........\r 

{\r 

if(RB7&&RB0)\r 

a=dig[3];\r 

}\r 

{\r 

if(RB7&&RB1)\r 

a=dig[7];\r 

}\r 

{\r 

if(RB7&&RB2)\r 

a=dig[11];\r 

}\r 

{\r 

if(RB7&&RB3)\r 

a=dig[15];\r 

}\r 

RBIF=0; \/\/Xoa co ngat RB\r 

}\r 

}\r 

\/\/ Chuong trinh chinh\r 

main()\r 

{\r 

set_tris_b(0b11110000);\r 

set_tris_c(0);\r 

enable_interrupts(global);\r 

enable_interrupts(int_RB);\r 

ext_int_edge(H_to_L);\r 

portb=0;\r 

portc=0;\r 

while(true)\r 

{\r 

portb=1;\r 

portb=2;\r 

portb=4;\r 

portb=8;\r 

portc=a;\r 

}\r 

}\r 

\r 

Project 9: Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh g\u00ed\u001ei k\u00fd t\u00f1\u001e ra 2x16 LCD d\u00f9ng CCS C\r 

________________________________________\r 

Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh g\u00ed\u001ei k\u00fd t\u00f1\u001e ra 2x16 LCD d\u00f9ng CCS C\r 

\r 

#include "16F877A.h" \/\/ PIC16F877A header file\r 

#use delay(clock=4000000) \/\/ for 4Mhz crystal\r 

#fuses XT, NOWDT, NOPROTECT, NOLVP \/\/ for debug mode\r 

\r 

#define WRITE_DATA 0\r 

#define WRITE_COMMAND 1\r 

\r 

#define NCHAR_PER_LINE 16 \/\/ max char numbers per line\r 

#define MS10 10 \/\/ 10 milliseconds\r 

#define US400 400 \/\/ 400 microseconds\r 

\r 

#define LCD_RS PIN_A1\r 

#define LCD_RW PIN_A2\r 

#define LCD_E PIN_A3\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/\/\r 

\/* private *\/ void lcd_write(byte dat, int1 option) {\r 

delay_us(US400);\r 

if (option == WRITE_DATA)\r 

output_high(LCD_RS);\r 

else \/\/ option == WRITE_COMMAND\r 

output_low(LCD_RS);\r 

output_low(LCD_RW);\r 

output_b(dat);\r 

\r 

output_high(LCD_E);\r 

delay_us(US400);\r 

output_low(LCD_E);\r 

}\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/\/\r 

void lcd_init(void) {\r 

output_low(LCD_E); \/\/ Let LCD E line low\r 

\r 

lcd_write(0x38, WRITE_COMMAND); \/\/ Set LCD 16x2, 5x7, 8bits data\r 

delay_ms(15);\r 

lcd_write(0x01, WRITE_COMMAND); \/\/ Clear LCD display\r 

delay_ms(MS10);\r 

lcd_write(0x0f, WRITE_COMMAND); \/\/ Open display & current\r 

delay_ms(MS10);\r 

lcd_write(0x06, WRITE_COMMAND); \/\/ Window fixed (Character Entry Mode?)\r 

delay_ms(MS10);\r 

}\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/\/\r 

void lcd_display_char(int8 line, int8 pos, char ch) {\r 

line = (line == 0) ? 0 : 1;\r 

pos = (pos > NCHAR_PER_LINE) ? NCHAR_PER_LINE : pos;\r 

\r 

lcd_write(0x80 + 0x40 * line + pos, WRITE_COMMAND);\r 

lcd_write(ch, WRITE_DATA);\r 

}\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

void lcd_display_str(int8 line, char str[], int8 nchars) {\r 

int8 i;\r 

for (i = 0; i < nchars; i++)\r 

lcd_display_char(line, i, str[i]);\r 

}\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/**\r 

* Display characters to a 2x16 LCD\r 

*\r 

* (1) LCD1 to GND\r 

* (2) LCD2 to VDD 5 volts\r 

* (3) LCD4 (RS) - LCD5 (RW) - LCD6 (E) to A1, A2, A3\r 

* (4) LCD7-LCD14 to B0-B7 (bus data)\r 

*\r 

* Ref: http:\/\/pic16.com\/bbs\/dispbbs.asp?boa...ID=5879&page=1\r 

*\/\r 

void main(void) {\r 

int8 i;\r 

char LINE1[] = { "SGN Tech" };\r 

char LINE2[] = { "Xin chao" };\r 

\r 

lcd_init();\r 

\r 

\/\/ use of lcd_display_char()\r 

for (i = 0; i < 8; i++)\r 

lcd_display_char(0, i, LINE1[i]);\r 

\r 

\/\/ use of lcd_display_str\r 

lcd_display_str(1, LINE2, 8);\r 

}\r 

Project 10: Ng\u00af\u001et ngo\u00e0i v\u00e0 \u0011\u0001\u00e8n 7 \u0011\u0001o\u00a1\u001en\r 

________________________________________\r 

M\u00d9\u001et ph\u00b0\u0001\u00a1\u0001ng \u00e1n kh\u00e1c:\r 

\r 

#include <16F877A.h>\r 

#fuses NOWDT, XT\r 

#fuses NOLVP \/\/ important\r 

#use delay(clock=4000000)\r 

\r 

\/\/ 0 1 2 3 4 5 6 7 8 9\r 

byte const DIGITS[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };\r 

int8 i = 0;\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/* private *\/void off_on_led_transistor() {\r 

output_low(PIN_D1);\r 

delay_ms(1);\r 

output_high(PIN_D1);\r 

}\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/* private *\/void display(int8 digit) {\r 

output_c(DIGITS[digit] ^ 0xff);\r 

off_on_led_transistor();\r 

}\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

#INT_EXT\r 

void ngat_RB0() {\r 

i = (i < 9) ? i+1 : 1;\r 

delay_ms(200); \/\/ switch debounce period\r 

}\r 

\r 

\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/**\r 

* Count number of key presses and display it on a 7-segment LED.\r 

* If the number is 9, the next count will be 1\r 

*\r 

* Wiring (TM Board)\r 

* (1) PIC's B0 to R0\r 

* Matrix Key C0 to GND\r 

* (2) PIC's C0-C6 to 7-segment LED's A-G\r 

* PIC's D1 to 7-segment LED's C2\r 

*\/\r 

void main() {\r 

enable_interrupts(GLOBAL);\r 

enable_interrupts(INT_EXT);\r 

\r 

while (true)\r 

display(i);\r 

}\r 

HD44780 c\u00f3 14 ch\u00e2n, ch\u00e9\u001ec n\u0003\u0001ng c\u00e7\u001ea c\u00e1c ch\u00e2n:\r 

\r 

1.C\u00e1c ch\u00e2n VCC, VSS v\u00e0 VEE: Ch\u00e2n VCC_C\u00a5\u001ep d\u00b0\u0001\u00a1\u0001ng ngu\u00d3\u001en 5V, ch\u00e2n VCC_N\u00d1\u001ei \u0011\u0001\u00a5\u001et, ch\u00e2n VEE \u0011\u0001\u00b0\u0001\u00e3\u001ec d\u00f9ng \u0011\u0001\u00c3\u001e \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en \u0011\u0001\u00d9\u001e t\u00b0\u0001\u00a1\u0001ng ph\u00a3\u001en c\u00e7\u001ea m\u00e0n h\u00ecnh LCD.\r 

\r 

2.Ch\u00e2n ch\u00cd\u001en thanh ghi RS (Register Select):\r 

C\u00f3 hai thanh ghi r\u00a5\u001et quan tr\u00cd\u001eng b\u00ean trong LCD, ch\u00e2n RS \u0011\u0001\u00b0\u0001\u00e3\u001ec d\u00f9ng \u0011\u0001\u00c3\u001e ch\u00cd\u001en c\u00e1c thanh ghi n\u00e0y nh\u00b0\u0001 sau: N\u00bf\u001eu RS = 0 th\u00ec thanh ghi m\u00e0 l\u00c7\u001enh \u0011\u0001\u00b0\u0001\u00e3\u001ec ch\u00cd\u001en \u0011\u0001\u00c3\u001e cho ph\u00e9p ng\u00b0\u0001\u00dd\u001ei d\u00f9ng g\u00ed\u001ei m\u00d9\u001et l\u00c7\u001enh ch\u00b3\u001eng h\u00a1\u001en nh\u00b0\u0001 xo\u00e1 m\u00e0n h\u00ecnh, \u0011\u0001\u00b0\u0001a con tr\u00cf\u001e v\u00c1\u001e \u0011\u0001\u00a7\u001eu d\u00f2ng,& N\u00bf\u001eu RS = 1 th\u00ec thanh ghi d\u00ef\u001e li\u00c7\u001eu \u0011\u0001\u00b0\u0001\u00e3\u001ec ch\u00cd\u001en cho ph\u00e9p ng\u00b0\u0001\u00dd\u001ei d\u00f9ng g\u00ed\u001ei d\u00ef\u001e li\u00c7\u001eu c\u00a7\u001en hi\u00c3\u001en th\u00cb\u001e tr\u00ean LCD.\r 

3.Ch\u00e2n \u0011\u0001\u00cd\u001ec\/ghi R\/W:\r 

\u0010\u0001\u00a7\u001eu v\u00e0o \u0011\u0001\u00cd\u001ec\/ghi cho ph\u00e9p ng\u00b0\u0001\u00dd\u001ei d\u00f9ng ghi th\u00f4ng tin l\u00ean LCD khi R\/W = 0 ho\u00b7\u001ec \u0011\u0001\u00cd\u001ec th\u00f4ng tin t\u00eb\u001e n\u00f3 khi R\/W = 1.\r 

\r 

4.Ch\u00e2n cho ph\u00e9p E (Enable):\r 

Ch\u00e2n cho ph\u00e9p E \u0011\u0001\u00b0\u0001\u00e3\u001ec s\u00ed\u001e d\u00e5\u001eng b\u00df\u001ei LCD \u0011\u0001\u00c3\u001e ch\u00d1\u001et th\u00f4ng tin hi\u00c7\u001en h\u00ef\u001eu tr\u00ean ch\u00e2n d\u00ef\u001e li\u00c7\u001eu c\u00e7\u001ea n\u00f3. Khi d\u00ef\u001e li\u00c7\u001eu \u0011\u0001\u00b0\u0001\u00e3\u001ec c\u00a5\u001ep \u0011\u0001\u00bf\u001en ch\u00e2n d\u00ef\u001e li\u00c7\u001eu th\u00ec m\u00d9\u001et xung m\u00e9\u001ec cao xu\u00d1\u001eng th\u00a5\u001ep ph\u00a3\u001ei \u0011\u0001\u00b0\u0001\u00e3\u001ec \u00e1p \u0011\u0001\u00bf\u001en ch\u00e2n n\u00e0y \u0011\u0001\u00c3\u001e LCD ch\u00d1\u001et d\u00ef\u001e li\u00c7\u001eu tr\u00ean c\u00e1c ch\u00e2n d\u00ef\u001e li\u00eau. Xung n\u00e0y ph\u00a3\u001ei r\u00d9\u001eng t\u00d1\u001ei thi\u00c3\u001eu l\u00e0 450ns.\r 

\r 

5.C\u00e1c ch\u00e2n D0 - D7:\r 

\u0010\u0001\u00e2y l\u00e0 8 ch\u00e2n d\u00ef\u001e li\u00c7\u001eu 8 b\u00edt, \u0011\u0001\u00b0\u0001\u00e3\u001ec d\u00f9ng \u0011\u0001\u00c3\u001e g\u00ed\u001ei th\u00f4ng tin l\u00ean LCD ho\u00b7\u001ec \u0011\u0001\u00cd\u001ec n\u00d9\u001ei dung c\u00e7\u001ea c\u00e1c thanh ghi trong LCD.\r 

\u0010\u0001\u00c3\u001e hi\u00c3\u001en th\u00cb\u001e c\u00e1c ch\u00ef\u001e c\u00e1i v\u00e0 c\u00e1c con s\u00d1\u001e, ch\u00fang ta g\u00ed\u001ei c\u00e1c m\u00e3 ASCII c\u00e7\u001ea c\u00e1c ch\u00ef\u001e c\u00e1i t\u00eb\u001e A \u0011\u0001\u00bf\u001en Z, a \u0011\u0001\u00bf\u001en f v\u00e0 c\u00e1c con s\u00d1\u001e t\u00eb\u001e 0 - 9,... \u0011\u0001\u00bf\u001en c\u00e1c ch\u00e2n n\u00e0y khi b\u00ad\u001et RS = 1.\r 

Ci\u0001ng c\u00f3 c\u00e1c m\u00e3 l\u00c7\u001enh m\u00e0 c\u00f3 th\u00c3\u001e \u0011\u0001\u00b0\u0001\u00e3\u001ec g\u00ed\u001ei \u0011\u0001\u00bf\u001en LCD \u0011\u0001\u00c3\u001e xo\u00e1 m\u00e0n h\u00ecnh ho\u00b7\u001ec \u0011\u0001\u00b0\u0001a con tr\u00cf\u001e v\u00c1\u001e \u0011\u0001\u00a7\u001eu d\u00f2ng ho\u00b7\u001ec nh\u00a5\u001ep nh\u00e1y con tr\u00cf\u001e.D\u00b0\u0001\u00db\u001ei \u0011\u0001\u00e2y l\u00e0 b\u00a3\u001eng li\u00c7\u001et k\u00ea c\u00e1c m\u00e3 l\u00c7\u001enh:\r 

(Ph\u00a3\u001ei qua l\u00a7\u001en post kh\u00e1c v\u00ec s\u00d1\u001e \u00a3\u001enh v\u00b0\u0001\u00e3\u001et qu\u00e1 4..... )\r 

Ch\u00fang ta ci\u0001ng s\u00ed\u001e d\u00e5\u001eng RS = 0 \u0011\u0001\u00c3\u001e ki\u00c3\u001em tra b\u00edt c\u00dd\u001e b\u00ad\u001en \u0011\u0001\u00c3\u001e xem LCD c\u00f3 s\u00b5\u001en s\u00e0ng nh\u00ad\u001en th\u00f4ng tin ch\u00b0\u0001a. C\u00dd\u001e b\u00ad\u001en l\u00e0 D7 v\u00e0 c\u00f3 th\u00c3\u001e \u0011\u0001\u00b0\u0001\u00e3\u001ec \u0011\u0001\u00cd\u001ec khi R\/W = 1 v\u00e0 RS = 0 nh\u00b0\u0001 sau:\r 

\r 

N\u00bf\u001eu R\/W = 1, RS = 0 khi D7 = 1 (c\u00dd\u001e b\u00ad\u001en 1) th\u00ec LCD b\u00ad\u001en b\u00df\u001ei c\u00e1c c\u00f4ng vi\u00c7\u001ec b\u00ean trong v\u00e0 s\u00bd\u001e kh\u00f4ng nh\u00ad\u001en b\u00a5\u001et k\u00f3\u001e th\u00f4ng tin m\u00db\u001ei n\u00e0o. Khi D7 = 0 th\u00ec LCD s\u00b5\u001en s\u00e0ng nh\u00ad\u001en th\u00f4ng tin m\u00db\u001ei. L\u00b0\u0001u \u00fd ch\u00fang ta n\u00ean ki\u00c3\u001em tra c\u00dd\u001e b\u00ad\u001en tr\u00b0\u0001\u00db\u001ec khi ghi b\u00a5\u001et k\u00f3\u001e d\u00ef\u001e li\u00c7\u001eu n\u00e0o l\u00ean LCD.\r 

\r 

C\u00f3 th\u00c3\u001e di chuy\u00c3\u001en con tr\u00cf\u001e \u0011\u0001\u00bf\u001en v\u00cb\u001e tr\u00ed b\u00a5\u001et k\u00ec tr\u00ean m\u00e0n h\u00ecnh LCD b\u00b1\u001eng c\u00e1ch n\u00a1\u001ep v\u00e0o c\u00e1c gi\u00e1 tr\u00cb\u001e t\u00b0\u0001\u00a1\u0001ng \u00e9\u001eng nh\u00b0\u0001 b\u00a3\u001eng sau v\u00e0 g\u00df\u001ei y\u00eau c\u00a7\u001eu \u0011\u0001\u00bf\u001en LCD:\r 

C\u00f3 hai c\u00e1ch l\u00ad\u001ep tr\u00ecnh cho LCD: d\u00f9ng 8bit interface (\u0011\u0001\u00a1\u0001n gi\u00a3\u001en) ho\u00b7\u001ec 4bit interface (ph\u00e9\u001ec t\u00a1\u001ep h\u00a1\u0001n)\r 

1. 8bit interface\r 

Code:\r 

\/*\u0010\u0001\u00c3\u001e LCD th\u00f1\u001ec thi c\u00e1c l\u00c7\u001enh \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en:*\/\r 

\r 

RS = 0; \/\/ch\u00cd\u001en thanh ghi l\u00c7\u001enh\r 

R\/W = 0; \/\/ghi d\u00ef\u001e li\u00c7\u001eu, R\/W = 1;\/\/\u0011\u0001\u00cd\u001ec d\u00ef\u001e li\u00c7\u001eu\r 

E= 1; \/\/\u0011\u0001\u00b0\u0001a ch\u00e2n E l\u00ean m\u00e9\u001ec cao\r 

E= 0; \/\/t\u00a1\u001eo s\u00b0\u0001\u00dd\u001en xu\u00d1\u001eng \u0011\u0001\u00c3\u001e ch\u00d1\u001et d\u00ef\u001e li\u00c7\u001eu\r 

\r 

\/*\u0010\u0001\u00c3\u001e LCD th\u00f1\u001ec thi c\u00e1c l\u00c7\u001enh hi\u00c3\u001en th\u00cb\u001e:*\/\r 

\r 

RS = 1; \/\/ch\u00cd\u001en thanh ghi d\u00ef\u001e li\u00c7\u001eu\r 

R\/W = 0; \/\/ghi d\u00ef\u001e li\u00c7\u001eu\r 

E = 1; \/\/\u0011\u0001\u00b0\u0001a ch\u00e2n E l\u00ean m\u00e9\u001ec cao\r 

E = 0; \/\/t\u00a1\u001eo s\u00b0\u0001\u00dd\u001en xu\u00d1\u001eng \u0011\u0001\u00c3\u001e ch\u00d1\u001et d\u00ef\u001e li\u00c7\u001eu\r 

S\u00ed\u001e d\u00e5\u001eng 8 ch\u00e2n D0 - D7 \u0011\u0001\u00c3\u001e truy\u00c1\u001en th\u00f4ng tin, d\u00ef\u001e li\u00c7\u001eu \u0011\u0001\u00bf\u001en LCD.\r 

- \u0010\u0001\u00c3\u001e \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en LCD (Ch\u00cd\u001en ch\u00bf\u001e \u0011\u0001\u00d9\u001e LCD, b\u00ad\u001et\/t\u00af\u001et hi\u00c3\u001en th\u00cb\u001e, b\u00ad\u001et\/t\u00af\u001et\/nh\u00a5\u001ep nh\u00e1y\/di chuy\u00c3\u001en con tr\u00cf\u001e,...): Nh\u00ad\u001ep gi\u00e1 tr\u00cb\u001e t\u00b0\u0001\u00a1\u0001ng \u00e9\u001eng v\u00e0o D0-D7 r\u00d3\u001ei g\u00df\u001ei l\u00c7\u001enh y\u00eau c\u00a7\u001eu LCD th\u00f1\u001ec thi l\u00c7\u001enh \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en, ti\u00bf\u001ep theo cho LCD th\u00dd\u001ei gian tr\u00c5\u001e \u0011\u0001\u00c3\u001e th\u00f1\u001ec thi (ho\u00b7\u001ec h\u00cf\u001ei c\u00dd\u001e b\u00ad\u001en xem LCD s\u00b5\u001en s\u00e0ng th\u00f1\u001ec hi\u00c7\u001en l\u00c7\u001enh ti\u00bf\u001ep theo ch\u00b0\u0001a?)\r 

- \u0010\u0001\u00c3\u001e hi\u00c3\u001en th\u00cb\u001e d\u00ef\u001e li\u00c7\u001eu l\u00ean LCD:Nh\u00ad\u001ep d\u00ef\u001e li\u00c7\u001eu c\u00a7\u001en hi\u00c3\u001en th\u00cb\u001e v\u00e0o D0-D7 r\u00d3\u001ei g\u00df\u001ei l\u00c7\u001enh y\u00eau c\u00a7\u001eu LCD th\u00f1\u001ec thi l\u00c7\u001enh hi\u00c3\u001en th\u00cb\u001e d\u00ef\u001e li\u00c7\u001eu, ti\u00bf\u001ep theo cho LCD th\u00dd\u001ei gian tr\u00c5\u001e \u0011\u0001\u00c3\u001e th\u00f1\u001ec thi (ho\u00b7\u001ec h\u00cf\u001ei c\u00dd\u001e b\u00ad\u001en xem LCD s\u00b5\u001en s\u00e0ng th\u00f1\u001ec hi\u00c7\u001en l\u00c7\u001enh ti\u00bf\u001ep theo ch\u00b0\u0001a?) \r 

\r 

\u0010\u0001\u00e2y l\u00e0 m\u00a1\u001ech nguy\u00ean l\u00fd k\u00bf\u001et n\u00d1\u001ei LCD d\u00f9ng 8 ch\u00e2n interface v\u00db\u001ei PIC16F877A qua PORTB:\r 

\r 

2.4bit interface\r 

\r 

S\u00ed\u001e d\u00e5\u001eng 4 ch\u00e2n D4 - D7 (ho\u00b7\u001ec D0-D3 <- \u00edt d\u00f9ng) \u0011\u0001\u00c3\u001e truy\u00c1\u001en th\u00f4ng tin, d\u00ef\u001e li\u00c7\u001eu \u0011\u0001\u00bf\u001en LCD.\r 

- \u0010\u0001\u00c3\u001e \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en LCD (Ch\u00cd\u001en ch\u00bf\u001e \u0011\u0001\u00d9\u001e LCD, b\u00ad\u001et\/t\u00af\u001et hi\u00c3\u001en th\u00cb\u001e, b\u00ad\u001et\/t\u00af\u001et\/nh\u00a5\u001ep nh\u00e1y\/di chuy\u00c3\u001en con tr\u00cf\u001e,...): Nh\u00ad\u001ep gi\u00e1 tr\u00cb\u001e t\u00b0\u0001\u00a1\u0001ng \u00e9\u001eng v\u00e0o D0-D7,l\u00a5\u001ey gi\u00e1 tr\u00cb\u001e 4bit cao D4-D7 r\u00d3\u001ei g\u00df\u001ei l\u00c7\u001enh y\u00eau c\u00a7\u001eu LCD th\u00f1\u001ec thi l\u00c7\u001enh \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en, ti\u00bf\u001ep theo cho LCD th\u00dd\u001ei gian tr\u00c5\u001e \u0011\u0001\u00c3\u001e th\u00f1\u001ec thi (ho\u00b7\u001ec h\u00cf\u001ei c\u00dd\u001e b\u00ad\u001en xem LCD s\u00b5\u001en s\u00e0ng th\u00f1\u001ec hi\u00c7\u001en l\u00c7\u001enh ti\u00bf\u001ep theo ch\u00b0\u0001a?).Ti\u00bf\u001ep t\u00e5\u001ec, g\u00df\u001ei 4bit th\u00a5\u001ep D0-D3 r\u00d3\u001ei g\u00df\u001ei l\u00c7\u001enh y\u00eau c\u00a7\u001eu LCD th\u00f1\u001ec thi l\u00c7\u001enh \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en, ti\u00bf\u001ep theo cho LCD th\u00dd\u001ei gian tr\u00c5\u001e \u0011\u0001\u00c3\u001e th\u00f1\u001ec thi (ho\u00b7\u001ec h\u00cf\u001ei c\u00dd\u001e b\u00ad\u001en xem LCD s\u00b5\u001en s\u00e0ng th\u00f1\u001ec hi\u00c7\u001en l\u00c7\u001enh ti\u00bf\u001ep theo ch\u00b0\u0001a?)\r 

- \u0010\u0001\u00c3\u001e hi\u00c3\u001en th\u00cb\u001e d\u00ef\u001e li\u00c7\u001eu l\u00ean LCD:Ci\u0001ng l\u00e0m t\u00b0\u0001\u00a1\u0001ng t\u00f1\u001e tr\u00ean nh\u00b0\u0001ng thay y\u00eau c\u00a7\u001eu LCD \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en b\u00b1\u001eng y\u00eau c\u00a7\u001eu LCD hi\u00c3\u001en th\u00cb\u001e. \r 

\r 

\u0010\u0001\u00e2y l\u00e0 m\u00a1\u001ech nguy\u00ean l\u00fd k\u00bf\u001et n\u00d1\u001ei LCD d\u00f9ng 4 ch\u00e2n interface v\u00db\u001ei PIC16F877A qua PORTB:\r 

\r 

N\u00bf\u001eu trong \u00e9\u001eng d\u00e5\u001eng s\u00ed\u001e d\u00e5\u001eng ng\u00af\u001et ngo\u00e0i th\u00ec c\u00f3 th\u00c3\u001e chuy\u00c3\u001en sang n\u00d1\u001ei v\u00db\u001ei PORTD ho\u00b7\u001ec t\u00f9y th\u00edch.\r 

Hi\u00c3\u001en th\u00cb\u001e LCD 8bit interface\r 

________________________________________\r 

Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh hi\u00c3\u001en th\u00cb\u001e d\u00f2ng ch\u00ef\u001e "BE YEU" tr\u00ean h\u00e0ng 1, b\u00af\u001et \u0011\u0001\u00a7\u001eu t\u00a1\u001ei c\u00d9\u001et 6, kh\u00f4ng h\u00cf\u001ei c\u00dd\u001e b\u00ad\u001en D7.\r 

Do trong th\u00e2n h\u00e0m comnwrt() v\u00e0 datawrt() \u0011\u0001\u00e3 t\u00a1\u001eo tr\u00c5\u001e 1ms cu\u00d1\u001ei th\u00e2n h\u00e0m n\u00ean sau khi g\u00cd\u001ei kh\u00f4ng c\u00a7\u001en t\u00a1\u001eo tr\u00c5\u001e cho LCD th\u00f1\u001ec thi l\u00c7\u001enh.\r 

Code:\r 

\/*-----------------------------------------------------------------------------\r 

* Author : nhh\r 

* Date : 05\/04\/06\r 

* Hardware : PIC16F877A\r 

* Compiler : CCS C 3.249\r 

* Description : Hien thi LCD\r 

*=============================================================================*\/\r 

#include <16F877A.h>\r 

#include <DEFS_16F877A.h>\r 

#fuses XT,NOWDT,NOPROTECT,NOLVP\r 

#use delay(clock=4000000)\r 

#define RS RD0\r 

#define RW RD1\r 

#define E RD2\r 

#define LCD PORTB\r 

\r 

\/*Ham yeu cau goi lenh dieu khien LCD*\/\r 

void comnwrt(void)\r 

{\r 

RS = 0;\r 

RW = 0;\r 

E = 1;\r 

E = 0;\r 

delay_ms(1);\r 

}\r 

\/*Ham yeu cau goi du lieu hien thi len LCD*\/\r 

void datawrt(void)\r 

{\r 

RS = 1;\r 

RW = 0;\r 

E = 1;\r 

E = 0;\r 

delay_ms(1);\r 

}\r 

\/*Ham main*\/\r 

void main(void)\r 

{\r 

set_tris_B(0);\r 

set_tris_D(0);\r 

delay_ms(100); \/\/ Tao tre 100ms cho LCD khoi dong\r 

\r 

LCD = 0x38; \/\/ Hai hang, ma tran dot 5*7, 8 bit interface\r 

comnwrt();\r 

LCD = 0x0C; \/\/ Bat hien thi, tat con tro\r 

comnwrt();\r 

\r 

LCD = 0x85; \/\/ Vi tri hang 1,cot 6\r 

comnwrt();\r 

\r 

LCD = 'B'; \/\/ Xuat dong chu "BE YEU" ra LCD\r 

datawrt();\r 

LCD = 'E';\r 

datawrt();\r 

LCD = ' ';\r 

datawrt();\r 

LCD = 'Y';\r 

datawrt();\r 

LCD = 'E';\r 

datawrt();\r 

LCD = 'U';\r 

datawrt();\r 

LCD = '!';\r 

datawrt();\r 

}\r 

Th\u00eam m\u00d9\u001et v\u00ed d\u00e5\u001e kh\u00e1c, ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh hi\u00c3\u001en th\u00cb\u001e d\u00f2ng "HELLO PICVIETNAM!".\r 

Code:\r 

\/*-----------------------------------------------------------------------------\r 

* Author : nhh\r 

* Date : 05\/04\/06\r 

* Hardware : PIC16F877A\r 

* Compiler : CCS C 3.249\r 

* Description : Hien thi LCD\r 

*=============================================================================*\/\r 

#include <16F877A.h>\r 

#include <DEFS_16F877A.h>\r 

#fuses XT,NOWDT,NOPROTECT,NOLVP\r 

#use delay(clock=4000000)\r 

#define RS RD0\r 

#define RW RD1\r 

#define E RD2\r 

#define LCD PORTB\r 

\r 

const unsigned char key[]="HELLOPICVIETNAM!";\r 

int i = 0;\r 

\r 

\/*Ham yeu cau goi lenh dieu khien LCD*\/\r 

void comnwrt(void)\r 

{\r 

RS = 0;\r 

RW = 0;\r 

E = 1;\r 

E = 0;\r 

delay_ms(1);\r 

}\r 

\/*Ham yeu cau goi du lieu hien thi len LCD*\/\r 

void datawrt(void)\r 

{\r 

RS = 1;\r 

RW = 0;\r 

E = 1;\r 

E = 0;\r 

delay_ms(1);\r 

}\r 

\/*Ham main*\/\r 

void main(void)\r 

{\r 

set_tris_B(0);\r 

set_tris_D(0);\r 

delay_ms(100); \/\/ Tao tre 100ms cho LCD khoi dong\r 

\r 

LCD = 0x38; \/\/ Hai hang, ma tran dot 5*7, 8 bit interface\r 

comnwrt();\r 

LCD = 0x0C; \/\/ Bat hien thi, tat con tro\r 

comnwrt();\r 

LCD = 0x86; \/\/ Vi tri hang 1,cot 7\r 

comnwrt();\r 

while(true)\r 

{\r 

LCD = key[i];\r 

datawrt();\r 

delay_ms(100);\r 

i++;\r 

if(i==5) \/\/ Hien thi xong HELLO\r 

{\r 

LCD = 0xC3; \/\/ Vi tri hang 2,cot 4\r 

comnwrt();\r 

delay_ms(100);\r 

}\r 

if(i==16) \/\/ Hien thi xong PICVIETNAM!\r 

{\r 

delay_ms(1100);\r 

LCD = 0x01; \/\/ Xoa man hinh hien thi\r 

comnwrt();\r 

delay_ms(500);\r 

LCD = 0x86; \/\/ Vi tri hang 1,cot 7\r 

comnwrt();\r 

i = 0;\r 

}\r 

}\r 

}\r 

Hi\u00c3\u001en th\u00cb\u001e LCD 4bit interface\r 

________________________________________\r 

C\u00e1i n\u00e0y trong th\u00b0\u0001 vi\u00c7\u001en c\u00e7\u001ea CCS C \u0011\u0001\u00e3 c\u00f3 file lcd.c trong th\u00b0\u0001 m\u00e5\u001ec Drivers r\u00a5\u001et l\u00e0 hay r\u00d3\u001ei, n\u00ean kh\u00f4ng c\u00a7\u001en vi\u00bf\u001et l\u00a1\u001ei l\u00e0m g\u00ec.File n\u00e0y r\u00a5\u001et hay,nh\u00b0\u0001ng ch\u00c9\u001e d\u00f9ng cho LCD 2 line.C\u00e1c b\u00e1c t\u00f1\u001e nghi\u00ean c\u00edu nh\u00e9!\r 

\r 

Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh hi\u00c3\u001en th\u00cb\u001e ch\u00ef\u001e "HI!" b\u00af\u001et \u0011\u0001\u00a7\u001eu t\u00a1\u001ei h\u00e0ng 1, c\u00d9\u001et 7.D\u00f9ng LCD 4bit interface v\u00e0 th\u00b0\u0001 vi\u00c7\u001en lcd.c c\u00e7\u001ea CCS C\r 

Code:\r 

\/*-----------------------------------------------------------------------------\r 

* Author : nhh\r 

* Date : 05\/14\/06\r 

* Hardware : PIC16F877A\r 

* Compiler : CCS C 3.249\r 

* Description : Hien thi LCD\r 

*=============================================================================*\/\r 

#include <16F877A.h>\r 

#include <DEFS_16F877A.h>\r 

#fuses XT,NOWDT,NOPROTECT,NOLVP\r 

#use delay(clock=4000000)\r 

#define use_portb_lcd TRUE\r 

#include <lcd.c>\r 

\r 

void main(void)\r 

{\r 

\r 

delay_ms(100); \/\/ tao tre 100ms cho LCD khoi dong\r 

lcd_init();\r 

lcd_gotoxy(7,1); \/\/ vi tri (x,y)=(7,1)= hang 1, cot 7\r 

lcd_putc('H');\r 

lcd_putc('I');\r 

lcd_putc('!');\r 

}\r 

Em v\u00eb\u001ea m\u00db\u001ei vi\u00bf\u001et xong ct hi\u00c3\u001en th\u00cb\u001e LCD 4 bit! c\u00f3 hi\u00c7\u001eu \u00e9\u001eng ch\u00ef\u001e ch\u00a1\u001ey r\u00a5\u001et hay!! em post l\u00ean cho c\u00e1c p\u00e1c tham kh\u00a3\u001eo nh\u00e9! v\u00e0 g\u00f3p \u00fd cho em nh\u00e9!\r 

\r 

#include <16F877A.h>\r 

#include <DEFS_16F877A.h>\r 

#fuses XT,NOWDT,NOPROTECT,NOLVP\r 

#use delay(clock=4000000)\r 

#define use_portb_lcd TRUE\r 

#include <lcd.c>\r 

const unsigned char line1[]={'H','E','L','L','O',' ','P','I','C','V','N','!','#'};\r 

const unsigned char line2[]={'Y','H',':','T','H','O','N','G','T','R','0','6', '0','1','@',\\\r 

'Y','A','H','O','O','.','C','O','M','#'};\r 

\r 

void main(void)\r 

{ while(true)\r 

{\r 

int I=0,y=0,k=0,z=0;\r 

delay_ms(100); \/\/ tao tre 100ms cho LCD khoi dong\r 

lcd_init();\r 

lcd_gotoxy(1,1); \r 

while (line1[y]!='#')\r 

{\r 

lcd_putc(line1[y]);\r 

delay_ms(200);\r 

y++;\r 

}\r 

lcd_gotoxy(1,2);\r 

while (i<16)\r 

{\r 

lcd_putc(line2[i]);\r 

i++;\r 

delay_ms(200);\r 

}\r 

i=2; \r 

\r 

while (line2[z]!='#') \r 

{\r 

lcd_init();\r 

lcd_gotoxy(1,1);\r 

y=0;\r 

while (line1[y]!='#')\r 

{\r 

lcd_putc(line1[y]);\r 

y++; }\r 

\r 

lcd_gotoxy(1,2);\r 

k=i+16;\r 

for(z=i;z<k;z++) \r 

{lcd_putc(line2[z]);}\r 

delay_ms(400);\r 

i++;\r 

}\r 

}\r 

}\r 

Project 12: Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en Robot\r 

#include <16F877A.h>\r 

#include <DEFS_16F877A.h>\r 

#fuses HS,NOWDT,NOPROTECT,NOLVP\r 

#use delay(clock=20000000)\r 

#use fast_io(a)\r 

#use fast_io(b)\r 

#use fast_io(c)\r 

#use fast_io(d)\r 

#use fast_io(e)\r 

\/\/****************************************\r 

\/\/\/\/\/\/DINH NGHIA CAC CHAN VA CAC CONG\/\/\/\/\/\r 

\/\/****************************************\r 

#define dc_trai1 rc1\r 

#define dc_trai2 rb1\r 

#define dc_phai1 rc2\r 

#define dc_phai2 rb3\r 

#define dc_nang1 rb4\r 

#define dc_nang2 rb5\r 

#define dc_day1 rb6\r 

#define dc_day2 rb7\r 

#define dc_kep1 rd0\r 

#define dc_kep2 rd1\r 

#define sw1 rc0\r 

\/\/*******************************************\r 

\/\/\/\/\/\/\/KHAI BAO CAC HAM VA BIEN\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r 

\/\/*******************************************\r 

void setup();\r 

void tien();\r 

void lui();\r 

void dung();\r 

void dk_tien();\r 

void sang_phai();\r 

void sang_trai();\r 

void quay_phai();\r 

void quay_trai();\r 

void dieu_khien();\r 

int led_thu();\r 

void nang();\r 

void ha();\r 

void kep();\r 

void nha();\r 

void day();\r 

void thu();\r 

void program1();\r 

void program2();\r 

int dem,led;\r 

const unsigned char lech_phai[7]={0b00001000,0b00010000,0b00011000,0b00100000,0b00101000,0b00110000,0b00111000};\r 

const unsigned char lech_trai[7]={0b00000001,0b00000010,0b00000011,0b00000100,0b00000101,0b00000110,0b00000111};\r 

const unsigned char nhieu[50]={0b00000000,0b00001001,0b00001010,0b00001011,0b00001100,0b00001101,0b00001110,0b00010001,\\\r 

0b00010010,0b00010011,0b00010100,0b00010101,0b00010110,0b00011001,0b00011010,\\\r 

0b00011100,0b00100001,0b00100010,0b00100011,0b00100100,0b00100101,0b00100110,\\\r 

0b00101001,0b00101010,0b00101100,0b00110001,0b00110010,0b00110100,0b00011110,\\\r 

0b00111111,0b00111011,0b00111101,0b00111110,0b00111001,0b00111010,0b00111100,\\\r 

0b00110111,0b00101111,0b00011111,0b00100111,0b00010111,0b00001111,0b00110011,\\\r 

0b00110101,0b00110110,0b00101011,0b00101101,0b00101110,0b00011011,0b00011101};\r 

\/\/****\/\/CHUONG TRINH CHINH*********\/\r 

void main()\r 

{\r 

setup();\r 

}\r 

\/*****CHUONG TRINH 1******\/\r 

void program1()\r 

{\r 

while(true)\r 

{\r 

dieu_khien();\r 

}\r 

}\r 

\/\/***CAC CHUONG TRINH CON************\/\r 

void setup()\r 

{\r 

set_tris_a(0b00111111);\r 

set_tris_b(0b00000101);\r 

set_tris_c(0b11111001);\r 

set_tris_d(0);\r 

set_tris_e(0b00000111);\r 

portb=0;\r 

portd=0;\r 

led=0;\r 

dem=0;\r 

dc_trai1=0;\r 

dc_phai1=0;\r 

while(true){\r 

if(sw1==0) program1();\r 

}\r 

}\r 

\/\/***********************************************\r 

void dieu_khien()\r 

{\r 

led=led_thu();\r 

switch(led)\r 

{\r 

case 0: dk_tien(); break;\r 

case 01: sang_phai(); break;\r 

case 02: sang_trai(); break;\r 

}\r 

if (re0) ++dem;\r 

}\r 

\/\/*************************************************\r 

void tien()\r 

{\r 

dc_trai1=1;\r 

dc_trai2=0;\r 

dc_phai1=1;\r 

dc_phai2=0;\r 

delay_ms(500);\r 

}\r 

\/\/**************************************************\r 

void dk_tien()\r 

{\r 

while(led_thu()==0)\r 

{\r 

dc_trai1=1;\r 

dc_trai2=0;\r 

dc_phai1=1;\r 

dc_phai2=0;\r 

}\r 

}\r 

\/\/**************************************************\r 

void lui()\r 

{\r 

dc_trai1=0;\r 

dc_trai2=1;\r 

dc_phai1=0;\r 

dc_phai2=1;\r 

delay_ms(1000);\r 

}\r 

\/\/**************************************************\r 

void sang_phai()\r 

{\r 

setup_ccp1(CCP_PWM);\r 

setup_ccp2(CCP_PWM);\r 

setup_timer_2(T2_DIV_BY_16, 127, 1);\r 

while(led_thu()==1)\r 

{\r 

set_pwm2_duty(1023);\r 

set_pwm1_duty(400);\r 

}\r 

setup_ccp1(CCP_OFF);\r 

setup_ccp2(CCP_OFF);\r 

}\r 

\/\/**************************************************\r 

void sang_trai()\r 

{\r 

setup_ccp1(CCP_PWM);\r 

setup_ccp2(CCP_PWM);\r 

setup_timer_2(T2_DIV_BY_16, 127, 1);\r 

while(led_thu()==2)\r 

{\r 

set_pwm2_duty(400);\r 

set_pwm1_duty(1023);\r 

}\r 

setup_ccp1(CCP_OFF);\r 

setup_ccp2(CCP_OFF);\r 

}\r 

\/\/**************************************************\r 

void quay_phai()\r 

{\r 

while(ra1>0){\r 

dc_trai1=1;\r 

dc_trai2=0;\r 

dc_phai1=0;\r 

dc_phai2=1;\r 

}\r 

}\r 

\/\/**************************************************\r 

void quay_trai()\r 

{\r 

while(ra4>0){\r 

dc_trai1=0;\r 

dc_trai2=1;\r 

dc_phai1=1;\r 

dc_phai2=0;\r 

}\r 

}\r 

\/\/**************************************************\r 

void dung()\r 

{\r 

dc_trai1=1;\r 

dc_trai2=1;\r 

dc_phai1=1;\r 

dc_phai2=1;\r 

delay_ms(1000);\r 

}\r 

\/\/**************************************************\r 

void nang()\r 

{\r 

dc_nang1=1;\r 

dc_nang2=0;\r 

delay_ms(1000);\r 

}\r 

\/\/**************************************************\r 

void ha()\r 

{\r 

dc_nang1=0;\r 

dc_nang2=1;\r 

delay_ms(1000);\r 

}\r 

\/\/**************************************************\r 

void day()\r 

{\r 

dc_day1=1;\r 

dc_day2=0;\r 

delay_ms(1000);\r 

}\r 

\/\/*************************************************\r 

void thu()\r 

{\r 

dc_day1=0;\r 

dc_day2=1;\r 

delay_ms(1000);\r 

}\r 

\/\/*************************************************\r 

void kep()\r 

{\r 

dc_kep1=1;\r 

dc_kep2=0;\r 

delay_ms(1000);\r 

}\r 

\/\/*************************************************\r 

void nha()\r 

{\r 

dc_kep1=0;\r 

dc_kep2=1;\r 

delay_ms(1000);\r 

}\r 

\/\/*************************************************\r 

int led_thu()\r 

{\r 

int i;\r 

for (i=0;i<7;i++)\r 

{\r 

if (porta==lech_trai[i]) return(1);\r 

else if (porta==lech_phai[i]) return(2);\r 

}\r 

for (i=0;i<50;i++)\r 

{\r 

if(porta==nhieu[i]) return(0);\r 

}\r 

}\r 

Project 13: Key debounce\r 

Nh\u00a5\u001en INC t\u0003\u0001ng 1 \u0011\u0001\u00a1\u0001n v\u00cb\u001e tr\u00ean led.DEC gi\u00a3\u001em 1 \u0011\u0001\u00a1\u0001n v\u00cb\u001e\r 

#include <16F877A.h>\r 

#include <DEFS_16F877A.h>\r 

#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP\r 

#use delay(clock = 10000000)\r 

#define LED_PORT PORTD\r 

#define led_1 0b00001110\r 

#define led_2 0b00001101\r 

#define led_3 0b00001011\r 

\/*---------------------------------------------------------------------------------------------\r 

Khai bao cac bien toan cuc\r 

---------------------------------------------------------------------------------------------*\/\r 

const unsigned int digit[] = {0b00000000,0b00010000,0b00100000,0b00110000,0b01000000,\r 

0b01010000,0b01100000,0b01110000,0b10000000,0b10010000};\r 

int number,led_donvi_number,led_chuc_number,led_tram_number;\r 

\/*--Khai bao nguyen mau cac ham su dung-*\/\r 

void number_to_led_number(void);\r 

void display(int led_i,int led_number);\r 

void led_sweep(void);\r 

\/*----------- Chuong trinh chinh ---------*\/\r 

void main(void)\r 

{\r 

set_tris_B(0x03); \/\/ RB0 & RB1 la input\r 

set_tris_D(0x00);\r 

PORTD = 0x00;\r 

while(true)\r 

{\r 

if(!bit_test(PORTB,0))\r 

{\r 

led_sweep(); \/\/ ~12ms\r 

while(!bit_test(PORTB,0))\r 

{\r 

led_sweep();\r 

}\r 

led_sweep(); \/\/ ~12ms\r 

number++;\r 

number_to_led_number();\r 

}\r 

if(!bit_test(PORTB,1))\r 

{\r 

led_sweep(); \/\/ ~12ms\r 

while(!bit_test(PORTB,1))\r 

{\r 

led_sweep();\r 

}\r 

led_sweep(); \/\/ ~12ms\r 

number--;\r 

number_to_led_number();\r 

}\r 

led_sweep();\r 

}\r 

}\r 

\/*---------Ham chuyen tu number sang cac so tuong ung tren led----*\/\r 

void number_to_led_number(void)\r 

{\r 

led_donvi_number = number % 10;\r 

led_chuc_number = (number \/ 10) % 10;\r 

led_tram_number = number \/ 100;\r 

}\r 

\/*-------Ham hien thi so "number" len ledi----*\/\r 

void display(int led_i,int led_number)\r 

{\r 

LED_PORT = led_i|digit[led_number];\r 

}\r 

\/*----Ham quet led -----------*\/\r 

void led_sweep(void)\r 

{\r 

int loop;\r 

for(loop = 0;loop <= 3;loop ++)\r 

{\r 

display(led_1,led_tram_number);\r 

delay_ms(1);\r 

display(led_2,led_chuc_number);\r 

delay_ms(1);\r 

display(led_3,led_donvi_number);\r 

delay_ms(1);\r 

}\r 

}\r 

Project 14: Key scan\r 

\u0010\u0001\u00c3\u001e qu\u00e9t v\u00e0 x\u00e1c \u0011\u0001\u00cb\u001enh ph\u00edm n\u00e0o trong ma tr\u00ad\u001en ph\u00edm \u0011\u0001\u00b0\u0001\u00e3\u001ec nh\u00a5\u001en. Vi\u00c7\u001ec \u0011\u0001\u00a7\u001eu ti\u00ean l\u00e0 l\u00e0m c\u00e1ch n\u00e0o \u0011\u0001\u00c3\u001e x\u00e1c \u0011\u0001\u00cb\u001enh \u0011\u0001\u00fang ph\u00edm \u0011\u0001\u00b0\u0001\u00e3\u001ec nh\u00a5\u001en,\r 

sau \u0011\u0001\u00f3 l\u00e0 ch\u00d1\u001eng rung ph\u00edm \u0011\u0001\u00c3\u001e ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh th\u00f1\u001ec thi \u0011\u0001\u00fang y\u00eau c\u00a7\u001eu. Ch\u00d1\u001eng rung ch\u00b3\u001eng qua l\u00e0 t\u00a1\u001eo m\u00d9\u001et kho\u00a3\u001eng th\u00dd\u001ei gian delay c\u00a7\u001en\r 

thi\u00bf\u001et \u0011\u0001\u00c3\u001e lo\u00a1\u001ei b\u00cf\u001e vi\u00c7\u001ec \u0011\u0001\u00cd\u001ec nh\u00a7\u001em tr\u00a1\u001eng th\u00e1i ph\u00edm b\u00cb\u001e n\u00a3\u001ey m\u00d7\u001ei khi nh\u00a5\u001en v\u00e0 th\u00a3\u001e ph\u00edm. T\u00f9y theo \u0011\u0001\u00d9\u001e c\u00e9\u001eng c\u00e7\u001ea t\u00eb\u001eng lo\u00a1\u001ei ph\u00edm nh\u00a5\u001en m\u00e0 kho\u00a3\u001eng th\u00dd\u001ei gian n\u00e0y\r 

kh\u00e1c nhau, th\u00b0\u0001\u00dd\u001eng t\u00eb\u001e 10 - 20ms. \r 

\r 

C\u00f3 nhi\u00c1\u001eu c\u00e1ch, d\u00b0\u0001\u00db\u001ei \u0011\u0001\u00e2y l\u00e0 m\u00d9\u001et c\u00e1ch:\r 

\r 

- Kh\u00df\u001ei t\u00a1\u001eo h\u00e0ng m\u00e9\u001ec 0, c\u00d9\u001et m\u00e9\u001ec 1\r 

- Ki\u00c3\u001em tra xem c\u00d9\u001et n\u00e0o xu\u00d1\u001eng m\u00e9\u001ec 0, n\u00bf\u001eu ko c\u00f3 th\u00ec l\u00b7\u001ep l\u00a1\u001ei\r 

- T\u00a1\u001eo tr\u00c5\u001e 10ms\r 

- Ki\u00c3\u001em tra l\u00a1\u001ei xem c\u00d9\u001et n\u00e0o xu\u00d1\u001eng m\u00e9\u001ec 0 c\u00f3 c\u00f2n \u00df\u001e m\u00e9\u001ec 0 ko, n\u00bf\u001eu ko quay l\u00a1\u001ei b\u00b0\u0001\u00db\u001ec 2\r 

- Set m\u00cd\u001ei h\u00e0ng l\u00ean m\u00e9\u001ec 1, l\u00a7\u001en l\u00b0\u0001\u00e3\u001et cho t\u00eb\u001eng c\u00d9\u001et xu\u00d1\u001eng m\u00e9\u001ec 0, ki\u00c3\u001em tra xem h\u00e0ng n\u00e0o xu\u00d1\u001eng m\u00e9\u001ec 0\r 

- \u0010\u0001\u00e3\u001ei \u0011\u0001\u00bf\u001en khi th\u00a3\u001e ph\u00edm\r 

-T\u00a1\u001eo tr\u00c5\u001e 10ms\r 

- X\u00e1c \u0011\u0001\u00cb\u001enh \u0011\u0001\u00b0\u0001\u00e3\u001ec phim \u00a5\u001en, th\u00f1\u001ec thi y\u00eau c\u00a7\u001eu\r 

Mo ta : Nhan phim ma tran phim, 8 led portD hien so tuong ung 0-15, so nay cung duoc goi\r 

* len may tinh bang giao tiep RS232\r 

*----\r 

* Phan cung : PIC16F877A, thach anh 10MHz\r 

* ma tran phim noi voi portB, 8 led don noi voi portD qua tro han dong 220R\r 

* Pic giao tiep RS232 voi may tinh\r 

*---------\r 

* Nguoi viet: nhh\r 

* Ngay viet : 12\/11\/06\r 

* Trinh dich: CCS C v3.013\r 

************\/\r 

#include <DEFS_16F877A.h>\r 

#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP\r 

#use delay(clock = 10000000)\r 

#use rs232(baud = 9600,xmit = pin_C6,rcv = pin_C7)\r 

#define key_port PORTB\r 

#define key_tris TRISB\r 

#define led_port PORTD\r 

#define led_tris TRISD\r 

\/*------Khai bao bien toan cuc---------*\/\r 

const unsigned char number[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};\r 

\r 

\/*------------Khai bao nguyen mau cac ham su dung-------------*\/\r 

void column_check(unsigned char);\r 

void key_scan(void);\r 

\r 

\/*------------Ham kiem tra hang nao trong cot column xuong 0------------*\/\r 

void column_check(unsigned char column)\r 

{\r 

switch(column)\r 

{\r 

case 0:\r 

{\r 

if(!bit_test(key_port,0))\r 

{\r 

while(!bit_test(key_port,0));\r 

delay_ms(10);\r 

led_port = number[0];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,1))\r 

{\r 

while(!bit_test(key_port,1));\r 

delay_ms(10);\r 

led_port = number[1];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,2))\r 

{\r 

while(!bit_test(key_port,2));\r 

delay_ms(10);\r 

led_port = number[2];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,3))\r 

{\r 

while(!bit_test(key_port,3));\r 

delay_ms(10);\r 

led_port = number[3];\r 

printf("%u\

\\r",led_port);\r 

}\r 

}\r 

break;\r 

case 1:\r 

{\r 

if(!bit_test(key_port,0))\r 

{\r 

while(!bit_test(key_port,0));\r 

delay_ms(10);\r 

led_port = number[4];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,1))\r 

{\r 

while(!bit_test(key_port,1));\r 

delay_ms(10);\r 

led_port = number[5];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,2))\r 

{\r 

while(!bit_test(key_port,2));\r 

\r 

delay_ms(10);\r 

led_port = number[6];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,3))\r 

{\r 

while(!bit_test(key_port,3));\r 

delay_ms(10);\r 

led_port = number[7];\r 

printf("%u\

\\r",led_port);\r 

}\r 

}\r 

break;\r 

case 2:\r 

{\r 

if(!bit_test(key_port,0))\r 

{\r 

while(!bit_test(key_port,0));\r 

delay_ms(10);\r 

led_port = number[8];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,1))\r 

{\r 

while(!bit_test(key_port,1));\r 

delay_ms(10);\r 

led_port = number[9];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,2))\r 

{\r 

while(!bit_test(key_port,2));\r 

delay_ms(10);\r 

led_port = number[10];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,3))\r 

{\r 

while(!bit_test(key_port,3));\r 

delay_ms(10);\r 

led_port = number[11];\r 

printf("%u\

\\r",led_port);\r 

}\r 

}\r 

break;\r 

case 3:\r 

{\r 

if(!bit_test(key_port,0))\r 

{\r 

while(!bit_test(key_port,0));\r 

delay_ms(10);\r 

led_port = number[12];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,1))\r 

{\r 

while(!bit_test(key_port,1));\r 

delay_ms(10);\r 

led_port = number[13];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,2))\r 

{\r 

while(!bit_test(key_port,2));\r 

delay_ms(10);\r 

led_port = number[14];\r 

printf("%u\

\\r",led_port);\r 

}\r 

if(!bit_test(key_port,3))\r 

{\r 

while(!bit_test(key_port,3));\r 

delay_ms(10);\r 

led_port = number[15];\r 

printf("%u\

\\r",led_port);\r 

}\r 

}\r 

break;\r 

}\r 

}\r 

\r 

\/*--------Ham quet phim-------------*\/\r 

void key_scan(void)\r 

{\r 

int count;\r 

for(count = 4;count <= 7; count++)\r 

{\r 

key_tris = 0xF0; \/\/ cot ngo vao, hang ngo ra\r 

key_port = 0xF0; \/\/ cot muc 1, hang muc 0\r 

if(!bit_test(key_port,count)) \/\/ cot count xuong 0 chua?\r 

{\r 

delay_ms(10);\r 

if(!bit_test(key_port,count)) \/\/ kiem tra lai cot count co xuong 0 ko?\r 

{\r 

key_tris = 0x0F; \/\/ cot ngo ra, hang ngo vao\r 

key_port = 0xEF; \/\/ cot 0 xuong 0\r 

column_check(0);\r 

key_port = 0xDF; \/\/ cot 1 xuong 0\r 

column_check(1);\r 

key_port = 0xBF; \/\/ cot 2 xuong 0\r 

column_check(2);\r 

key_port = 0x7F; \/\/ cot 3 xuong 0\r 

column_check(3);\r 

}\r 

}\r 

}\r 

}\r 

\r 

\/*---------Chuong trinh chinh---------------*\/\r 

void main(void)\r 

{\r 

led_tris = 0x00;\r 

led_port = 0xFF;\r 

while(true)\r 

{\r 

key_scan();\r 

}\r 

}\r 

Project 15 : \u0010\u0001o t\u00d1\u001ec \u0011\u0001\u00d9\u001e ph\u00a3\u001en h\u00d3\u001ei v\u00c1\u001e Lcd\r 

________________________________________\r 

Ch\u00e0o c\u00e1c b\u00e1c.C\u00f3 ch\u00fat v\u00b0\u0001\u00db\u001eng m\u00af\u001ec,c\u00e1c b\u00e1c gi\u00fap em v\u00db\u001ei.\r 

M\u00e5\u001ec \u0011\u0001\u00edch:\u0010\u0001i\u00c1\u001eu khi\u00c3\u001en \u0011\u0001\u00d9\u001eng c\u00a1\u0001 ph\u00a3\u001en h\u00d3\u001ei t\u00d1\u001ec \u0011\u0001\u00d9\u001e v\u00c1\u001e LCD\r 

Th\u00f1\u001ec hi\u00c7\u001en:\u0010\u0001i\u00c1\u001eu khi\u00c3\u001en \u0011\u0001\u00b0\u0001\u00e3\u001ec \u0011\u0001\u00d9\u001eng c\u00a1\u0001 nh\u00b0\u0001ng ch\u00b0\u0001a ph\u00a3\u001en h\u00d3\u001ei \u0011\u0001c.\r 

Em kh\u00f4ng bi\u00bf\u001et sau m\u00d7\u001ei l\u00a7\u001en g\u00cd\u001ei ng\u00af\u001et c\u00f3 c\u00a7\u001en ph\u00a3\u001ei \u0011\u0001\u00c3\u001e 1 v\u00f2ng while() \u0011\u0001\u00c3\u001e \u0011\u0001\u00e3\u001ei ng\u00af\u001et kh\u00f4ng.\r 

Em d\u00f9ng 16F877A,b\u00e2y gi\u00dd\u001e \u0011\u0001i\u00c1\u001eu khi\u00c3\u001en 1 k\u00eanh \u0011\u0001\u00e3 ph\u00a3\u001ei c\u00a7\u001en:TIMER2-PWM,TIMER 0:\u0010\u0001\u00bf\u001em xung,TIMER1:\u0010\u0001\u00bf\u001em th\u00dd\u001ei gian,d\u00f9ng \u0011\u0001\u00c3\u001e t\u00ednh to\u00e1n v\u00ad\u001en t\u00d1\u001ec.\r 

V\u00ad\u001ey n\u00bf\u001eu em d\u00f9ng \u0011\u0001\u00d9\u001eng c\u00a1\u0001 th\u00e9\u001e 2 ph\u00a3\u001ei l\u00e0m th\u00bf\u001e n\u00e0o,c\u00f3 thu\u00ad\u001et to\u00e1n n\u00e0o ko \r 

PIC:16F877A\r 

Encoder:100xung\/v\u00f2ng\r 

Code:\r 

#include <16f877a.h>\r 

#include <def_877a.h>\r 

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT\r 

#use delay(clock=8000000)\r 

#include <lcd.c>\r 

float vantoc,soxung;\r 

int8 a,b,c,d,a1;\r 

int16 sovong,i;\r 

#int_TIMER1\r 

void TIMER1_isr(void) \r 

{ \r 

soxung=get_timer0(); \/\/Lay so xung Timer0 dem\r 

set_timer1(55535); \/\/ Trong 1ms\r 

if(tmr1if==1)\r 

{\r 

intcon=0; \/\/stop ngat\r 

a1=1;\r 

}\r 

}\r 

void main()\r 

{ \r 

trisa=255; \/\/Cho RA4 di vao\r 

trisb=0;\r 

trisc=0;\r 

trisd=0;\r 

lcd_init();\r 

lcd_gotoxy(1,1);\r 

lcd_putc("Beginning....");\r 

delay_ms(1000);\r 

lcd_putc('\\f');\r 

setup_timer_2(T2_DIV_BY_16,255,1);\r 

setup_ccp1(CCP_PWM);\r 

rd7=0; \/\/Mo role,quay theo 1 chieu\r 

for(i=0;i<1024;i++) \/\/0 la quay nhanh,1024 quay cham-->Do mach thiet ke.\r 

{\r 

set_pwm1_duty(i); \/\/ Toc do giam dan\r 

delay_ms(1);\r 

set_timer0(0);\r 

set_timer1(55535);\r 

setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1); \/\/Che do counter\r 

setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); \r 

enable_interrupts(INT_TIMER1);\r 

enable_interrupts(GLOBAL);\r 

delay_ms(50); \r 

if(a1==1) \r 

{\r 

\/\/while (1)\r 

\/\/{\r 

vantoc=((float)(60*soxung)\/(0.01*100)); \/\/Tinh van toc\r 

a=vantoc\/1000; \/\/Tach so..\r 

b=(int)(vantoc-1000*a)\/100;\r 

c=(int)(vantoc-1000*a-100*b)\/10;\r 

d=(int)vantoc%10;\r 

lcd_gotoxy(1,1); \/\/Hien thi\r 

lcd_putc(a+48);\r 

lcd_gotoxy(2,1);\r 

lcd_putc(b+48);\r 

lcd_gotoxy(3,1);\r 

lcd_putc(c+48);\r 

lcd_gotoxy(4,1);\r 

lcd_putc(d+48);\r 

lcd_gotoxy(6,1);\r 

lcd_putc("vong\/ph");\r 

lcd_gotoxy(3,2);\r 

lcd_putc("toc do dc");\r 

delay_ms(5); \/\/Vong for0->1024 nen delay it.\r 

tmr0if=0;tmr1if=0; \/\/Xoa tran\r 

}\r 

}}\r 

L\u00b0\u0001u \u0011\u0001\u00d3\u001e gi\u00a3\u001ei thu\u00ad\u001et g\u00d3\u001em: l\u00b0\u0001u \u0011\u0001\u00d3\u001e ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh ch\u00ednh, ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh qu\u00e9t ph\u00edm, ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh ng\u00af\u001et c\u00e7\u001ea timer1.\r 

\u00a7\u00f0 Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh ch\u00ednh l\u00e0 1 v\u00f2ng l\u00ad\u001ep v\u00f4 h\u00a1\u001en c\u00f3 nh\u00ef\u001eng ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh con nh\u00b0\u0001: qu\u00e9t ph\u00edm, check ph\u00edm, ch\u00cd\u001en ch\u00bf\u001e \u0011\u0001\u00d9\u001e, t\u00ednh PWM, nh\u00ad\u001ep d\u00ef\u001e li\u00c7\u001eu t\u00d1\u001ec \u0011\u0001\u00d9\u001e, nh\u00ad\u001ep d\u00ef\u001e li\u00c7\u001eu th\u00dd\u001ei gian, save v\u00e0o epprom.\r 

\u00a7\u00f0 Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh qu\u00e9t ph\u00edm th\u00c3\u001e hi\u00c7\u001en gi\u00a3\u001ei thu\u00ad\u001et nh\u00ad\u001en ph\u00edm nh\u00a5\u001en v\u00e0 nh\u00ad\u001en bi\u00bf\u001et gi\u00e1 tr\u00cb\u001e c\u00e7\u001ea ph\u00edm (ph\u00edm nh\u00a5\u001en l\u00e0 ph\u00edm n\u00e0o) .\r 

\u00a7\u00f0 Ch\u00b0\u0001\u00a1\u0001ng tr\u00ecnh ng\u00af\u001et timer 1 c\u00f3 t\u00e1c d\u00e5\u001eng c\u00ad\u001ep nh\u00ad\u001et gi\u00e1 tr\u00cb\u001e t\u00d1\u001ec \u0011\u0001\u00d9\u001e, t\u00ednh to\u00e1n gi\u00e1 tr\u00cb\u001e PWM, v\u00e0 xu\u00a5\u001et t\u00ednh hi\u00c7\u001eu \u0011\u0001\u00bf\u001en kh\u00d1\u001ei hi\u00c3\u001en th\u00cb\u001e.\r 

#include"E:\/TL\/DOAN2\\cauH\\MACH\\15\\main.h"\r 

#include <LCD.C>\r 

\/\/#include <math.h> \/\/dung cac ham toan hoc\r 

#use delay(clock=20000000)\r 

#use fast_io(a)\r 

#use fast_io(b)\r 

#use fast_io(c)\r 

#use fast_io(d)\r 

\/\/==================khai bao ham con=============\r 

int quetphim();\r 

int checkphim(b);\r 

void pwm();\r 

void ghi_tocdo();\r 

void ghi_thoigian();\r 

void clear();\r 

void read_rom();\r 

\/\/==================khai bao bien================\r 

int8 i,t,a,b,c,d,sttphim,duty,ct,l,m;\r 

int16 s_xung,s_vong,setpoint,error,luu,tg,tg1,dem;\r 

\/\/================ bien luu eeprom==============\r 

int8 e0,e1,e2,e3,j,k;\r 

int16 e;\r 

\/\/================chuong trinh quet phim==========\r 

\/\/quet phim so\r 

int quetphim()\r 

{\r 

output_b(0xe0);\/\/ B4=0\r 

a=0;\r 

b=1;\r 

checkphim(b);\r 

if (a!=0)\r 

{delay_ms(200);\r 

return (sttphim);}\r 

output_b(0xd0);\/\/ B5=0\r 

a=0;\r 

b=2;\r 

checkphim(b);\r 

if (a!=0)\r 

{delay_ms(200);\r 

return (sttphim);}\r 

output_b(0xb0);\/\/ B6=0\r 

a=0;\r 

b=3;\r 

checkphim(b);\r 

if (a!=0)\r 

{delay_ms(200);\r 

return (sttphim);}\r 

output_b(0x70);\/\/ B6=0\r 

a=0;\r 

b=4;\r 

checkphim(b);\r 

if (a!=0)\r 

{delay_ms(200);\r 

return (sttphim);}}\r 

\r 

\/\/============chuong trinh check phim=============\r 

int checkphim(b)\r 

{\r 

switch (b)\r 

{\r 

case 1:\r 

if(!input(pin_a0))\r 

{sttphim=1;\r 

a=1;}\r 

else if(!input(pin_a1))\r 

{sttphim=2;\r 

a=1;}\r 

else if(!input(pin_a2))\r 

{sttphim=3;\r 

a=1;}\r 

else if(!input(pin_a3))\r 

{ sttphim=10;\/\/thuan\r 

a=1;}\r 

else {}\r 

break;\r 

\r 

case 2:\r 

if(!input(pin_a0))\r 

{sttphim=4;\r 

a=1;}\r 

else if(!input(pin_a1))\r 

{sttphim=5;\r 

a=1;}\r 

else if(!input(pin_a2))\r 

{sttphim=6;\r 

a=1;}\r 

else if(!input(pin_a3))\r 

{sttphim=11;\/\/nghich\r 

a=1;}\r 

else {}\r 

break;\r 

case 3:\r 

if(!input(pin_a0))\r 

{sttphim=7;\r 

a=1;}\r 

else if(!input(pin_a1))\r 

{sttphim=8;\r 

a=1;}\r 

else if(!input(pin_a2))\r 

{sttphim=9;\r 

a=1;}\r 

else if(!input(pin_a3))\r 

{sttphim=12;\/\/stop\r 

a=1;}\r 

else {}\r 

break;\r 

\r 

case 4:\r 

if(!input(pin_a0))\r 

{sttphim=0;\/\/0\r 

a=1;}\r 

else if(!input(pin_a1))\r 

{sttphim=15;\/\/save\r 

a=1;}\r 

else if(!input(pin_a2))\r 

{sttphim=14;\/\/clear\r 

a=1;}\r 

else if(!input(pin_a3))\r 

{sttphim=13;\/\/set\r 

a=1;}\r 

else {}\r 

break;}\r 

return (sttphim);\r 

}\r 

\/\/ chuong trinh nhan xung tu encoder\r 

\/\/ngat ngoai, nhan xung tu encoder\r 

#int_ext\r 

void RB0_isr()\r 

{\r 

s_xung++;\/\/dem so xung o chan RB0\r 

}\r 

\/\/ngat timer1, tinh toan pwm va hien thi\r 

#int_timer1\r 

void timer1_isr()\r 

{\r 

set_timer1(-62500);\r 

if (t==5){\r 

S_vong=s_xung*2;\/\/xung tren phut\r 

\/\/ht\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

if(ct==1)\r 

{\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TD_dat=%lu v\/p",luu);}\r 

else {\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TG_dat=%lu s",tg);}\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

if (d==2)\r 

{lcd_gotoxy(1,2);\r 

printf(lcd_putc,"TD_tt=-%luv\/p",s_vong);}\r 

if (d==1)\r 

{lcd_gotoxy(1,2);\r 

printf(lcd_putc,"TD_tt= %luv\/p",s_vong);}\r 

\/\/=========================\r 

\/\/xuat pwm\r 

pwm();\r 

\/\/========================\r 

s_xung=0;\r 

s_vong=0;\r 

t=0;\r 

set_timer1(-62500);\r 

}\r 

else\r 

t++;\r 

set_timer1(-62500);\r 

}\r 

\/\/ngat timer0, dat thoi gian\r 

#int_timer0\r 

void time0_irs()\r 

{\r 

set_timer0(-235);\r 

if (dem>=tg1)\r 

{\r 

output_high(pin_e0);\r 

delay_us(100);\r 

output_low(pin_e0);\r 

dem=0;\r 

if (d==1)\r 

{d=2;}\r 

else if (d==2)\r 

{d=1;}\r 

else{}\r 

set_timer0(-235);\r 

}\r 

else {\r 

dem++;\r 

set_timer0(-235);}\r 

}\r 

\/\/chuong trinh chinh\r 

void main()\r 

{\r 

i=0;\r 

sttphim=0;\r 

setpoint=0;tg=0;\r 

duty=0;\r 

c=0;\r 

d=0;\r 

ct=0;l=0;m=0;\r 

e0=0;e1=0;e2=0;e3=0;e=0;k=0;\r 

\/\/============================================================\r 

\/\/1:ngo vao;0: la ngo ra\r 

set_tris_b(0b00001111);\/\/4 chan RB4-RB7 xuat du lieu ra ban phim\r 

set_tris_a(0b00001111);\/\/4 chan RA0-RA3 nhan du lieu tu ban phim\r 

set_tris_c(0b00000000);\/\/2 chan RC0 va RC1 xuat PWM\r 

set_tris_D(0b00000000);\/\/port D la port xuat du lieu ra LCD\r 

\/\/============================================================\r 

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);\r 

\/* timer1 la bo dinh thoi su dung xung noi,bo chia 1:8 thay doi moi 1600ns\r 

Dung timer1 de ngat moi 0.1s do vay ta dat gia tri cho timer1 la :\r 

0.1s\/1600ns=62500(D)=F424(H) =>gia tri nap la FFFF-F424=BDB*\/\r 

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);\r 

enable_interrupts(int_ext);\/\/khoi dong ngat ngoai\r 

ext_int_edge(H_TO_L); \/\/ xung tu cao xuong thap\r 

enable_interrupts(global);\/\/ khoi dong bit ngat GIE\r 

setup_timer_2(T2_DIV_BY_4,249,1);\r 

\/*timer2 dung dinh thoi cho bo PWM\r 

mode: bo chia thoi gian (prescale) cua timer2 1:4\r 

period: gia tri nap chi thanh ghi PR2\r 

postscale : bo chi ra,chon 1:1 PWM khong dung\r 

Thach anh 20MHz, PWM fre: 10000Hz, thay doi duty cycle(%) de thay doi toc do*\/\r 

setup_ccp1(CCP_PWM);\r 

setup_ccp2(CCP_PWM);\r 

set_pwm1_duty(0);\r 

set_pwm2_duty(0);\r 

\/\/===========================================================\r 

lcd_init()\r 

lcd_send_byte(0,0x01);\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"CHUONG TRINH DK ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," TD DONG CO DC ");\r 

delay_ms(1000);\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

read_rom();\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"CHON CHE DO :_ ");\r 

while (true)\r 

{\r 

while (c==0)\r 

{\r 

quetphim();\r 

if (a!=0)\r 

{\r 

if (sttphim==1)\r 

{ ct=1;\r 

c=1;\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"CHON CHE DO :_%u",ct);}\r 

if (sttphim==2)\r 

{ ct=2;\r 

c=1;\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"CHON CHE DO :_%u",ct);}\r 

}\r 

}\r 

if (ct==1)\r 

{lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TD_dat=_ v\/p");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc,"TD_luu=%lu v\/p",e);}\r 

else {\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TD_dat=_ v\/p");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc,"TG_dat=_ s");}\r 

While (c==1)\r 

{\r 

quetphim();\r 

\r 

if (a!=0)\r 

{\r 

if (sttphim>=0 && sttphim<=9)\/\/ban phim tu 0--->9\r 

{\r 

if (m==0)\r 

{ghi_tocdo();}\r 

if((ct==2)&&(m==1))\r 

{ghi_thoigian();}\r 

}\r 

if (sttphim==14)\r 

{clear();}\r 

if ((sttphim==13)&&(i==0)&&(e==0))\r 

{\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"Phai nhap TD_dat");\r 

delay_ms(1000);\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TD_dat=_");\r 

}\r 

if ((sttphim==15)&&(i!=0)) \/\/luu vao eeprom\r 

{\r 

write_eeprom(0,e0);\r 

delay_ms(100);\r 

write_eeprom(1,e1);\r 

delay_ms(100);\r 

write_eeprom(2,e2);\r 

delay_ms(100);\r 

write_eeprom(3,e3);\r 

delay_ms(100);\r 

write_eeprom(4,i);\r 

delay_ms(100);\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," LUU THANH CONG ");\r 

}\r 

if ((sttphim==13)&&((i!=0)||(e!=0)))\r 

{\r 

if (ct==1)\r 

{\r 

c=2;\r 

if (e!=0 && i==0)\r 

luu=e;}\r 

if ((ct==2)&&(l>=2))\r 

{\r 

c=2;}\r 

m=1;\r 

}}}\r 

while (c==2)\r 

{\r 

quetphim();\r 

if(a!=0)\r 

{\r 

if(sttphim==10)\r 

{\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," QUAY THUAN ");\r 

if (ct==2)\r 

{enable_interrupts(int_timer0);\r 

set_timer1(-235);}\r 

enable_interrupts(int_timer1);\r 

enable_interrupts(global);\r 

set_timer1(-62500);\r 

set_pwm1_duty(duty);\r 

d=1;\r 

}\r 

if (sttphim==11)\r 

{\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," QUAY NGHICH ");\r 

if (ct==2)\r 

{enable_interrupts(int_timer0);\r 

set_timer1(-235);}\r 

enable_interrupts(int_timer1);\r 

enable_interrupts(global);\r 

set_timer1(-62500);\r 

set_pwm2_duty(duty);\r 

d=2;\r 

}\r 

if (sttphim==12)\/\/stop\r 

{\r 

disable_interrupts(int_timer0);\r 

set_timer0(0);\r 

disable_interrupts(int_timer1);\r 

set_pwm1_duty(0);\r 

set_pwm2_duty(0);\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," STOP ");\r 

duty=0;\r 

d=0;\r 

}\r 

if (sttphim==14)\r 

{\r 

clear();\r 

c=0;\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"CHON CHE DO :_ ");\r 

}}}}}\r 

\r 

\r 

void pwm()\r 

{\r 

if ((luu>s_vong)&& duty<250)\r 

{error=luu-s_vong;\r 

if (error>1000)\r 

duty=duty+50;\r 

else if (error>100)\r 

duty=duty+20;\r 

else if (error>30)\r 

{duty=duty+5;}\r 

else if (error>20)\r 

duty=duty+1.5;\r 

else if (error>10)\r 

duty=duty+(0.05*error);\r 

else {duty=duty+(0.025*error);}\r 

}\r 

if (luu<(s_vong-2)&& (duty>0))\r 

{error=s_vong-luu;\r 

if (error>=10)\r 

duty=duty-(0.05*error);\r 

else (duty=duty-(0.02*error));\r 

}\r 

if(luu==s_vong)\r 

duty=duty;\r 

if((duty>=250)&&(luu>s_vong))\r 

{ lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," TD_tt=MAX ");}\r 

if (d==0)\r 

{set_pwm1_duty(0);\r 

set_pwm2_duty(0);}\r 

else if (d==1)\r 

{set_pwm1_duty(duty);\r 

set_pwm2_duty(0);}\r 

else\r 

{set_pwm1_duty(0);\r 

set_pwm2_duty(duty);}\r 

}\r 

\/\/========chuong trinh con nhap toc do=======\r 

void ghi_tocdo()\r 

{\r 

if(i>=0&&i<=3)\r 

{\r 

\/\/ giai thuat luu eeprom\r 

if (i==0)\r 

e0=sttphim;\r 

else if (i==1)\r 

e1=sttphim;\r 

else if (i==2)\r 

e2=sttphim;\r 

else {e3=sttphim;}\r 

\/\/===============================\r 

setpoint*=10;\r 

setpoint+=sttphim;\r 

i++;\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TD_dat=%lu v\/p",setpoint);\r 

luu=setpoint;\r 

}\r 

else {\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"0<TD_dat<=9999");\r 

delay_ms(1000);\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TD_dat=%lu s",setpoint);\r 

}}\r 

\/\/=========chuong tr\u00ecnh con nhap thoi gian=========\r 

void ghi_thoigian()\r 

{\r 

if(l>=0&&l<=3)\r 

{\r 

tg*=10;\r 

tg+=sttphim;\r 

l++;\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc,"TG_dat=%lu s",tg);\r 

tg1=tg\/0.12;\r 

}\r 

else {\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," 0<TG_dat<=999 ");\r 

delay_ms(1000);\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc,"TG_dat=%lu s",tg);\r 

}}\r 

\/\/============chuong trinh con clear=========\r 

void clear()\r 

{\r 

setpoint=0;\r 

tg=0;\r 

i=0;l=0;m=0;\r 

e0=0;e1=0;e2=0;e3=0;\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,1);\r 

printf(lcd_putc,"TD_dat=_");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc," ");\r 

lcd_gotoxy(1,2);\r 

printf(lcd_putc,"TG_dat=_");\r 

}\r 

\/\/=======chuong trinh con luu toc do vao epprom======\r 

void read_rom()\r 

{\r 

k=read_eeprom(4);\r 

for (j=0;j<k;j++)\r 

{\r 

e=e*10;\r 

e=e+read_eeprom(j);\r 

}}\r 

\/\/==========THE END========

Bạn đang đọc truyện trên: Truyen2U.Pro