MÁY TÍNH CHỈ BÁO LCD 8051 ĐẾN 2X16
Dynamics Work
Như bạn có thể thấy có 1 bàn phím và một màn hình LCD sử dụng với 8.051. Bàn phím bao gồm các hàng và cột. Khi nhấn nút, một số phím nhất định được kết hợp và xử lý. Ví dụ, đối với bước 1, dòng 1 là dòng đầu tiên và phải được kết hợp 1-5. Bởi vì một cột hoặc hàng được kết nối với nhiều hơn một nút để xác định nút đó được nhấn, trước hết nó phải xác định nút dòng chìa ra cho người khác 0 1 0 giá trị bằng cách áp dụng các trụ cột 1.
Sau đó, quá trình tương tự được áp dụng cho các cột thứ 2 và thứ 3, điều này hiển nhiên khi nhấn nút đó. Khi được bật, bàn phím được kết nối với cổng P2. 4 cột thông đầu tiên được kết nối bằng các hàng tại chốt tiếp theo. Dữ liệu từ bàn phím được chuyển sang màn hình LCD để xử lý và hiển thị thông qua mã hex vi điều khiển.
Màn hình LCD có kích thước 2 × 16 pixel. Nó bao gồm 2 cột và 16 hàng. Do tiêu thụ điện năng rất thấp, nó thường được sử dụng trong các giai đoạn đầu ra trong mạch điện tử. Chúng tôi đã được sử dụng trong các đơn vị xuất cảnh trong thời gian của chúng tôi. 1Voltage đến ground 2 + Vcc 3Contrast 4-selector 5-đọc / ghi 6-ủy quyền là dữ liệu xe buýt giữa 7,14. Ở đây, bàn phím được xử lý trong bộ điều khiển vi mô và dữ liệu đến màn hình LCD được hiển thị nhờ những lời khuyên này. Đây là cách nó hoạt động.
Danh sách vật liệu
- AT89C51RD2 (8051)
- 2 tụ 33pf
- OSC 12 MHz
- bàn phím
- Màn hình LCD 2 * 16
Chương trình C
/ ************************************************* ******************* Fatih Yıldırım 000303005 ELEKTRONIK OGRETMENLIGI 4 ĐÊM CHƯƠNG TRÌNH KIỂM SOÁT DERSI LAB. giấy CHỦ ĐỀ: MÁY KẾ TOÁN VỚI 8051 C CODES ************************************************** ***************** / Xóa # define 1 #define solayaz 4 #define sagayaz 6 #define kursorgizle 12 #define displayĐóng 8 #define Nguyên tắcNumber 128 #define composite_4bit 48 // mô tả bàn phím #define sut1 P2_0 #define sut2 P2_1 #define sut3 P2_2 #define sut4 P2_3 #define sata P2_4 #define satb P2_5 #define satc P2_6 #define satd P2_7 // khai báo thoát #define Dữ liệu P1 #define rs P3_4 #define rw P3_1 #define vi P3_0 #define max_character 10 enum ERROR {OK = 0, ERR = 2}; void tanitim (); // Chức năng của LCD Yihisin Fatih Yildirim void account_start (); // máy tính bắt đầu hoạt động char tustakimi_tara (void); void account_format (float f); void account_type (char * buf); // hàm được sử dụng để in kết quả tính toán trên màn hình LCD void account_function (mã thông báo char); // chức năng của phép toán ký char num_test (char ch); // Nhân vật có được nhập vào bàn phím chữ số không? điểm? hoạt động operatoru mu? chức năng xác định những gì đang xảy ra void screenMove (void); // xóa màn hình LCD. void Datakomut (lệnh int); // LCD thiết lập đầu vào RS và EN để in lệnh. void Dữ liệu (dữ liệu char); // Đặt đầu vào RS và EN để in các ký tự trên màn hình LCD. void Datayaz (dữ liệu char); void lcdkur (void); // Chức năng chuẩn bị màn hình LCD void delay (dài int chắc chắn); // chức năng trì hoãn char tus (void); // chức năng điều khiển nút // Phần chương trình #include <89c51rd2 .h="">89c51rd2> #include "account.h" #include "stdio.h" #include "math.h" #include "stdlib.h" // Biến chung quy tắc float tĩnh; tĩnh float mới; tĩnh char sonic; void chính (void) // Các biến được thiết lập và chức năng cài đặt cho màn hình LCD được gọi. {lcdkur (); giới thiệu (); hesap_basl A (); } void account_basla () {số char [max_character + 1], số; ký char pos; float k; // giá trị ban đầu của các giá trị tĩnh được gán: bond = 0; newGer = 0; soniclem = 0; // Hiển thị đầu tiên trên màn hình khi màn hình đang mở. hesap_format (0); // Chuỗi số (buf) bị xóa trước khi bắt đầu. pos = 0; cho (;;) {number = custom_tag (); if (number_test (số)) {// kiểm tra xem nó là + rakami + được ghi trong chuỗi buf // và màn hình LCD được viết. // Kích thước đếm tối đa là 8. // kết quả eger - để trống để đánh dấu. if (pos! = max_character - 2) {number [pos ++] = số; số [pos] = 0; hesap_yaz (số); } } khác {// nhãn dán được lưu trữ, nếu eger chọn một quy trình mới // Thao tác được thực hiện với số được lưu trữ. if (pos! = 0) {k = atof (số); ///// ********* Thông tin chuỗi số là độ chính xác gấp đôi chính xác ********* ///// if (soniclem == 0) bond = k; khác new = k; } // mảng số được đặt lại. pos = 0; // toán tử vận hành cuối cùng được lưu trữ trong biến hoạt động cuối cùng và lệnh được thi hành if (sonic! = 0) hesap_islev (Post-Processing I); if (number! = '=') soniclem = số; khác soniclem = 0; } } } void account_function (mã thông báo char) // Các hoạt động được hoàn thành. biến "dính", "kết quả" và // kiểm tra tusk cho các hoạt động liên tiếp. {signed char result = OK; chuyển đổi (mã thông báo) {case '+': sondeger + = newid; break; case '-': sondeger - = newid; break; case '*': sondeger * = newid; break; trường hợp '/': if (newride! = 0) sondeger / = newid; khác result = ERROR; break; } if (result == OK) hesap_format (các sondeg); else if (result == ERROR) account_print ("* BOLME ERROR *"); } / **** ********************* Chương trình phụ trợ ********************* ***** / void account_format (float f) { char buf [max_char ~ 1]; float bolen = 100000000; float l; ký char chiều cao = 0, p = 0; // dấu là gia tăng? nó có bị trừ không? if (f> = 0) buf [p ++] = ''; khác {buf [p ++] = '-'; f = -f; } if (f> = bollen) // eger trả về 100000000 den nếu kết quả của phép tính lớn. buf [p ++] = 'E'; khác trong khi (p1 || f> = 0.0000001)) {bolen / = 10; l = sàn (f / bolen); // Các bước kết quả được tách ra. if (blob <1 amp="" blob=""> 0.01) // Xác định phần chấm chấm nếu có số lượng 1> buf [p ++] = '.'; if (l! = 0 | | bolen <10 c="" font="" g="" h="" i="" k="" lcd="" m="" n="" nh="" p="" s="" t.="" t="" theo="" ti="" x=""> {buf [p ++] = 1 + '0'; // chiều cao = 1; // } nếu không (boy) buf [p ++] = '0'; f - = 1 * bole; } buf [p] = 0; hesap_yaz (buf); } ký char num_test (số char) // Chữ số được nhập trong bàn phím có thể là toán tử chữ số, dấu chấm hoặc toán tử. // Eger 1 sẽ đóng băng nếu chữ số hoặc dấu chấm, 0 nếu hoạt động operatoru {if ((number == '.') || ((số> = '0') && (số <= '9'))) trả về 1; khác trả về 0; } / **** ****************** chương trình nhập / xuất ************** **** / char tustakimi_tara (void) {char key; trong khi ((key = tus ()) == 0x00) / * Nếu 0, quét lại * /; phím trả về; } void account_type (char * buf) // Kết quả được hiển thị trên màn hình kết quả. {ký char i; ekranite của chúng tôi (); // Khi màn hình bị xóa. cho (i = 0; buf [i]! = 0; i ++) {Dữ liệu dữ liệu (buf [i]); } } / *********** ****************** chương trình trợ lý đầu vào / đầu ra ****************** ****** / void tanitim () { char ad [] = "FATIH", họ [] = "YILDIRIM"; ký char i; ekranite của chúng tôi (); // Khi màn hình bị xóa. i ++) {Datayaz (quảng cáo [i]); } chậm trễ (9000); i + +) {Datayaz (last_name [i]); } chậm trễ (9000); } void delay (dài int chắc chắn) {long int i; for (i = 0; i <= thời gian; i ++); } void Datakomut (lệnh int) {rs = 0; rw = 0; mp = 1; Data = lệnh; en = 0; chậm trễ (150); } void datayaz (char data) // cho phép các tên trong hàm tanim () để di chuyển chậm { r = 1; rw = 0; mp = 1; Data = dữ liệu; en = 0; chậm trễ (1000); } void Dữ liệu dữ liệu (dữ liệu char) { r = 1; rw = 0; mp = 1; Data = dữ liệu; en = 0; chậm trễ (50); } void screenMove (void) { Datakomut (rõ ràng); // xóa màn hình, con trỏ di chuyển sang trái. Datakomut (birincisat là + 15); // con trỏ nằm ở bên phải. } void lcdkur (void) { Datakomut (ciftsatir4bit); // Giao diện 8 bit - 1 dòng. Datakomut (kursorgizle); // Không thấy hiển thị ac-kursor. Datakomut (solayaz + 3); // tăng nó tự hiển thị ở bên trái. Datakomut (birincisat là + 15); // con trỏ nằm ở bên phải. } char tus (void) {char don; sut1 = 0; // kiểm tra cột 1 while (! sut1) { trong khi (sata == 0) {while (sata == 0) nếu (sata == 1); trong khi (satb == 0) {while (satb == 0) nếu (satb == 1); trong khi (satc == 0) {while (satc == 0) nếu (satc == 1); don = '7' trong khi (satd == 0) {while (satd == 0) nếu (satd == 1); sut1 = 1; } sut2 = 0; // kiểm tra cột 2 while (! col2) { trong khi (sata == 0) {while (sata == 0) nếu (sata == 1); trong khi (satb == 0) {while (satb == 0) nếu (satb == 1); trong khi (satc == 0) {while (satc == 0) nếu (satc == 1); don = '8'; trong khi (satd == 0) {while (satd == 0) nếu (satd == 1); Col2 = 1; } sut3 = 0; // kiểm tra cột 3 while (! sut3) { trong khi (sata == 0) {while (sata == 0) nếu (sata == 1); don = '3'; trong khi (satb == 0) {while (satb == 0) nếu (satb == 1); don = '6' trong khi (satc == 0) {trong khi (satc == 0) nếu (satc == 1); trong khi (satd == 0) {while (satd == 0) nếu (satd == 1); sut3 = 1; } sut4 = 0; // kiểm tra cột 4 while (! Col4) { trong khi (sata == 0) {while (sata == 0) nếu (sata == 1); don = '/'; trong khi (satb == 0) {while (satb == 0) nếu (satb == 1); trong khi (satc == 0) {trong khi (satc == 0) nếu (satc == 1); trong khi (satd == 0) {while (satd == 0) nếu (satd == 1); Col4 = 1; } trả lại don; } 10>
Được chuẩn bị bởi: Fatih Yıldırım Tập tin nguồn máy chiếu 8051 với máy tính đánh dấu LCD 2X16
Tải xuống tệp LINK danh sách (ở định dạng TXT) link-3274.zip mật khẩu-pass: 320volt.com Cảm ơn bạn
Post a Comment