GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 - CHƯƠNG 4 pdf

37 1K 14
GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 - CHƯƠNG 4 pdf

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 1 of 37 CHƯƠNG 4: ỨNG DỤNG NGÔN NGỮ C CHO HỌ VI ĐIỀU KHIỂN 8051 LẬP TRÌNH ĐIỀU KHIỂN I. ĐIỀU KHIỂN LED ĐƠN VÀ LED 7 ĐOẠN. 1. Điều khiển Led đơn. a. Ứng 1 led đơn để phát xung với tần số 10hz tại chân P1^0. #include <at89c51xd2.h> sbit led=P1^0; //gán led là bit P1^0. void delay() //chương trình con delay { TMOD=0x01; //khai báo timer 0 chế độ 16 bit. TH0=0xC350; //nạp giá trị cho thanh ghi 50000 phập phân TL0=0xC350; TR0=1; //cho phép timer 0 hoạt động while(!TF0); //kiểm tra cờ tràn TF0 ở mức không TF0=0; //xóa cờ tràn TR0=0; //không cho phép timer 0 hoạt động } main() //chương trình chính { while(1) //vòng lập vô tận { led=1; //led lên mức 1 delay(); //trì hoãn 50ms led=0; //led xuống mức 0 delay(); //trì hoãn 50ms } } ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 2 of 37 Chương trình đã được thực hiện và mô phỏng Bài tập mở rộng về nhà. - Xuất tín hiệu phát xung 1Hz trên chân P3.0 - Xuất tín hiệu phát xung 100Hz trên port 1 - Xuất tín hiệu phát xung 1KHz trên 4 port ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 3 of 37 b. Điều khiển 8 led đơn sáng tắt từ phải qua trái ở port 1. #include <at89c51xd2.h> void delay_1(s) { unsigned int f,t; for(f=0;f<s;f++) for(t=0;t<20;t++) { TMOD=0x01; TH0=0xC350; TL0=0xC350; TR0=1; while(!TF0); TF0=0; TR0=0; } } main() { while(1) { unsigned int y; P1=0x01; //cho bit đầu tiên của port 1 sáng delay_1(1); //delay 1s for(y=0;y<8;y++) //vòng lặp for với điều kiện 8 lần { P1=P1<<1; //dịch trái port 1 đi 1 bit delay_1(1); } } } ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 4 of 37 c. Điều khiển 16 led đơn tắt dần từ phải qua trái ở port 1 và 2. #include <at89c51xd2.h> void delay_1(s) { unsigned int f,t; for(f=0;f<s;f++) for(t=0;t<20;t++) { TMOD=0x01; TH0=0xC350; TL0=0xC350; TR0=1; while(!TF0); TF0=0; TR0=0; } } main() { while(1) { unsigned int y,w; P1=0xff; //cho P1 sáng P2=0xff; delay_1(1); for(y=0;y<8;y++) { P1=P1<<1; //làm vòng lặp biến y, P1 xoay đủ 8 bit delay_1(1); } ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 5 of 37 for(w=0;w<8;w++) { P2=P2<<1; //làm vòng lặp biến w, P2 xoay đủ 8 bit delay_1(1); } } } d. Bài tập. - 8 Led sáng tắt từ trái qua phải với port 3 - 8 Led sáng tắt từ phải qua trái với port 1 - 16 Led sáng tắt từ trái qua phải với port 0, port 1 - 32 Led sáng tắt từ phải qua trái với 4 port. - Led sáng dần từ trái qua phải với port 3 - 8 Led sáng dần từ phải qua trái với port 0 - 16 Led sáng dần từ trái qua phải với port 0, port 1 - 32 Led sáng dần từ trái qua phải với 4 port - Led sáng dần từ trái qua phải và tắt dần từ trái qua phải với port 3 - 8 Led sáng dần từ phải qua trái và tắt dần từ trái qua phải với port 0 - 16 Led sáng dần từ trái qua phải và tắt dần từ phải qua trái với port 0, port 1 - 32 Led sáng dần từ trái qua phải và tắt dần từ phải qua trái với 4 port 2. Điều khiển Led 7 đoạn. Mã của Led 7 đoạn loại cathode chung Các đoạn của Led 7 đoạn H G F E D C B A Số Mã hex 0 0 1 1 1 1 1 1 0 3FH 0 0 0 0 0 1 1 0 1 06H 0 1 0 1 1 0 1 1 2 5BH 0 1 0 0 1 1 1 1 3 4FH 0 1 1 0 0 1 1 0 4 66H 0 1 1 0 1 1 0 1 5 6DH 0 1 1 1 1 1 0 1 6 7DH 0 0 0 0 0 1 1 1 7 07H 0 1 1 1 1 1 1 1 8 7FH 0 1 1 0 1 1 1 1 9 6FH Mã của Led 7 đoạn loại Anode chung ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 6 of 37 Các đoạn của Led 7 đoạn H G F E D C B A Số Mã hex 1 1 0 0 0 0 0 0 0 C0H 1 1 1 1 1 0 0 1 1 F9H 1 0 1 0 0 1 0 0 2 A4H 1 0 1 1 0 0 0 0 3 B0H 1 0 0 1 1 0 0 1 4 99H 1 0 0 1 0 0 1 0 5 92H 1 0 0 0 0 0 1 0 6 82H 1 1 1 1 1 0 0 0 7 F8H 1 0 0 0 0 0 0 0 8 80H 1 0 0 1 0 0 0 0 9 90H a. Chương trình điều khiển 1 Led 7 đoạn đếm từ 0 đến 9 với port 1 #include <at89c51xd2.h> #define data_led7 P1 #define Aled1 P3_0 void delay_1(s) { unsigned int f,t; for(f=0;f<s;f++) for(t=0;t<20;t++) { TMOD=0x01; TH0=0xC350; TL0=0xC350; TR0=1; while(!TF0); TF0=0; TR0=0; } } void main() { unsigned char code maled7[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 7 of 37 int D; P1 = 0xff; P3 = 0xff; D = 0; while(1) { data_led7 = maled7[D]; delay_1(1); D++; if (D == 10) D = 0; } } Bài tập mở rộng về nhà. - Điều khiển 1 Led 7 đoạn đếm từ 0 đến 9 với port 3 - Điều khiển 1 Led 7 đoạn đếm chẵn 0,2,4,6,8 với port 3 - Điều khiển 1 Led 7 đoạn đếm lẻ 1,3,5,7,9 với port 3 - Điều khiển 1 Led 7 đoạn đếm từ 0 đến 9 sau đó đếm lẻ sau đó đếm chẵn, chương trình đếm bắt đầu bằng nút Start với port 3 b. Chương trình điều khiển 2 Led 7 đoạn đếm từ 0 đến 99 với port 0,1 #include <at89c51xd2.h> #define data_led7 P1 #define Aled1 P0_0 #define Aled2 P0_1 unsigned char led1,led2; bit flag; int count; void delay_1ms(){ TH1=0xFB; TL1=0x00; ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 8 of 37 TR1=1; while(1){ if(TF1==1) break; } TR1=0; TF1=0; } void delay(unsigned char t) { int i; for(i=0;i<t;i++) delay_1ms(); } void delay_us(int x) { int i; for (i=0;i<x;i++) {} } void convert_bcd( int x) { int temp2; temp2 = x; led2 = temp2 / 10; led1 = temp2 % 10; } // HIEN THI LED void display() { ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 9 of 37 unsigned char code maled7[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; data_led7 = maled7[led1]; Aled1 = 0; delay_us(50); flag = 1; Aled1 = 1; data_led7 = maled7[led2]; Aled2 = 0; delay_us(50); Aled2 = 1; } void main() { unsigned char dem; P1 = 0xff; P0 = 0xff; count = 0; convert_bcd(count); while(1) { convert_bcd(dem); display(); if (flag == 1) {flag = 0;count++;} if (count == 10) {dem++;count = 0;} } } Bài tập mở rộng về nhà. - Điều khiển 2 Led 7 đoạn đếm từ 0 đến 80 với port 0,1 - Điều khiển 2 Led 7 đoạn đếm chẵn 0,2,4,6,8…90 với port 0,1 - Điều khiển 2 Led 7 đoạn đếm lẻ 1,3,5,7,9….95 với port 0,1 ĐẠI HỌC LẠC HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 10 of 37 c. Chương trình điều khiển 4 Led 7 đoạn đếm từ 0 đến 9999 với port 0,1 #include <at89c51xd2.h> #define data_led7 P1 #define Aled1 P0_0 #define Aled2 P0_1 #define Aled3 P0_2 #define Aled4 P0_3 unsigned char led1,led2,led3,led4; bit flag; int count; void delay_1ms(){ TH1=0xFB; TL1=0x00; TR1=1; while(1){ if(TF1==1) break; } TR1=0; TF1=0; } void delay(unsigned char t) { int i; for(i=0;i<t;i++) delay_1ms(); } void delay_us(int x) { [...]... L P TRèNH C CHO H VI I U KHI N 8051 I U KHI N LCD Giao ti p v i LCD S nguyờn lý VCC_CIRCLE VCC_CIRCLE U2 J1 9 1 2 10 RST 19 1 AT8 9C5 1 GND D0 D1 D2 D3 D4 D5 D6 D7 A1 A2 A3 21 22 23 24 25 26 27 28 1 2 3 11 12 13 14 15 16 17 30 29 4 5 6 7 8 9 10 11 12 13 14 RS R/W EN DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 VCC A K GND VR 16 1 CON2 3 VCC_CIRCLE 2 VCC P3.0/RXD SW PUSHBUTTON R3 R XTAL2 C1 CAP P1.3 P1 .4 P1.5 P1.6... LCDWriteData(unsigned char c) { RS=1; RW=0; LCD_PORT =c; EN=1; EN=0; delay_5ms(); } void LCD_init() { delay_15ms(); LCDWriteCmd(0x30); LCDWriteCmd(0x30); LCDWriteCmd(0x30); LCDWriteCmd(0x38); LCDWriteCmd(0x 0C) ; // LCDWriteCmd(0x06); LCDWriteCmd(0x01); // Xoa man hinh LCD } void LCD_clear() { LCDWriteCmd(0x01); } void LCD_home() { LCDWriteCmd(0x80); } void LCD_putstr(unsigned char *s) { while (*s) { LCDWriteData(*s);... J3 U4 ULN28 04 H5 Q13A MATRAN 8X8 R7 2 1 M6 H6 Q14A VCC_12V R8 2 J5 1 M7 VCC GND 1 2 M1 M2 M3 M4 M5 M6 M7 M8 VCC GND 1 2 3 4 5 6 7 8 10 9 IN1 IN2 IN3 IN4 IN5 IN6 IN7 IN8 COM GND OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8 18 17 16 15 14 13 12 11 1 2 3 4 5 6 7 8 ROW H7 Q15A R9 2 12VDC 1 M8 H8 Q16A VCC C c hng v c a qua IC m 2803 Led ma tr n c hai mu xanh v C 8 ng i u khi n hng, 8 ng i u khi n c t mu... s c p i n cho SOL2 i u khi n 4 xy lanh ngoi i vo ộp ni ng xe Sau kho ng th i gian ó t cho TIMER, c c ti p i m c a TIMER s i tr ng thỏi ng t i n R2 ng th i úng i n c p cho R3, do tớnh ch t c a van o chi u khi ú SOL2 s b m t i n v i u khi n 4 xy lanh ngoi i v Khi R3 c i n, SOL1 s m t i n v i v lm ti p i m c a c ng t c hnh trỡnh tr v tr ng thỏi th ng h ban u L c ny c ph n m ch trờn v ph n m ch d i c ng... Piston C rỳt lờn Cu i c ng Piston B lựi v v th c hi n xong m t chu k BI U DI N BI U TR NG THI QUI TRèNH: Biờn so n: Nguy n Bỏ Thu n Page 12 of 37 I H C L C H NG GIO TRèNH L P TRèNH C CHO H VI I U KHI N 8051 CHNG TRèNH I U KHI N H TH NG TRấN B NG VI I U KHI N (tớn hi u t c cu n coil) ng ngừ vo t c ng m c 0 v ngừ ra t c ng m c 0, gi s van 5/2, 2 Phõn tớch: c 7 ngừ vo g m 1 nỳt nh n Start, 6 c ng t c hnh... Page 15 of 37 I H C L C H NG 3 MY D P T GIO TRèNH L P TRèNH C CHO H VI I U KHI N 8051 NG YấU C U C A QUI TRèNH C NG NGH Mỏy d p s d p chi ti t Trỡnh t d p s Piston A i ra c th c hi n nh sau: y chi ti t t ph u c p phụi vo v trớ gỏ t chi ti t v th c hi n k p ch t Piston B i ra i ra ti n hnh d p chi ti t Khi l c d p ó Sau ú Piston A quay v thỏo chi ti t Sau khi chi ti t c thỏo ra, Piston C i ra ti n hnh... L P TRèNH C CHO H VI I U KHI N 8051 11 Mễ HèNH C P PHễI T NG TRấN MY TI N YấU C U C A QUI TRèNH C NG NGH : Khi úng c u dao i n v khớ nộn Piston A i ra y mỏng c p phụi v phớa mõm c p, cu i hnh trỡnh Piston g p c m bi n B2 (t o ra xung), thỡ Piston B i ra y phụi vo mõm c p, ng th i c m bi n B4 thỡ Piston C rỳt v k p chi ti t cu i hnh trỡnh Piston C c m bi n B5, thỡ c hai Piston A v B lựi v (c m bi n B1... of 37 I H C L C H NG 13 14 15 16 GIO TRèNH L P TRèNH C CHO H VI I U KHI N 8051 DB6 DB7 A K I/O I/O - Bus d li u 8 bit Bus d li u 8 bit Ngu n 5V t Mó l nh LCD: Mó (Hex) 1 2 4 6 5 7 8 A C E F 10 14 18 1C 80 C0 38 L nh thanh ghi LCD Xúa mn hỡnh hi n th Tr v u dũng D ch con tr sang trỏi D ch con tr sang ph i D ch hi n th sang ph i D ch hi n th sang trỏi T t con tr , t t hi n th T t hi n th , b t con tr B... maled7[led4]; Aled4 = 0; delay_us(50); Aled4 = 1; } void main() { unsigned char dem; Biờn so n: Nguy n Bỏ Thu n Page 11 of 37 I H C L C H NG GIO TRèNH L P TRèNH C CHO H VI I U KHI N 8051 P1 = 0xff; P0 = 0xff; count = 0; convert_bcd(count); while(1) { convert_bcd(dem); display(); if (flag == 1) {flag = 0;count++;} if (count == 10) {dem++;count = 0;} } } Bi t p m r ng v nh - mt 0 - i u khi n 4 Led 7 o n m ch... chi ti t vo mỏng ch a v quay v TR NG THI QUI TRèNH: Biờn so n: Nguy n Bỏ Thu n Page 16 of 37 I H C L C H NG GIO TRèNH L P TRèNH C CHO H VI I U KHI N 8051 4 MY MI PH NG YấU C U C A QUI TRèNH C NG NGH : Mỏy mi s th c hi n c c chy n ng sau: Khi kh i ng Pitton A mang chi ti t mi c k p ch t trờn bn t t ti n n v trớ mi sau ú Piston B th c hi n ti n hnh mi chi ti t, v i hnh trỡnh ti n v lựi Sau khi th c . ĐẠI H C L C HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 1 of 37 CHƯƠNG 4: ỨNG DỤNG NGÔN NGỮ C CHO HỌ VI ĐIỀU KHIỂN 8051 LẬP TRÌNH ĐIỀU KHIỂN. THÁI QUI TRÌNH : ĐẠI H C L C HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 13 of 37 CHƯƠNG TRÌNH ĐIỀU KHIỂN HỆ THỐNG TRÊN BẰNG VI ĐIỀU KHIỂN (tín. ĐẠI H C L C HỒNG GIÁO TRÌNH LẬP TRÌNH C CHO HỌ VI ĐIỀU KHIỂN 8051 Biên soạn: Nguyễn Bá Thuận Page 10 of 37 c. Chương trình điều khiển 4 Led 7 đoạn đếm từ 0 đến 9999 với port 0,1 #include

Ngày đăng: 27/07/2014, 11:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan