Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 51 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
51
Dung lượng
0,92 MB
Nội dung
MộtSốBàiToánỨngDụngChoTrìnhbiên
dịch KeilC (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:
+ Chương trình điều khiển:
*/==================Bo tien xu li===================*/
#include<AT89x51.h> // 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
START
Khởi tạo hệ thống
Sáng Led
Trễ 1S
Tắt Led
Trễ 1S
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:
+ Chương trình điều khiển:
*/==================Bo tien xu li===================*/
#include<AT89x51.h> // 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;
Start
Led = tat
Start =
0
Stop =
0
Led = tat
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ố
hiển
thị
P1.0
g
P1.1
f
P1.2
e
P1.3
d
P1.4
c
P1.5
b
P1.6
a dp
số nạp hex
mov P1,#
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<=10?
dem=0;
hiển thi ra Led 7 thanh
+ Chương trình điều khiển:
/*==================Bo tien xu li===================*/
#include<AT89x51.h> // Dinh kem file thu vien
/*=================Khai bao bientoan 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 V
ss
- Mass
2 V
cc
- Dương nguồn 5v
3 V
EE
- 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 V
CC
, V
ss
, và V
EE
: các chân V
CC
và V
SS
cáp dương nguồn 5v và mass tương ứng.
Chân V
EE
đượ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
[...]... 0a 0c 0e 0f 10 14 18 1c 80 0c0 38 Xoá màn hình hiển thị Trở về đầu dòng Giảm con trỏ (dịch con trỏ sang trái ) Tăng con trỏ (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ật hiển thi, tắt con trỏ Bật hiển thị, nhấp nháy con trỏ Tắt con trỏ, nhấp nháy con trỏ Dịch vị trí con trỏ sang trái Dịch vị trí con trỏ sang phải Dịch toàn... mã HEX đư c 1 sốc 4 chữ sốc dạng: x1x2y1y2 khi đó giá trị nạp cho thanh ghi chứa như sau: TH = x1x2, TL = y1y2 Ví dụ: muốn tạo trễ 500us thì: Giả sử chu kì máy là 1us: c N = 65536 – 500/1 = 65036 chuyển sang mã HEX là FE 0C, từ đó: TH = 0xFE, TL = 0x 0C - cc bư c lập trìnhcho bộ định thời để tạo trễ ở chế độ 1: +B1: chọn chế độ 1 cho bộ định thời c n dung, từ đó x c định giá trị nạp cho thanh... 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 . 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. 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