Một Số Bài Toán Ứng Dụng Cho Trình biên dịch Keil C
lượt xem 57
download
Điều khiển Led đơn, Led 7 thanh và nút nhấn I. Hiển thị Led đơn Bài toán:Ghép nối LED dơn với chân P1.0 của vi điều khiển, viết chương trình điều khiển LED nhấp nháy với thời gian trễ là 1s.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Một Số Bài Toán Ứng Dụng Cho Trình biên dịch Keil C
- Một Số Bài Toán Ứng Dụng Cho Trình biên dịch Keil C (compiler) Điều khiển Led đơn, Led 7 thanh và nút nhấn I. Hiển thị Led đơn Bài toán:Ghép nối LED dơn với chân P1.0 của vi điều khiển, viết chương trình điều khiển LED nhấp nháy với thời gian trễ là 1s. + Lưu đồ thuật toán của bài LED nháy:
- START Khởi tạo hệ thống Sáng Led Trễ 1S Tắt Led Trễ 1S + Chương trình điều khiển: */==================Bo tien xu li===================*/ #include // Dinh kem file thu vien #define bat 1 // Dinh nghia gia tri bat den Led #define tat 0 // Dinh nghia gia tri tat den Led /*==================khai bao bien==================*/ sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0 void delay(long time) { while(time--); } /*--------------------------------ham chinh--------------------------------*/ void main(void) { while(1) { Led = bat; // bat Led delay(25000); // tre 1s Led = tat; // tat Led
- delay(25000); //tre 1s } } II. Phối hợp Led và nút nhấn 1. Phối hợp Led đơn và nút nhấn Bài toán: Một đèn Led được nối với chân P1.0 của vi điều khiển. Một công tắc START nối với chân P3.0 và công tắc STOP nối với chân P3.1 của vi điều khiển. hãy viết chương trình điều khiển để khi bật công tắc START thì Led sáng, khi bật công tắc STOP thì Led tắt. + Lưu đồ thuật giải của bài toán:
- Start Led = tat Start = Led = bat 0 Led = tat Stop = 0 + Chương trình điều khiển: */==================Bo tien xu li===================*/ #include // Dinh kem file thu vien #define bat 1 // Dinh nghia gia tri bat den Led #define tat 0 // Dinh nghia gia tri tat den Led /*==================khai bao bien==================*/ sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0 sbit STOP = P3^0; // cong tac STOP de tat Led sbit START = P3^1; // cong tac START de bat Led /*=================== ham chinh==================*/ void main(void) { Led = tat; //ban dau tat Led while(1){ if((START==0)&&(STOP==1)) { Led = bat;
- } if((START==1)&&(STOP==0)){ Led = tat; } } } 2. Phối hợp Led 7 thanh và nút nhấn Các số P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 số nạp hex hiển g f e d c b a dp mov P1,# thị 0 1 0 0 0 0 0 0 1 81 1 1 1 1 1 0 0 1 1 cf 2 0 1 0 0 1 0 0 1 92 3 0 1 1 0 0 0 0 1 86 4 0 0 1 1 0 0 1 1 cc 5 0 0 1 0 0 1 0 1 a4 6 0 0 0 0 0 1 0 1 a0 7 1 1 1 1 0 0 0 1 8f 8 0 0 0 0 0 0 0 1 80 9 0 0 1 0 0 0 0 1 84 Bài toán: Một Nút bấm được nối với chân P3.4, hãy lập trình điều khiển đếm số lần ấn phím từ 0 đến 9 và hiển thị trên Led 7 thanh.
- + Lưu đồ thuật giải: START Dem=0; ctac==0? dem++; dem
- + Chương trình điều khiển: /*==================Bo tien xu li===================*/ #include // Dinh kem file thu vien /*=================Khai bao bien toan cuc=============*/ sfr dataP = 0x90; // du lieu la P1 // ma 7 thanh tu 0 den 9 la // 0x81h,0xcfh,0x92h,0x86h,0xcch,0xa4,0xa0h,0x8fh,0x80h,0x84h. sbit ctac = P3^4; unsigned char dem=0; /*====================Khai bao ham==================*/ /*----------------------------ham delay========================*/ void delay(long time) { while(time--); } /*----------------------chuong trinh con kiem tra co phim nhan-------------*/ void phim_an(void) { if(ctac==0) //co phim nhan { delay(500); //chong rung phim while(ctac==0); //Cho nha phim delay(500); // chong rung phim dem++; //tang bien dem if(dem==10) dem=0; } } /*----------------hien thi so lan an phim------------------------------------------*/ void solan_an(void) {
- switch(dem) { case 0: {dataP=0x81;break;} case 1: {dataP=0xcf;break;} case 2: {dataP=0x92;break;} case 3: {dataP=0x86;break;} case 4: {dataP=0xcc;break;} case 5: {dataP=0xa4;break;} case 6: {dataP=0xa0;break;} case 7: {dataP=0x8f;break;} case 8: {dataP=0x80;break;} case 9: {dataP=0x84;break;} }; } /*-------------------------chuong trinh chinh-------------------------------------------*/ void main(void) { dataP = 0x81; // ban dau la so 0 while(1){ phim_an(); solan_an(); } }
- Bài 3 Hiển thị LCD, Giao tiếp bàn phím Hex, Hiển thị ma trận Led I. LCD 1. Ghép nối vi điều khiển với LCD 16x2. - Bảng mô tả sơ đồ chân của LCD 16x2: Chân Ký hiệu I/O Mô tả 1 Vss - Mass 2 Vcc - Dương nguồn 5v 3 VEE - Cấp nguồn điều khiển tương phản 4 RS I RS=0 chon thanh ghi lệnh RS=1 chon thanh ghi dữ liệu 5 R/W I R/W=1 đọc dữ liệu, R/W=0 ghi 6 E I/O Cho phép 7 DB0 I/O Bit dữ liệu 8 DB1 I/O Nt 9 DB2 I/O Nt 10 DB3 I/O Nt 11 DB4 I/O Nt 12 DB5 I/O Nt 13 DB6 I/O Nt 14 DB7 I/O Nt Chân 15 và 16 là A và K. Nó được nối với 2 chân của 1 con Led dùng để sáng LCD trong bóng tối chúng ta không sử dụng. - Sơ đồ ghép nối LCD với vi điều khiển:
- 2. Nguyên lí hoạt động của LCD. - Chân VCC, Vss, và VEE: các chân VCC và VSS cáp dương nguồn 5v và mass tương ứng. Chân VEE được dùng để điều khiển độ tương phản. - Chân chọn thanh ghi RS(Register Select): có 2 thanh ghi trong LCD chân RS được dùng để chọn thanh ghi. nếu RS=0 thì thanh ghi mã lệnh được chọn để cho phép người dùng gửi 1 lệnh lên chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng… Nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị lên LCD. - Chân đọc/ghi (R/W): đầu vào đọc/ghi cho phép người dùng đọc thông tin từ LCD khi R/W=1 hoặc ghi thông tin lên LCD. - Chân cho phép E(Enable): chân cho phép được sử dụng bởi LCD để chốt dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì 1 xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung này có độ rộng tối thiểu 450ns. - Chân DB0-DB7: đây là đường dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội dung các thanh ghi trong LCD. Để hiển thị các chữ cái và các con số, chúng ta gửi mã ASCII của các chữ cái từ A đến Z , a đến z và các chữ số từ 0 đến 9 đến các chân này khi bật RS=1. - Bảng mã lệnh của LCD:
- Mã (HEX) Lệnh đến thanh ghi của LCD 01 Xoá màn hình hiển thị 02 Trở về đầu dòng 04 Giảm con trỏ(dịch con trỏ sang trái ) 06 Tăng con trỏ(dịch con trỏ sang phải) 05 Dịch hiển thị sang phải 07 Dịch hiển thị sang trái 08 Tắt con trỏ, tắt hiển thị 0a Tắt hiển thị, bật con trỏ 0c Bật hiển thi, tắt con trỏ 0e Bật hiển thị, nhấp nháy con trỏ 0f Tắt con trỏ, nhấp nháy con trỏ 10 Dịch vị trí con trỏ sang trái 14 Dịch vị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1c Dịch toàn bộ hiển thị sang phải 80 Ép con trỏ về đầu dòng thứ nhất 0c0 Ép con trỏ về đầu dòng thứ 2 38 Hai dòng và ma tận 5x7. 3. Phần luyện tập: Hãy viết chương trình hiển thị trên LCD: Dòng 1 chữ “VIETNAM” bằng cách hiển thị tưng kí tự Dòng 2 chữ "VI DIEU KHIEN" bằng cách hiển thị cả chữ. Với sơ đồ mạch cho dướí đây.
- Chương trình: /*=========bo tien xu li===============*/ #include #include /*===========khai bao bien toan cuc============*/ sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu. sbit BF = 0xA7; // co ban, bit DB7. sbit RS = P3^0; // chon thanh ghi sbit RW = P3^1; // doc/ghi sbit EN = P3^2; //cho phep chot du lieu /*===========cac chuong trinh con cua LCD==========*/ /*--------------kiem tra su san sang cua LCD------------------------*/ void delay(unsigned int ms) { unsigned char k; while (ms--) { for (k = 0; k < 114; k++); } } void wait(void) { RS=0; RW=1; LCDdata=0xff; while(BF) { EN=0; EN=1; } } /*------------------------thiet lap lenh cho LCD--------------------------*/
- void LCDcontrol(unsigned char x) { RS=0;//chon thanh ghi lenh RW=0;//ghi len LCD. LCDdata=x ;// gia tri x EN=1;//cho phep muc cao EN=0;//xung cao xuong thap wait();//đoi LCD san sang. } /*------------------------------Khoi tao LCD-------------------------*/ void LCDinit(void) { LCDcontrol(0x38);//2 dong va ma tran 5x7 LCDcontrol(0x0e);//bat man hinh, bat con tro LCDcontrol(0x01);//xoa man hinh } /*-------------------------thiet lap du lieu cho LCD-----------------*/ void LCDwrite(unsigned char c) { RS=1;//ghi du lieu RW=0;//ghi du lieu len LCD LCDdata=c;//gia tri C EN=1;//cho phep muc cao EN=0;//xung cao xuong thap wait();//cho } void LCDwrites(unsigned char *s) { unsigned char data lens,count; lens=strlen(s);// lay do dai bien duoc tro boi con tro for(count=0;count
- LCDwrite(*(s+count)); } } /*=====================chuong trinh tre================*/ /*========================ham chinh==================*/ void main(void) { LCDinit(); // khoi tao LCD LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1 LCDwrite(‘V’); LCDwrite(‘I’); LCDwrite(‘E’); LCDwrite(‘T’); LCDwrite(‘ ’); LCDwrite(‘N’); LCDwrite(‘A’); LCDwrite(‘M’); LCDcontrol(0xC0);//dua con tro ve dau dong thu 2 LCDwrites("VI DIEU KHIEN"); while(1); //vong lap vo han } II. Giao tiếp bàn phím Hex (ma trận phím 4x4) 1. Thuật toán đọc bàn phím Begin Cộti = 0 (i=1-4) Sai Hàngi = 0 (i =1-4)
- Đúng Trả lại kết quả phím đã nhấn 2. Chương trình Hãy viết chương trình đọc ma trận phím và hiển thi số thứ tự phím trên LCD. Chương trình: /*=========bo tien xu li===============*/ #include #include #define H1 P1_0 #define H2 P1_1 #define H3 P1_2 #define H4 P1_3 /*===========khai bao bien toan cuc============*/ sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu. sbit BF = 0xA7; // co ban, bit DB7.
- sbit RS = P3^0; // chon thanh ghi sbit RW = P3^1; // doc/ghi sbit EN = P3^2; //cho phep chot du lieu /*chuong trinh con*/ void wait(void) { RS=0; //chon thanh ghi lenh RW=1; //đoc tu LCD LCDdata=0xff; //gia tri 0xff while(BF) //kiem tra co ban { EN=0; //dua xung cao xuong thap đe chot. EN=1; //dua chan cho phep len cao } } /*------------------------thiet lap lenh cho LCD--------------------------*/ void LCDcontrol(unsigned char x) { RS=0;//chon thanh ghi lenh RW=0;//ghi len LCD. LCDdata=x ;// gia tri x EN=1;//cho phep muc cao EN=0;//xung cao xuong thap wait();//đoi LCD san sang. } /*------------------------------Khoi tao LCD-------------------------*/ void LCDinit(void) { LCDcontrol(0x38);//2 dong va ma tran 5x7 LCDcontrol(0x0e);//bat man hinh, bat con tro LCDcontrol(0x01);//xoa man hinh }
- /*-------------------------thiet lap du lieu cho LCD-----------------*/ void LCDwrite(unsigned char c) { RS=1;//ghi du lieu RW=0;//ghi du lieu len LCD LCDdata=c;//gia tri C EN=1;//cho phep muc cao EN=0;//xung cao xuong thap wait();//cho } void LCDwrites(unsigned char *s) { unsigned char data lens,count; lens=strlen(s);// lay do dai bien duoc tro boi con tro for(count=0;count
- chot=128; dem=4; while(dem--){ P1=~chot; if(!H1){ delay(500); phimnhan=dem+1; delay(500); }else if(!H2){ delay(500); phimnhan=dem+5; delay(500); }else if(!H3){ delay(500); phimnhan=dem+9; delay(500); }else if(!H4){ delay(500); phimnhan=dem+13; delay(500); } chot>>=1; } return phimnhan; } void viewphim(unsigned char phimnhan) { if(phimnhan
- } void main(void) { unsigned char phimnhan=0; LCDinit(); LCDwrites("Hay Nhan Phim"); LCDcontrol(0xC0); while(1){ phimnhan=Phim(); if(phimnhan){ LCDcontrol(0x01); LCDwrites("Hay Nhan Phim"); LCDcontrol(0xC0); viewphim(phimnhan); } } } III. Hiển thị ma trận Led 1. Thuật toán 2. Xây dựng chương trình Bài toán: Viết chương trình hiển thị ma trận LED bằng phương pháp quét cột hiển thị dong chữ "LAP TRINH VI DIEU KHIEN BANG NGON NGU C", với dong chữ chạy từ trái sang phải.
- + Chương trình: // Khai bao chi thi tien xu ly #include // Dinh nghia cac cong va cac chan dieu khien #define CLOCK P3_2 #define DATA P3_3 #define CLEAR P3_4 #define Pxanh P1 #define Pdo P2 // Dinh nghia cac hang so #define Nhanh 10 #define Trungbinh 25 #define Cham 50 #define Cuccham 75 #define Sieucham 150 #define Mxanh 1 #define Mdo 2
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Ứng dụng excel trong địa chất công trình - ThS. Phan Tự Hướng
76 p | 1279 | 634
-
Cơ học thủy khí ứng dụng - Ts Lương Ngọc Lợi
116 p | 1136 | 305
-
Ứng dụng PLaxis 3D Foundation tính toán móng và công trình ngầm
183 p | 682 | 275
-
Công nghệ tin học và một số bài toán cơ kỹ thuật
9 p | 544 | 126
-
Bài giảng ứng dụng tin học SAP2000
45 p | 164 | 49
-
Ứng dụng giải thuật tối ưu phản ứng hóa học vào một số bài toán tối ưu trong kỹ thuật
8 p | 103 | 9
-
Một số vấn đề ứng dụng cốt địa kỹ thuật khi thiết kế mái dốc đứng
8 p | 144 | 7
-
Nghiên cứu đánh giá chất lượng và độ phức tạp một số thuật toán giải mã cho mã Polar
7 p | 52 | 6
-
Giáo trình PLC cơ bản (Nghề: Điện công nghiệp - Trình độ: Cao đẳng) - Trường Cao đẳng Cơ giới và Thủy lợi (Năm 2020)
217 p | 12 | 5
-
Lựa chọn tiết diện dầm thép hợp lý với một số thuật toán tối ưu trong thiết kế cầu dầm thép chữ I liên hợp
12 p | 14 | 4
-
Ứng dụng phần mềm Maple giải một số bài toán tĩnh học
7 p | 9 | 3
-
Ứng dụng phần mềm crocodile giải các bài toán mạch điện (Applying Crocodile software to solve electrical circuit problems)
4 p | 12 | 3
-
Một số giải pháp ứng dụng màu sắc trong kiến trúc nhằm cải thiện tâm lý trẻ em khuyết tật
7 p | 9 | 3
-
Nghiên cứu tối ưu hóa ứng dụng: Phần 2
104 p | 8 | 3
-
Ứng dụng phương pháp phân tích thành phần chính cho bài toán dự báo phụ tải điện ngắn hạn
4 p | 17 | 2
-
Xây dựng phần mềm giải các bài toán kỹ thuật điện sử dụng Matlab
7 p | 74 | 2
-
Một số thuật toán ứng dụng điều khiển NPC trong bài toán mô phỏng huấn luyện rà phá bom mìn
7 p | 77 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn