intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Một Số Bài Toán Ứng Dụng Cho Trình biên dịch Keil C

Chia sẻ: Doan Hai Trieu | Ngày: | Loại File: DOC | Số trang:51

228
lượt xem
57
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Đ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.

Chủ đề:
Lưu

Nội dung Text: Một Số Bài Toán Ứng Dụng Cho Trình biên dịch Keil C

  1. 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:
  2. 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
  3. 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:
  4. 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;
  5. } 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.
  6. + Lưu đồ thuật giải: START Dem=0; ctac==0? dem++; dem
  7. + 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) {
  8. 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(); } }
  9. 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:
  10. 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:
  11. 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.
  12. 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--------------------------*/
  13. 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
  14. 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)
  15. Đú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.
  16. 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 }
  17. /*-------------------------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
  18. 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
  19. } 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.
  20. + 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2