Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 37 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
37
Dung lượng
639,88 KB
Nội dung
ĐẠ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