ỨNG DỤNG ĐỒNG HỒ NGÀY SỬ DỤNG AT89S52 LCD

ỨNG DỤNG ĐỒNG HỒ NGÀY SỬ DỤNG AT89S52 LCD


Ứng dụng này hiển thị ngày tháng và thời gian tại cùng một thời điểm mà chúng tôi đã tạo ra một báo động có thể được cài đặt với Atmel AT89S52 8051 dựa trên Keil C biên dịch ngôn ngữ lập trình sử dụng tasarlanmıştır.uygulama mã của chúng tôi được viết bằng vi điều khiển lanılarak chức. Proteus Isis chương trình mô phỏng một phần thực hiện trong các ứng dụng mạch in và được rút ra trong một lần nữa Ares' của chương trình Proteus.
Thao tác được thực hiện với 3 phím và 5 nút được kết nối với cổng P0 của vi điều khiển của chúng tôi sẽ được chọn. ví dụ Nếu chuông báo được cài đặt sau khi P0_7 kết nối với công tắc đóng nếu công tắc được đóng lại và sự gia tăng được thực hiện để tăng phút, giờ bằng cách nhấn nút báo động được cài đặt. Khi báo động được cài đặt, đèn dẫn trên đỉnh của tàu và kết nối với pin P2_4 sẽ sáng lên. Bằng cách này, người dùng sẽ có thể xem mạch từ xa và hiểu thiết lập cảnh báo. Có hai loại thiết lập lại trên mạch, tự động và thủ công.
Timer / counter0 (T0) được đặt thành 100 đếm ở chế độ tải tự động (mod2) và mỗi 10.000 đếm tương ứng với 1sn. Sau đó tăng số phút, giờ, ngày, tháng và năm bằng cách tăng số giây.
Ngày tự động thay đổi khi năm hoặc tháng được thay đổi. Các giá trị khác nhau này được hiển thị trong màn hình LCD văn bản 2x16. Các giá trị trên dòng đầu tiên của văn bản LCD thay đổi trong 10 giây.
Lcd văn bản (Hiển thị Cristal lỏng) 
Màn hình hiển thị cristal dạng lỏng 2x16
Hình này hiển thị Lcd văn bản 2 × 16. Nguyên tắc hoạt động và kết nối cuối của màn hình LCD được sử dụng ngày nay được chuẩn hóa. Đường dẫn dữ liệu giữa D0 và D7 cung cấp Lcd để đọc dữ liệu từ bên ngoài và gửi dữ liệu ra bên ngoài.
Để vận hành Lcd, điện áp của thiết bị đầu cuối 1 (VSS) và điện áp của đầu cuối 2 (VDD) +5 volt được áp dụng. Số 3 được sử dụng để điều chỉnh độ sắc nét của hình ảnh (độ tương phản) của màn hình LCD. Ngoài ra, đăng ký chọn (RS) quy định rằng thông tin 8-bit được gửi từ các đầu vào dữ liệu là mã ký tự hoặc lệnh (lệnh RS = 0 dữ liệu - RS = 1) Đọc / Ghi (L / R) (E / Enable) được sử dụng để chuyển dữ liệu sang logic 1 hoặc để đọc dữ liệu từ Lcd (nếu R / W = 1, dữ liệu được đọc nếu R / W = nói bitwise bitwise bitwise.
EA (External Accsess): Mẹo này, là điểm 31 của vi điều khiển (AT89S52), hoạt động ở mức thấp. Nó được kết nối với điện áp cung cấp 5 volt. Nếu kết nối với +5 volts, các chương trình sẽ chạy từ bộ nhớ ngoài nếu các chương trình được kết nối với ROM bên trong.
Mạch báo động
chu kỳ báo động
Trong mạch này, bóng bán dẫn giai điệu đặc biệt được sản xuất UM 66 được sử dụng. Vì dòng đầu ra của pin 24 của vi điều khiển (Port2_3) rất yếu, nên một bóng bán dẫn BC 547 (npn) được sử dụng làm phần tử chuyển đổi ở đây.
UM66 và kết nối chân bán dẫn
um66 bc547 chân pin kết nối
Cấu hình và tính năng của AT89S52 
cấu hình pin at89s52
Các tính năng của AT89S52
• CPU 8 bit cho các ứng dụng điều khiển 
• Bộ xử lý logic • Bộ 
điều khiển CMOS 16MHz dựa trên 16MHz • 4 x 8-bit cổng I / O (32 cổng) 
• 3 bộ đếm / giờ 
• Cơ quan giám sát Bộ định thời 
• 8 cấu trúc phần cứng ngắt với 2 mức ưu tiên 
• UART, 2 DPTR, 
• Bộ nhớ Flash 8K Byte (ISP), 
• Bộ nhớ RAM onte 256 byte
Sơ đồ mạch 
đồng hồ báo thức
Power PCB Schematic
đồng hồ kỹ thuật số báo động-pcb
Đề án in ấn của Quỷ được vẽ trên phần Ares của chương trình Proteus. Nó được in trên một mảng bám bằng cách sử dụng một phương pháp acetand và sắt.
Mã thực hành C
#include                         // tệp tiêu đề quy trình
#include "T_LCD.H" // tệp tiêu đề LCD
#include 			// Tệp tiêu đề ngôn ngữ C
#include                             // Tệp tiêu đề ngôn ngữ C

/ * Định nghĩa biến * /
d2 = 0, g1, g2 = 1, as1 = 0, as2 = 0, ad1 = 0, ad2 = 0, int1 = 0, s2 = 0, sn1 = 0, sn2 = 0, d1 = 0;
int a1, a2 = 1, y1 = 2, y2 = 0, y3 = 0, y4 = 0;
int end = 0; // 100 cắt ngắn = một giây
int aysure [12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // tháng ngày
int weekly = 0;
bit Alarm_Procedure = 0;
/ * Điểm định nghĩa của nút thiết lập * /
#define Giảm P0_0
#define Arttir P0_1
#define Phút P0_2
#define Giờ P0_3
#define Ngày P0_4
#define Tháng P0_5
#define Năm P0_6
#define Báo thức P0_7
#define Alarm_Calsin P2_3
#define Akur P2_4
////////////////////////////////////////////////// ////////////////////////////////////////////////// /
// Hàm Seconds //
// bộ đếm thứ hai được đặt //
////////////////////////////////////////////////// //////////////////////////////////////////////////

void giây (void)
{
  s2 ++;   
  if (sn2 == 10) // cho thời gian chúng vượt qua kiểm soát chuyển tiếp basamagina
  {
    SN1 ++;
    s2 = 0;
    if (sn1 == 6) sn1 = 0; // kiểm tra 60 giây
  }
}

////////////////////////////////////////////////// ////////////////////////////////////////////
// Minute Function //
// bộ đếm phút được đặt //
////////////////////////////////////////////////// /////////////////////////////////////////////
void minutes (giá trị int)
{
  if (value)
  {
    d2 ++;
    nếu (d2 == 10) // phút thì chúng là kiểm soát tràn
    {
      d1 ++;
      d2 = 0;
      if (d1 == 6) d1 = 0; // kiểm soát 60 phút
    }
  }
  khác
  {
    d2--;
    if (d2 == - 1)
    {
      d2 = 9;
      d1--;      	
      if (d1 == - 1) d1 = 5;
    }
  }
}

////////////////////////////////////////////////// /////////////////////////////////////////////
// Chức năng đồng hồ //
// bộ đếm đồng hồ được đặt //
// s2: giờ của các chữ số s1: giờ của các chữ số //
////////////////////////////////////////////////// /////////////////////////////////////////////

void time (int value)
{
  if (value)
  {
    s2 ++;
    if (s1 == 2 && s2 == 4) // 24 điều khiển
    { 
      s1 = 0;
      s2 = 0;
    }
    if (s2 == 10)
    {
      s1 ++;
      s2 = 0;
    }
  }
  khác
  {
    s2--;
    if (s1 == 0 && s2 == - 1)
    { 
      s1 = 2;
      s2 = 3;
    }
    if ((s1! = 0) && s2 == - 1)
    {
      s1--;
      s2 = 9;
    }
  }
}
// ************************************************ **** //
// chức năng báo động //
// bộ đếm cảnh báo được đặt //
// ************************************************ **** //
void alarm_minute (int value) // phút báo thức
{Aku = 1;
  if (value)
  {
    name2 ++; // báo thức tăng dần phút bututon
    if (ad2 == 10) // chúng là điều khiển chuyển tiếp basamagina
    {
      AD1 ++;
      AD2 = 0;
      if (ad1 == 6) ad1 = 0; // kiểm soát 60 phút
    }
  }
  khác
  {
    ad2--; // đặt nút giảm phút báo thức
    if (ad2 == - 1)
    {
      name2 = 9;
      ad1--;      	
      if (ad1 == - 1) ad1 = 5;
    }
  }
}
void alarm_time (int value) // đặt thời gian báo thức
{Aku = 1;
  if (value)
  {
    AS2 ++;
    if (as1 == 2 && as2 == 4) // 24 kiểm soát
    { 
      AS1 = 0;
      AS2 = 0;
    }
    if (as2 == 10)
    {
      AS1 ++;
      AS2 = 0;
    }
  }
  khác
  {
    as2--;
    if (as1 == 0 && as2 == - 1)
    { 
      AS1 = 2;
      AS2 = 3;
    }
    if ((as1! = 0) && as2 == - 1)
    {
      as1--;
      AS2 = 9;
    }
  }
}
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////
// Chức năng tìm ngày trong tuần //
// Đặt ngày trong tuần theo năm và tháng //
////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////

void chính (void)
{
  int i;
  ngày trong tuần = g1 * 10 + g2; // ngày trong tuần
  cho (i = 0; i & lt; (a1 * 10 + a2-1); i ++)
    Các ngày trong tuần = ngày trong tuần + tháng [i]; // chuyển đến ngày trong tuần
                                     // thêm ngày trong tháng         
  nếu (a1 * 10 + a2 & gt; 2) 
    haftagun--; // ngày 29 tháng 2 sẽ ngừng hoạt động trong 1 ngày
  
  // khi nửa đầu không đến vào nửa đầu tuần,
  y1 * 1000 + y2 * 100 + y3 * 10 + y4)% 4 == 0 && (a1 * 10 + a2 <= 2)
    haftagun--;
  
 // tuần trước cho ngày trong tuần * 365 + bây giờ 1 ngày trong năm
  ngày trong tuần = ngày trong tuần + (y1 * 1000 + y2 * 100 + y3 * 10 + y4) * 365;
  ngày trong tuần = ngày trong tuần + (y1 * 1000 + y2 * 100 + y3 * 10 + y4) / 4;

 // đặt ngày trong tuần với chế độ 7
  ngày trong tuần = ngày trong tuần 7%;
}


////////////////////////////////////////////////// ////////////////////////////////////////////////// /////
// Hàm tạo Tài khoản ngày //
// làm việc với hàm weekly () //
////////////////////////////////////////////////// ////////////////////////////////////////////////// /////

void gun (giá trị int)
{
  g2 = g2 + giá trị; // biến ngày đang được tăng lên
 
// ngày của tháng 29 29
// ngày 29 đang được thực hiện
  y1 * 1000 + y2 * 100 + y3 * 10 + y4)% 4! = 0) && (a1 * 10 + a2 == 2) 
       && (g1 * 10 + g2 == 29)) 
  {
    g2 ++; 
  }
  // bộ đếm ngày được đặt
  if (value)
  {
    if (g1 * 10 + g2 & gt; aysure [a1 * 10 + a2-1])
    {
      g1 = 0;
      g2 = 1;
    }
    if (g2 == 10)
    {
      g1 ++;
      g2 = 0;
    }
  }
  khác
  {
    if ((g1 == 0) && (g2 == 0))
    {
      g1 = tuyệt đối [a1 * 10 + a2-1] / 10;
      g2 = tuyệt đối [a1 * 10 + a2-1] 10%;
    }
    if ((g1! = 0) && (g2 == - 1))
    {
      g1--;
      g2 = 9;
    }
    y1 * 1000 + y2 * 100 + y3 * 10 + y4)% 4! = 0) && (a1 * 10 + a2 == 2) 
         && (g1 * 10 + g2 == 29)) 
    {
      --g2; 
    }
  }  
  dayOfWeek ();
}

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////
// Month Function //
// Bộ đếm tháng được đặt //
void tháng (int value)
{
  if (value)
  {
    if (a1 == 1 && a2 == 2)
    { 
      a1 = 0;
      a2 = 0;
    }
    a2 ++;
    nếu (a2 == 10)
    {
	A1 ++;
	a2 = 0;
    }
  }
  khác
  {
    --a2;
    if ((a2 == 0) && (a1 == 0))
    {
      a1 = 1, a2 = 2;
    }
    if ((a2 == - 1) && (a1 == 1))
    {
      a1 = 0, a2 = 9;
    }
  }
  dayOfWeek ();
}

////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////
// Hàm năm //
// Đặt bộ đếm năm //
////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////

năm trống (giá trị int)	
{
  if (value)
  {
    y4 ++;
    nếu (y4 == 10)
    {
      y4 = 0;
      y3 ++;
      nếu (y3 == 10)
      { 
        y3 = 0;
        y2 ++;
        if (y2 == 10)
        { 
          Y2 = 0;
          y1 ++;
        }
      }
    }
  }
  khác
  {
    y4--;
    if (y4 == - 1)
    { 
      y4 = 9;
      y3--;
      if (y3 == - 1)
      { 
        y3 = 9;
        y2--;
        if (y2 == - 1)
        { 
          y 2 = 9;
          y1--;
        }
      }
    }
 }
 dayOfWeek ();
}

////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////
// Timer Counter Cutting Function //
// Lấy độ trễ 1 giây bằng cách sử dụng ngắt T0 //
////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////

timer_isr () ngắt 1 
{
int wait = 0;
  loop ++; 
  if (loop == 10000) // 100 vết cắt trong 1 giây
  {
    thứ hai ();
    if (sn1 == 0 && sn2 == 0) // phút
    {
      min (1);
    }
    if (sn1 == 0 && sn2 == 0 && d1 == 0 && d2 == 0) // thời gian chờ
    {
      h (1);
    }
	if (! Alarm) // phần cảnh báo
	{
		if (Aku)
		{
			// if (d1 == ad1 && d2 == ad2 && s1 == as1 && s2 == as2)
				Alarm_cal = 1;
			khác
			{
				if (là alarm_cal)
					Cấp tính = 0;
				Alarm_cal = 0;
			}
		}
	}
    if (sn1 == 0 && sn2 == 0 && d1 == 0 && d2 == 0 && s1 == 0 && s2 == 0)
    {
      súng (1); // thời gian trong ngày
    }
    if (sn1 == 0 && sn2 == 0 && d1 == 0 && d2 == 0 && s1 == 0 && s2 == 0
       && g1 == 0 && g2 == 1) // phần tháng
    {
      tháng (1);
    }
   

    if (sn1 == 0 && sn2 == 0 && d1 == 0 && d2 == 0 && s1 == 0 && s2 == 0
        && g1 == 0 && g2 == 1 && a1 == 0 && a2 == 1) // năm
    {
      năm (1);
    }
    ring = 0;
 }
}

////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////
// Chức năng ghi ngày //
// Cho phép các ngày được hiển thị trên màn hình LCD với văn bản //
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////

void gunyaz (int g)
{
  int i;
  mã char * gunadi [7] = {"Cmt", "Pzr", "Mon"
                        "Sal", "C", "Pr"
                        "REP"}; 
   
  cho (i = 0; i & lt; 3; i ++)
  {
    if (g == 0) Dữ liệu (* (gunadi [g] + i), 0);
    if (g == 1) Dữ liệu (* (gunadi [g] + i), 0);
    if (g == 2) Dữ liệu (* (gunadi [g] + i), 0);
    if (g == 3) Dữ liệu (* (gunadi [g] + i), 0);
    if (g == 4) Dữ liệu (* (gunadi [g] + i), 0);
    if (g == 5) Dữ liệu (* (gunadi [g] + i), 0);
    if (g == 6) Dữ liệu (* (gunadi [g] + i), 0);
  }
}

////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////
// Chức năng ghi LCD //
// Giây, phút, giờ, ngày, tháng và năm //
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////

void void (void)
{
  int i, j;
  mã số char [10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9; // Mở màn hình LCD
  mã char * ad = {"A.ACAY 010303028"};
  mã char * ayadi [12] = {"01", "02", "03", "04"
                        "05", "06", "07", "08",
                        "09", "10", "11", "12"};
   / * Thời gian in * /
  Command (ıkincisat);
  cho (i = 0; i <4 busted="" font="" gian:="" i="" kh="" lcd="" ng="">
    Dữ liệu ('', 0);
  	
  Dữ liệu (số [s1], 0);
  Dữ liệu (số [s2], 0);
  Dữ liệu (':', 0);
  Dữ liệu (số [d1], 0);
  Dữ liệu (số [d2], 0);
  Dữ liệu (':', 0);
  Dữ liệu (số [sn1], 0);
  Dữ liệu (số [sn2], 0);

  / * In ngày tháng * /
  Command (birincisat); 
  if (báo động)
  {
    cho (i = 0; i <5 font="" i="" m="" ng="" v="">
    Dữ liệu ('', 0);
  	
	Dữ liệu (số [as1], 0);
	Dữ liệu (số [as2], 0);
	Dữ liệu (':', 0);
	Dữ liệu (số [ad1], 0);
	Dữ liệu (số [ad2], 0);
	cho (i = 17; i <32 bastaki="" font="" gian="" i="" kh="" ng="">
    Dữ liệu ('', 0);
}
khác
{
  if ((((sn1% 2) == 0) || (Arttir == 1) || (= 1))
  {
    Dữ liệu ('', 0);
    GÜNYAZ (haftag của);
    Dữ liệu ('-', 0);
    Dữ liệu (số [g1], 0);
    Dữ liệu (số [g2], 0);
    Dữ liệu ('-', 0);
    cho (j = 0; j & lt; 2; j ++)
      Dữ liệu (* (số thập phân [a1 * 10 + a2-1] + j), 0);
    Dữ liệu ('-', 0);
    Dữ liệu (số [y1], 0);
    Dữ liệu (số [y2], 0); 
    Dữ liệu (số [y3], 0);
    Dữ liệu (số [y4], 0);   
    Dữ liệu ('', 0);
  }   
  khác 
  {
    cho (i = 0; i & lt; 32; i ++)
      Dữ liệu (* (ad + i), 0);
  }
 }
} 
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////
// CHƯƠNG TRÌNH CHÍNH //
////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////

void chính (void)
{
  P0 = 0x00; // Đặt lại các nút ấn thành P0
  	Alarm_cal = 0; // Đặt lại P2_3 '
	Cấp tính = 0; // Đặt lại ghim nhảy P2_4 '    
  lcdac (); // Thủ tục mở LCD
  Command (Delete);
  // Thiết lập bộ hẹn giờ và ngắt
  TMOD = 0x02; / * Đặt hẹn giờ TMOD T0 thành chế độ 2 * /
  IE = 0x82; / * cửa hàng ủy quyền gián đoạn * /
  Th0e = -100;		
  TL0 = -100;		
  TR0 = 1;
  while (1)
  {
  	if (báo động)
	{
		if (Arttir &&! Reduce)
		{
 	     	nếu (Phút)
		     	alarm_dakik (1);
      		if (Giờ)
    		    alarm_saat (1);
 		}
		if (Reduce &&! Arttir)
		{
 	     	nếu (Phút)
    	    	alarm_dakik A (0);
      		if (Giờ)
    		    alarm_saat (0);
 		}
	}
	trong khi nhấn nút báo động (! Alarm && Reduce) // nút cảnh báo
 	{
      	SN1 = 0;
      	s2 = 0;
      	nếu (Phút)
        	min (0);
      	if (Giờ)
    	    h (0);
      	if (Ngày)
	        súng (0);
      	if (Month)
        	tháng (0);
      	if (Năm)
        	năm (0);
       baster ();
      Delay (5000);
	}  
	trong khi (! Alarm && Arttir) // nút cảnh báo bật lên và nhấn nút
    {
        SN1 = 0;
        s2 = 0;
        nếu (Phút)
          min (1);	   
        if (Giờ)
          h (1);  
        if (Ngày)
          súng (1);
        if (Month)
          tháng (1);
        if (Năm)
          năm (1);
    	baster (); 
Delay (5000);
 	}
   baster ();
  }

Chương trình mà chúng tôi đã viết ở trên cần thực hiện một số cài đặt ban đầu để màn hình LCD có thể hiển thị các ký tự mong muốn trên màn hình. Hiển thị màn hình, xác định số lượng bit được sử dụng là thao tác đầu tiên phải được thực hiện cho hoạt động của màn hình LCD.
Hiển thị văn bản sẽ được sử dụng như là tiêu chuẩn trong các ứng dụng LCD, gửi lệnh, thiết lập các điều kiện bắt đầu của màn hình LCD, v.v. Hàm T_LCD sau đây đã được sử dụng để định nghĩa các thường trình như các hàm và gọi chúng khi cần thiết. Chức năng này được lưu dưới dạng tệp thư viện.
/ ************************************************* *************** /
/ * T_LCD.H * /
/ ************************************************* *************** /

/ * Xác định các lệnh được sử dụng trên màn hình LCD * /
#define Xóa 1 // Xóa màn hình
#define BasaDon 2 // Di chuyển con trỏ đến góc trên cùng bên trái
#define SolaYaz 4 // Địa chỉ được chỉ định bởi con trỏ đi xuống
#define SagaYaz 6 // Con trỏ sẽ tăng địa chỉ được chỉ định
#define ImlecGizle 12 // Mở chỉ báo, làm cho con trỏ hiển thị
#define ImlecYanSon 15 // Nhấp nháy con trỏ khối
#define ImlecGeri 16 // Di chuyển trở lại một ký tự trong con trỏ
#define SlideSaga 24 // Trượt con trỏ một ký tự sang bên phải                   
#define SlideSave 28 // Trượt sang trái một ký tự trong màn hình   
#define DisplayClose 8 // Đóng màn hình (dữ liệu sẽ không bị xóa)
#define FirstSection 128 // Địa chỉ bắt đầu dòng đầu tiên của màn hình LCD       
                          // (địa chỉ DDRAM)
#define SecondarySection 192 // Địa chỉ bắt đầu của dòng thứ hai
#define KarakUretAdres 64 // Đặt địa chỉ của trình tạo ký tự  
                          // (địa chỉ CGRAM)

/ * Chức năng lựa chọn trên màn hình LCD * /
#define CiftSatir8Bit 56 // giao diện 8 bit, 2 dòng, 5 * 7 pixel
#define CiftSatir4Bit 48 // giao diện 8 bit, 1 dòng, 5 * 7 pixel
#define TekSatir8Bit 40 // giao diện 4 bit, 2 dòng, 5 * 7 pixel
#define TekSatir4Bit 32 // giao diện 4 bit, 1 dòng, 5 * 7 pixel

/ * Nhận dạng đầu vào LCD * /
#define Dữ liệu P1 // Gán cổng cho các mục Dữ liệu LCD
#define RS P2_2 // Đăng ký lựa chọn đầu vào RS = 0 lệnh, RS = 1 dữ liệu
#define RW P2_1 // Đầu vào Đọc / Ghi Viết RW = 0, ghi RW = 1
#define EN P2_0 // Mục ủy quyền 

/ * Chức năng trễ LCD * /
void delay (dài int chắc chắn)
{
  dài int i;
  cho (i = 1; i <= chắc chắn; i + +)
    {;}
}

/ * Chức năng chờ sẵn sàng LCD * /
// void LcdHazir ()
// {
// Dữ liệu = 0xFF; // Chuẩn bị nhận dữ liệu LCD 	  	
// RS = 0; // chế độ lệnh
// RW = 1; // Đọc trên màn hình LCD
// EN = 1; // cài đặt cạnh cắt cho phép
// Delay (200); // thời gian chờ đợi ngắn
// trong khi (Dữ liệu & 0x7F == 0x80); // kiểm tra bit bận.
//}

/ * Chức năng in lệnh LCD * /
void Command (lệnh int) 
{
// LcdHead (); // Đợi cho đến khi màn hình LCD sẵn sàng
  RS = 0; // RS trong chế độ lệnh
  RW = 0; // Chế độ ghi RW
  WIDTH = 1; // cài đặt cạnh giảm đối với ủy quyền quy trình           
  Data = lệnh; // Chuyển thông tin lệnh tới đầu vào dữ liệu LCD
  EN = 0; // cạnh giảm cho phép được cấp
  Delay (1000); // chậm trễ
}	
/ * Chức năng in ký tự đơn trên màn hình LCD * /
void Dữ liệu (dữ liệu char, unsigned int nhanh)	
{
// LcdHead (); // Đợi cho đến khi màn hình LCD sẵn sàng
  RS = 1; // RS trong chế độ lệnh
  RW = 0; // Chế độ ghi RW
  WIDTH = 1; // xử lý cạnh nhàn rỗi để ủy quyền
  Data = dữ liệu; // Chuyển thông tin dữ liệu sang đầu vào dữ liệu LCD
  EN = 0; // cạnh giảm cho phép được cấp
  Chậm trễ (vận tốc); // Thời gian giữa hiển thị các ký tự trên màn hình
}

/ * Chuỗi ký tự LCD (Chuỗi) Chức năng in * /
/ * void DataDizi (dữ liệu char [], dài int hiz)	
{
  int i = 0;
  while (dữ liệu [i]! = 0)
  {
// LcdHead (); // Đợi cho đến khi màn hình LCD sẵn sàng
    RS = 1; // RS trong chế độ lệnh
    RW = 0; // Chế độ ghi RW
    WIDTH = 1; // xử lý cạnh nhàn rỗi để ủy quyền
    Data = dữ liệu [i]; // Chuyển thông tin dữ liệu sang đầu vào dữ liệu LCD
    EN = 0; // cạnh giảm cho phép được cấp
    i ++; // tăng mảng bằng 1 để nhận bit dữ liệu tiếp theo
    Chậm trễ (vận tốc); // thời gian giữa các ký tự xuất hiện
  }
} * /
/ * Chức năng tạo cài đặt ban đầu cho LCD * /
void LcdAc (void)            
{ 	
  Command (ımlecgizl A);
  Command (ciftsatir8bit);
  Command (sagayaz);
}

Chuẩn bị bởi: Arif ACAY Ứng dụng ngày giờ sử dụng các tập tin máy chiếu AT89S52 Lcd
Tải xuống tệp LINK danh sách (ở định dạng TXT) link-3757.zip mật khẩu-pass: 320volt.com Cảm ơn bạn

Post a Comment

[disqus] [facebook] [blogger]

MKRdezign

Biểu mẫu liên hệ

Name

Email *

Message *

Powered by Blogger.
Javascript DisablePlease Enable Javascript To See All Widget
Hỗ trợ trực tuyến