• HOME
  • DỰ ÁN & MẠCH ĐIỆN
    • Lập trình
      • ARDUINO PROJECT
      • ESP8266 PROJECT
      • ESP32 PROJECT
      • RASPBERRY PI PROJECT
      • Vi điều khiển
    • Điện tử ứng dụng
      • Audio / Amplifiers
      • Nguồn điện
      • Pin sạc/Acquy và mạch sạc
      • Biến đổi AC và DC
      • Robotic
      • Cảm biến
      • LED
      • LCD
      • Động cơ bước
      • Mạch linh tinh
      • Test & Measurement
      • RF – FM
    • Nixie Clock
    • HOME AUTOMATION
    • Dân dụng
    • Công nghiệp
  • KIẾN THỨC CĂN BẢN
    • Điện tử cơ bản
    • Điện tử số
    • PCB
    • Nixie Tube
    • Raspberry Pi
    • Vi điều khiển
    • Arduino
    • IN 3D
  • DOWNLOAD
    • Phần mềm điện tử
    • Giáo trình
      • Giáo trình Điện – Điện tử
      • Giáo trình Tự Động Hóa
      • Giáo trình Viễn thông
    • Đề tài
      • Đề tài – Điện – Điện Tử
      • Đề tài – Tự Động Hóa
      • Đề tài – Viễn thông
    • Điện tử ứng dụng
    • Tài liệu nước ngoài
    • Hướng dẫn, sửa chữa
    • Sơ đồ, nguyên lý thiết bị
    • Tiêu chuẩn – Đo lường – Thử nghiệm
    • Datasheet
  • LIÊN HỆ
  • SẢN PHẨM

Mạch Điện Lý Thú

Sơ đồ nguyên lý, PCB, đồ án, tài liệu, DIY

Trang chủ » DỰ ÁN & MẠCH ĐIỆN » Lập trình » Vi điều khiển » Đồng hồ sử dụng LCD máy Homephone – Gphone Clock

Đồng hồ sử dụng LCD máy Homephone – Gphone Clock

29/05/2025 by admin 2 Bình luận

Đã được đăng vào 31/05/2021 @ 11:22

Gphone Clock (Dam Clock V1.0) sử dụng GLCD 128×64 trong máy bàn không dây Homephone của Viettel và máy Gphone.

Sau khi tháo ra thì ngoài số mã PCB-S68063-1 V02 thì không có thêm thông tin gì khác, lên mạng tìm thì không thấy bất cứ tài liệu datasheet gì nói về con này.

Rất may mình đã tìm được thư viện giao tiếp và sơ đồ chân của Vũ Văn Thái kèm theo bản test mà mình đã đăng lần trước và thấy các hàm đọc, ghi,hiển thị dữ liệu cũng na ná như 1 số dòng LCD khác nên mình quyết định chinh phục em nó cho bằng được.

Sau vài ngày tìm hiểu về cái LCD này mình quyết định cho ra sản phẩm Gphone Clock (Dam Clock V1.0)

Xem thêm:

  • Đồng hồ thời gian thực (Read Time Clock – DS1307) sử dụng Arduino
  • Đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307
  • Hiển thị thời gian thực (RTC DS1307) lên LCD16x2 bằng giao tiếp I2C trong môi trường Arduino

Gphone Clock (Dam Clock V1.0)

Tuy rằng còn nhiều chức năng thiếu : Báo thức, remote , bật tắt đèn nền … nhưng mình thấy khá hài lòng vì tính ĐỘC và chưa đụng hàng với bất kỳ sản phẩm nào.

Mình cũng quyết định chia sẻ full code C bản Gphone Clock (Dam Clock V1.0) này để anh em nghiên cứu .

Hy vọng rằng anh em có ai share hoặc thương mại thì cũng bớt ra 1 vài dòng chót cho tác giả để mình thấy công sức của mình bỏ ra là hoàn toàn xứng đáng…Xin cảm ơn!

Phần cứng

Mục lục hiện
Phần cứng
Giới thiệu màn hình GLCD 12864 Homephone Viettel hoặc GPhone VNPT
Một số tài liệu
Phần mềm
Code Main chính
Cài đặt
Tải Phiên Bản V1.0 – Full Code
Tải Phiên Bản V1.1 – File Hex
Video Demo Gphone Clock ( Dam Clock V1.0 )
Mạch nguyên lý Dam Clock V1.0
  • Màn hình GLCD máy Homphone/Gphone
  • Vi điều khiển AT89S52 / AT89C52
  • IC thời gian thực DS1307
  • Cảm biến nhiệt độ DS18B20
  • Pin + đế pin Cmos
  • Tụ gốm, tụ hóa, điện trở, Jack, Jumer …
(Thông số linh kiện có trong file nguyên lý và sơ đồ chân)

Giới thiệu màn hình GLCD 12864 Homephone Viettel hoặc GPhone VNPT

Màn hình GLCD 12864 HOMEPHONE/GPHONE từ điện thoại Viettel hoặc Vinaphone

Xem hướng dẫn sử dụng chi tiết ở đây nhé:

Hướng dẫn sử dụng glcd ST7565 homephone và chia sẻ thư viện

  • Sử dụng IC điều khiển ST7565
  • Điện áp: 3,3 – 5,5 VDC (Không khuyến khích sử dụng 5V)
  • Kích thước viền ngoài: 60 x 90.5 x 10 mm
  • Kích thước màn hình: 70 x 47 mm.
  • Độ phân giải: 128px x 64px

GLCD mã PCB-S68063-1 V02

GLCD của máy điện thoại không dây Gphone do hãng ZTE sản xuất theo đơn đặt hàng của VNPT.

Ưu điểm của LCD này là đẹp, rẻ có thể đi nhặt đồng nát hoặc xin được, vì giá những con GLCD trên thị trường cũng khá khó kiếm

GLCD có đèn nền mầu trắng hoặc màu vàng sẫm tùy đời máy Gphone

Giao tiếp SPI 4 line tiết kiệm chân MCU, điện áp hoạt động theo mình dò được khoảng 2.2-3.3V (2.5V) và các tính năng khác mình có nêu rõ trong ghi chú Code.

Điều đáng nói ở đây là tài liệu về con GLCD này là không có trên mạng lên việc xác định chân cẳng hoàn toàn bằng kinh nghiệm và chip driver cũng noname luôn, nhưng thật may là mình đã test thử với con ST7565, ST7567… mà tìm ra tập lệnh tương thích với nó.

Sơ đồ chân 1 vài loại GLCD

Như vậy từ bây giờ các bạn có thể sử dụng nó như một Text LCD 20×8 với bộ font được bạn Lê Đắc Đảm biên soạn sẵn và chế độ Graphic cho những bạn nào thích đồ họa đen trắng 😀

Sau đây là sơ đồ nguyên lý chung cho GLCD: Tất cả các LCD trong máy Gphone đều giống nhau!!!!

Chú ý: Vị trí chân của LCD này khác so với LCD 9 chân như sau

  • Serial input data =  SDA or SI or DIN or MOSI ( chân 7 của màn hình )
  • Serial clock = SCL or SCK or SCLK ( chân 3 của màn hình )
  • Data/command select = RS or AO or DC ( chân 4 của màn hình )
  • LCD chip reset = RST or REST ( chân 2 của màn hình )
  • LCD chip select = CS or CE or SS or EN or SCE ( chân 8 của màn hình )

Màn dùng điện áp <5V nên khi cấp nguồn + cho chân 9 của màn hình từ khoảng 2,5-3,3V hoặc dùng cầu chia áp bằng 2 điện trở 10K.

Nguồn (-) cấp vào chân 1 và 10 của màn hình.

Cấp nguồn cho 2 chân led nền là 5 và 6 của màn hình

Một số tài liệu

Bộ font, thư viện mẫu, hướng dẫn sử dụng bạn có thể tải tại đây:

Public Homephone LCD Library – Thư viện điều khiển màn hình LCD điện thoại công cộng và điện thoại bàn

ST7565 LCDs

homephone_LCD

Phần mềm

  • Hiển thị giờ phút giây, này tháng năm dương, âm lịch
  • Hiển thị nhiệt độ phòng
  • 2 loại font 8x8px và 16x16px
Code Gphone Clock (Dam Clock V1.0) được lập trình trên vi điều khiển AT89S52 / AT89C52. Các bạn chú ý!!!
#include<regx52.h>
#include <INTRINS.H>

#define uchar unsigned char 
#define CS	P2_3 //Chon chip
#define SDA	P2_2 //Data SPI
#define AO	P2_1 //Chot du lieu Command va Data (C/D)
#define SCK	P2_0 //Clock SPI

sbit sda =	P3^1;
sbit scl =	P3^0;
sbit menu_key=P3^7;
sbit up_key=P3^6;
sbit down_key=P3^5;
sbit DQ = P1^0; 
uchar temp1,temp2,temp; 

unsigned char gio,phut,giay,thang_al,ngay_al,mode = 0;
unsigned char time[7];

unsigned char code font[][8] ={ 
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // ' '
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '!'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '"'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '#'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '$'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '%'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '&'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '''
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '('
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // ')'
    {0x00,0x0C,0x1E,0x12,0x12,0x1E,0x0C,0x00},  // '*'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '+'
    {0x00,0x80,0xE0,0x60,0x00,0x00,0x00, 0x00},  // ','
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '-'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '.'
    {0x40,0x60,0x30,0x18,0x0C,0x06,0x02,0x00},  // '/'
    {0x3C,0x7E,0x52,0x4A,0x46,0x7E,0x3C,0x00},  // '0'
    {0x00,0x44,0x44,0x7E,0x7E,0x40,0x40,0x00},  // '1'
    {0x44,0x66,0x72,0x52,0x52,0x5E,0x4C,0x00},  // '2'
    {0x24,0x66,0x42,0x4A,0x4A,0x7E,0x34,0x00},  // '3'
    {0x10,0x58,0x54,0x7E,0x7E,0x50,0x50,0x00},  // '4'
    {0x2E,0x6E,0x4A,0x4A,0x4A,0x7A,0x32,0x00},  // '5'
    {0x3C,0x7E,0x4A,0x4A,0x4A,0x7A,0x32,0x00},  // '6'
    {0x06,0x06,0x62,0x72,0x1A,0x0E,0x06,0x00},  // '7'
    {0x34,0x7E,0x4A,0x4A,0x4A,0x7E,0x34,0x00},  // '8'
    {0x4C,0x5E,0x52,0x52,0x52,0x7E,0x3C,0x00},  // '9'
    {0x00,0x00,0x66,0x66,0x00,0x00,0x00,0x00},  // ':'
    {0x00,0x40,0x66,0x26,0x00,0x00,0x00,0x00},  // ';'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '<'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '='
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '>'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '?'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '@'
    {0x7C,0x7E,0x12,0x12,0x12,0x7E,0x7C,0x00},  // 'A'
    {0x42,0x7E,0x7E,0x4A,0x4A,0x7E,0x34,0x00},  // 'B'
    {0x3C,0x7E,0x42,0x42,0x42,0x66,0x24,0x00},  // 'C'
    {0x42,0x7E,0x7E,0x42,0x42,0x7E,0x3C,0x00},  // 'D'
    {0x42,0x7E,0x7E,0x4A,0x4A,0x42,0x66,0x00},  // 'E'
    {0x42,0x7E,0x7E,0x4A,0x0A,0x02,0x06,0x00},  // 'F'
    {0x3C,0x7E,0x42,0x42,0x52,0x72,0x74,0x00},  // 'G'
    {0x7E,0x7E,0x08,0x08,0x08,0x7E,0x7E,0x00},  // 'H'
    {0x00,0x00,0x42,0x7E,0x7E,0x42,0x00,0x00},  // 'I'
    {0x20,0x60,0x40,0x42,0x7E,0x3E,0x02,0x00},  // 'J'
    {0x42,0x7E,0x7E,0x08,0x1C,0x76,0x62,0x00},  // 'K'
    {0x42,0x7E,0x7E,0x42,0x40,0x40,0x60,0x00},  // 'L'
    {0x7E,0x7C,0x08,0x10,0x08,0x7C,0x7E,0x00},  // 'M'
    {0x7E,0x7E,0x04,0x18,0x20,0x7E,0x7E,0x00},  // 'N'
    {0x3C,0x7E,0x42,0x42,0x42,0x7E,0x3C,0x00},  // 'O'
    {0x42,0x7E,0x7E,0x52,0x12,0x1E,0x0C,0x00},  // 'P'
    {0x3C,0x7E,0x42,0x42,0x32,0x7E,0x5C,0x00},  // 'Q'
    {0x42,0x7E,0x7E,0x12,0x32,0x5E,0x4C,0x00},  // 'R'
    {0x24,0x6E,0x4A,0x5A,0x52,0x76,0x24,0x00},  // 'S'
    {0x06,0x02,0x42,0x7E,0x7E,0x42,0x06,0x00},  // 'T'
    {0x3E,0x7E,0x40,0x40,0x40,0x7E,0x3E,0x00},  // 'U'
    {0x0E,0x1E,0x30,0x60,0x30,0x1E,0x0E,0x00},  // 'V'
    {0x7E,0x7E,0x20,0x10,0x20,0x7E,0x7E,0x00},  // 'W'
    {0x42,0x66,0x3C,0x18,0x3C,0x66,0x42,0x00},  // 'X'
    {0x06,0x0E,0x48,0x78,0x78,0x4E,0x06,0x00},  // 'Y'
    {0x46,0x62,0x72,0x5A,0x4E,0x46,0x62,0x00},  // 'Z'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '['
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // backslash
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // ']'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '^'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '_'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '`'
    {0x20,0x74,0x54,0x54,0x3C,0x78,0x40,0x00},  // 'a'
    {0x42,0x7E,0x3E,0x48,0x48,0x78,0x30,0x00},  // 'b'
    {0x38,0x7C,0x44,0x44,0x44,0x6C,0x28,0x00},  // 'c'
    {0x30,0x78,0x48,0x48,0x3E,0x7E,0x40,0x00},  // 'd'
    {0x38,0x7C,0x54,0x54,0x54,0x5C,0x58,0x00},  // 'e'
    {0x48,0x7C,0x7E,0x4A,0x02,0x06,0x04,0x00},  // 'f'
    {0x4C,0x5E,0x52,0x52,0x7C,0x3E,0x02,0x00},  // 'g'
    {0x42,0x7E,0x7E,0x10,0x08,0x78,0x70,0x00},  // 'h'
    {0x00,0x00,0x48,0x7A,0x7A,0x40,0x00,0x00},  // 'i'
    {0x20,0x60,0x40,0x40,0x42,0x7E,0x3E,0x00},  // 'j'
    {0x42,0x7E,0x7E,0x10,0x38,0x6C,0x44,0x00},  // 'k'
    {0x00,0x00,0x42,0x7E,0x7E,0x40,0x00,0x00},  // 'l'
    {0x7C,0x7C,0x08,0x30,0x0C,0x7C,0x78,0x00},  // 'm'
    {0x7C,0x7C,0x04,0x04,0x04,0x7C,0x78,0x00},  // 'n'
    {0x38,0x7C,0x44,0x44,0x44,0x7C,0x38,0x00},  // 'o'
    {0x44,0x7C,0x7C,0x54,0x14,0x1C,0x08,0x00},  // 'p'
    {0x0C,0x1E,0x12,0x52,0x7C,0x7E,0x42,0x00},  // 'q'
    {0x44,0x7C,0x78,0x4C,0x04,0x0C,0x08,0x00},  // 'r'
    {0x48,0x5C,0x54,0x54,0x54,0x74,0x24,0x00},  // 's'
    {0x04,0x04,0x3E,0x7E,0x44,0x64,0x24,0x00},  // 't'
    {0x3C,0x7C,0x40,0x40,0x3C,0x7C,0x40,0x00},  // 'u'
    {0x1C,0x3C,0x60,0x40,0x20,0x3C,0x1C,0x00},  // 'v'
    {0x3C,0x7C,0x40,0x30,0x40,0x7C,0x3C,0x00},  // 'w'
    {0x44,0x6C,0x38,0x10,0x38,0x6C,0x44,0x00},  // 'x'
    {0x4C,0x5C,0x50,0x50,0x50,0x7C,0x3C,0x00},  // 'y'
    {0x44,0x64,0x74,0x54,0x5C,0x4C,0x44,0x00},  // 'z'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '{'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '|'
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // '}'
		{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  // ->
		{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   // <-
};

unsigned char code font_big_1[][8] ={	 
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x1E,0x1E,0x1E,0x1E,0x0E,0xFE,0xFE},   
    {0x00,0xFE,0xFE,0xFE,0xFC,0xF8,0xF0,0xE0},   
    {0x00,0xF8,0xFC,0xFE,0xFE,0x1E,0x0E,0x0E},   
    {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0xC3},   
    {0x00,0xF8,0xFC,0xFE,0xFE,0x1E,0x0E,0x8E},   
    {0x00,0x38,0x38,0x38,0x38,0x38,0xFE,0xFE},   
    {0x00,0x38,0x3C,0x3E,0x3E,0x1E,0x0E,0x0E},   
    {0x00,0x38,0x3C,0x3E,0x1E,0x0E,0xCE,0xCE},   
    {0x00,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00},   
    {0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xCE,0xCE},   
    {0x00,0xF8,0xFC,0xFE,0xFE,0x9E,0xCE,0xCE},   
    {0x00,0x1E,0x1E,0x1E,0x1E,0x0E,0x0E,0x0E},   
    {0x00,0x38,0x7C,0xFE,0xFE,0xDE,0xCE,0xCE},   
    {0x00,0xF8,0xFC,0xFE,0xFE,0xDE,0x8E,0x8E},   
    {0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C}  
};	
///////////////////////////////////////////////////////////////////////
unsigned char code font_big_2[][8] ={	 
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},    
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0xFE,0xFE,0x0E,0x1E,0x1E,0x1E,0x1E,0x00},   
    {0xC0,0x80,0x00,0xFE,0xFE,0xFE,0xFE,0x00},   
    {0x0E,0x0E,0x1E,0x3E,0x3E,0x3C,0x38,0x00},   
    {0xC3,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},   
    {0xCE,0xEE,0x7E,0xFE,0xFE,0xFC,0xF8,0x00},   
    {0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x0E,0x0E,0x9E,0xFE,0xFE,0xFC,0xF8,0x00},   
    {0xCE,0xCE,0xDE,0xFE,0xFE,0x7C,0x38,0x00},   
    {0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00},   
    {0xCE,0xCE,0xCE,0xDE,0xDE,0x9E,0x1E,0x00},   
    {0xCE,0xCE,0xDE,0xDE,0xDE,0x9C,0x18,0x00},  
    {0x8E,0xCE,0xEE,0xFE,0xFE,0x7E,0x3E,0x00},   
    {0xCE,0xCE,0xDE,0xFE,0xFE,0x7C,0x38,0x00},   
    {0x8E,0x8E,0xDE,0xFE,0xFE,0xFC,0xF8,0x00},   
    {0x3C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00}  
}; 
unsigned char code font_big_3[][8] ={   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},    
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},    
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},    
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x70,0x7F,0x7F},   
    {0x00,0x7F,0x7F,0x7F,0x7F,0x00,0x01,0x03},   
    {0x00,0x1F,0x3F,0x7F,0x7F,0x78,0x70,0x70},   
    {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0x87},  
    {0x00,0x1F,0x3F,0x7F,0x7F,0x7E,0x77,0x73},   
    {0x00,0x70,0x70,0x70,0x70,0x70,0x7F,0x7F},   
    {0x00,0x60,0x70,0x78,0x78,0x7C,0x7C,0x7E},   
    {0x00,0x1C,0x3C,0x7C,0x78,0x70,0x71,0x71},   
    {0x00,0x03,0x07,0x07,0x07,0x07,0x07,0x07},   
    {0x00,0x1C,0x3D,0x7D,0x7D,0x79,0x71,0x71},   
    {0x00,0x1F,0x3F,0x7F,0x7F,0x7B,0x71,0x71},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x7F},   
    {0x00,0x1E,0x3F,0x7F,0x7F,0x7B,0x71,0x71},   
    {0x00,0x18,0x39,0x7B,0x7B,0x7B,0x73,0x73},   
    {0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C}  
}; 
unsigned char code font_big_4[][8] ={	   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},   
    {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  
    {0x22,0x36,0x3E,0x1C,0x08,0x0E,0x11,0x21},   
    {0x41,0x8E,0x51,0x21,0x41,0x8A,0x49,0x29},   
    {0x19,0x0E,0x08,0x08,0x3E,0x3E,0x1C,0x08},   
    {0x2C,0x24,0x24,0x2C,0x24,0x24,0x2C,0x18},  
    {0x3C,0x3C,0x2C,0x24,0x24,0x2C,0x24,0x24},   
    {0x3C,0x7E,0xFF,0xFF,0xFF,0xFF,0x7E,0x3C},  
    {0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10},  
    {0x7F,0x7F,0x70,0x00,0x00,0x00,0x00,0x00},   
    {0x07,0x0F,0x1F,0x3F,0x7F,0x7F,0x7F,0x00},   
    {0x70,0x70,0x78,0x7C,0x7C,0x3C,0x1C,0x00},  
    {0x87,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},   
    {0x71,0x70,0x78,0x7F,0x7F,0x3F,0x1F,0x00},   
    {0x7F,0x7F,0x70,0x70,0x70,0x70,0x70,0x00},  
    {0x76,0x77,0x73,0x73,0x71,0x71,0x70,0x00},   
    {0x71,0x71,0x7B,0x7F,0x7F,0x3F,0x1E,0x00},   
    {0x7F,0x7F,0x7F,0x7F,0x07,0x07,0x07,0x00},  
    {0x71,0x71,0x7B,0x7F,0x7F,0x3F,0x1F,0x00},   
    {0x71,0x71,0x7B,0x7F,0x7F,0x3F,0x1F,0x00},   
    {0x7F,0x7F,0x03,0x01,0x00,0x00,0x00,0x00},   
    {0x71,0x71,0x7B,0x7F,0x7F,0x3F,0x1E,0x00},   
    {0x73,0x73,0x7B,0x7F,0x7F,0x3F,0x1F,0x00},   
    {0x3C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00}  
};
const unsigned char code lich[]={ 
0x1b,0x0c//1999 
,0x11,0x12,0x03,0x04,0x15,0x06,0x07,0x18,0x09,0x1a,0x1b,0x0c                      
,0x11,0x12,0x03,0x14,0x04,0x15,0x06,0x07,0x18,0x09,0x1a,0x0b,0x1c                 
,0x11,0x12,0x03,0x14,0x05,0x16,0x07,0x08,0x19,0x0a,0x1b,0x0c                      
,0x11,0x12,0x03,0x14,0x15,0x06,0x17,0x08,0x09,0x1a,0x0b,0x1c                      
,0x01,0x12,0x02,0x13,0x14,0x05,0x16,0x07,0x18,0x09,0x1a,0x0b,0x1c                 
,0x01,0x12,0x03,0x14,0x05,0x16,0x17,0x08,0x19,0x0a,0x1b,0x0c//2005                
,0x11,0x02,0x13,0x04,0x05,0x16,0x17,0x07,0x18,0x19,0x0a,0x1b,0x0c //2006         
,0x11,0x02,0x13,0x04,0x05,0x16,0x07,0x18,0x19,0x1a,0x0b,0x1c                      
,0x11,0x02,0x03,0x14,0x05,0x06,0x17,0x08,0x19,0x0a,0x1b,0x1c                     
,0x11,0x12,0x03,0x04,0x15,0x05,0x06,0x17,0x08,0x19,0x0a,0x1b,0x1c  
,0x11,0x02,0x13,0x04,0x15,0x06,0x07,0x18,0x09,0x1A,0x0B,0x1C///2010 
,0x11,0x02,0x13,0x14,0x05,0x16,0x07,0x08,0x19,0x0A,0x1B,0x0C       
,0x11,0x02,0x13,0x14,0x04,0x15,0x06,0x17,0x08,0x19,0x0a,0x1b,0x0c      
,0x11,0x02,0x13,0x04,0x15,0x16,0x07,0x18,0x09,0x1a,0x0b,0x1c              
,0x01,0x12,0x03,0x14,0x05,0x16,0x07,0x18,0x19,0x09,0x1a,0x0b,0x1c            
,0x01,0x12,0x03,0x04,0x15,0x06,0x17,0x18,0x19,0x0a,0x1b,0x0c                  
,0x11,0x02,0x13,0x04,0x05,0x16,0x07,0x18,0x19,0x0a,0x1b,0x1c                    
,0x01,0x12,0x03,0x14,0x05,0x06,0x16,0x07,0x18,0x09,0x1a,0x1b,0x1c//2017          
,0x01,0x12,0x03,0x14,0x05,0x06,0x17,0x08,0x19,0x0a,0x1b,0x1c                      
,0x11,0x02,0x13,0x04,0x15,0x06,0x07,0x18,0x09,0x0a,0x1b,0x1c                      
,0x01,0x12,0x13,0x14,0x04,0x15,0x06,0x07,0x18,0x09,0x1a,0x0b,0x1c
};
const unsigned int code count_year1[]={
  0,59,413,797,1151,1506,1890,2244,
	2628,2983,3337,3721,4075,4429,4813,
	5168,5552,5906,6261,6645,6999,7353,
	7737,8091,8446,8830,9184,9568,9922,
	10276,10660,11015,11369,11753,12108,
	12492,12846,13200,13584,13938,14292,
	14676,15031,15386,15770,16124,16508,
	16862,17216,17600,17954,18309,18693,
	19048,19431,19786,20140,20523,20878,
	21232,21616,21971,22325,22709,23063,
	23447,23801,24156,24540,24894,25249,
	25633,25987,26371,26725,27079,27463,
	27818,28172,28556,28911,29265,29649,
  30003,30387,30741,31096,31480,31834,
  32189,32572,32926,33310,33664,34019,
  34403,34758,35112,35496,35850,36204,36588};
const unsigned int code count_year[]={
  25 ,391 ,756 ,1121 ,1486 ,1852 ,2217 ,
	2582 ,2947 ,3313 ,3678 ,4043 ,4408 ,
	4774 ,5139 ,5504 ,5869 ,6235 ,6600 ,
	6965 ,7330 ,7696 ,8061 ,8426 ,8791 ,
	9157 ,9522 ,9887 ,10252 ,10618 ,
	10983 ,11348 ,11713 ,12079 ,12444 ,
	12809 ,13174 ,13540 ,13905 ,14270 ,
	14635 ,15001 ,15366 ,15731 ,16096 ,
	16462 ,16827 ,17192 ,17557 ,17923 ,
	18288 ,18653 ,19018 ,19384 ,19749 ,
	20114 ,20479 ,20845 ,21210 ,21575 ,
	21940 ,22306 ,22671 ,23036 ,23401 ,
	23767 ,24132 ,24497 ,24862 ,25228 ,
	25593 ,25958 ,26323 ,26689 ,27054 ,
	27419 ,27784 ,28150 ,28515 ,28880 ,
	29245 ,29611 ,29976 ,30341 ,30706 ,
	31072 ,31437 ,31802 ,32167 ,32533 ,
	32898 ,33263 ,33628 ,33994 ,34359 ,
	34724 ,35089 ,35455 ,35820 ,36185 ,36550
};
const unsigned int code sothang[]={
	0,2,14,27,39,51,64,76,89,101,113,
	126,138,150,163,175,188,200,212,
	225,237,249,262,274,286,299,311,
	324,336,348,361,373,385,398,410,
	423,435,447,460,472,484,497,509,
	521,534,546,559,571,583,596,608,
	620,633,645,658,670,682,695,707,
	719,732,744,756,769,781,794,806,
	818,831,843,855,868,880,893,905,
	917,930,942,954,967,979,991,1004,
 1016,1029,1041,1053,1066,1078,1090,
 1103,1115,1128,1140,1152,1165,1177,
 1189,1202,1214,1226,1239
};
const unsigned int code count_month[] ={0,0,31,59,90,120,151,181,212,243,273,304,334}; 
const unsigned int code count_month1[]={0,0,31,60,91,121,152,182,213,244,274,305,335};
const unsigned int code nd[]={
	500,485,470,450,430,405,394,384,
	368,352,342,332,322,315,308,300,
	292,286,275,268,262,256,246,236,
	226,216,212,202,188,180,172,165,
  156,150,145,140,138,135,130,125,
  120,115,110,105,100,98,97,93,90,85
};
 
unsigned char hex_dec(unsigned char hex){ 
	return((hex>>4)*10 +(hex & 0xf));} 
unsigned char dec_hex(unsigned char dec){  
	return(((dec/10) <<4 )+(dec%10));} 
unsigned int tinhlich(unsigned char ngayduong,thangduong,nam)
{
	unsigned int songay,t5;
	unsigned char ngayam,thangam;
	ngayduong 	= hex_dec(ngayduong);
	thangduong 	= hex_dec(thangduong);
	nam 		= hex_dec(nam);
if(nam%4==0) songay=count_year[nam]+count_month1[thangduong]+ngayduong;
else songay=count_year[nam]+count_month[thangduong]+ngayduong; 
songay--; 
songay=songay-count_year1[nam]; 

for(t5=sothang[nam];t5<262;t5++) 
{
	if(songay==0)break;
 	if(songay>50000)break;

 	if(lich[t5]>16) { songay=songay-30;}
	else            { songay=songay-29;}
}
    if(songay==0) { if(lich[t5-1]>16) { thangam=lich[t5-1]-16; ngayam=30; }
                    else              { thangam=lich[t5-1];    ngayam=29; } }
  else            { if(lich[t5-1]>16) { thangam=lich[t5-1]-16; ngayam=songay+30; }
	                  else              { thangam=lich[t5-1];    ngayam=songay+29; } }

 	ngayam 	= dec_hex(ngayam);
	thangam = dec_hex(thangam);
	t5= thangam << 8  ;
	t5 = t5 + ngayam;
	return(t5);
}
///////////////////////////////////////////////////////  
void delay(unsigned int i)
 { unsigned int j;
 while(i-->0)
 {   
 for(j=0;j<400;j++)
 {
 }
 }
 } 
 void delay_ms(unsigned int t)
 {
 unsigned int x,y;
 for(x=0; x<t; x++);
 {
 for(y=0; y<123; y++);   //delay 1ms
 }
 }
 void delay_lcd(unsigned int t){
 unsigned int i;
 unsigned char j;
 for(i=0;i<t;i++)
 for(j=0;j<125;j++);
 } 
 void delay_18B20(unsigned int i)
 {
 while(i--);
 } 
 void lcd_write(unsigned char cd, unsigned char byte){ 
	unsigned char h;
	CS=0;
	if(cd)AO=1; 
	else AO=0; 
	for(h=0;h<8;h++){
		if(!(byte&0x80))SDA=0; 
		else SDA=1;
		SCK=0;
		SCK=1;
		byte<<=1;
	}
	AO=~AO;
	CS=1;
} 
void lcd_gotoxy(unsigned char x, unsigned char y) 
{
	x=x*8; 
	lcd_write(0,(x & 0x0f));
	lcd_write(0,((x >> 4) & 0x07)|0x10);
	lcd_write(0,(y & 0x0f)|0xb0);
} 
void lcd_putchar16_1(char dat) 
{
	unsigned char v;
	if((dat >= 0x20) && (dat <= 0x3a)){
		dat=dat-32;
		for(v=0;v<8;v++)
			lcd_write(1, font_big_1[dat][v]);
	}
} 
void lcd_putchar16_2(char dat) 
{
	unsigned char v;
	if((dat >= 0x20) && (dat <= 0x3a)){
		dat=dat-32;
		for(v=0;v<8;v++)
			lcd_write(1, font_big_2[dat][v]);
	}
} 
void lcd_putchar16_3(char dat) 
{
	unsigned char v;
	if((dat >= 0x20) && (dat <= 0x3a)){
		dat=dat-32;
		for(v=0;v<8;v++)
			lcd_write(1, font_big_3[dat][v]);
	}
} 
void lcd_putchar16_4(char dat) 
{
	unsigned char v;
	if((dat >= 0x20) && (dat <= 0x3a)){
		dat=dat-32;
		for(v=0;v<8;v++)
			lcd_write(1, font_big_4[dat][v]);
	}
} 
void lcd_puts_4(char *s) 
{
	while(*s)
		lcd_putchar16_4(*s++);
} 
void lcd_clear() 
{
	unsigned char u,w;
	for(u=0;u<8;u++){
		lcd_gotoxy(0,u);
		for(w=0;w<130;w++)
			lcd_write(1,0);
	}
	lcd_gotoxy(0,0);
} 
void lcd_putchar(char dat) 
{
	unsigned char v;
	if((dat >= 0x20) && (dat <= 0x7f)){
		dat=dat-32;
		for(v=0;v<8;v++)
			lcd_write(1, font[dat][v]);
	}
} 
void lcd_putchar_amban(char dat) 
{
	unsigned char v;
	if((dat >= 0x20) && (dat <= 0x7f)){
		dat=dat-32;
		for(v=0;v<8;v++)
			lcd_write(1, ~font[dat][v]);
	}
}
void lcd_puts_amban(char *s) 
{
	while(*s)
		lcd_putchar_amban(*s++);
} 
void lcd_puts(char *s) 
{
	while(*s)
		lcd_putchar(*s++);
} 
void lcd_init() 
{
	lcd_write(0,0xE2); //Reset
	delay_lcd(100);	   //Delay 100ms
	lcd_write(0,0xAF); //Display ON, 0xAE - OFF
	lcd_write(0,0x2F); //Power control	
	lcd_clear(); //Xoa man hinh
}
void Init_DS18B20(void) 
{
	 unsigned char x=0;
	 DQ = 1;          //DQ reset
	 delay_18B20(8);  //Slight delay
	 DQ = 0;          //SCM will be pulled down DQ
	 delay_18B20(80); //Accurate delay Greater than 480us
	 DQ = 1;          //Pulled the bus
	 delay_18B20(14);
	 x=DQ;            //After slight delay is initialized if x = 0 x = 1 is initialized successfully defeat
	 delay_18B20(20);
} 
unsigned char ReadOneChar(void)
{
	uchar i=0;
	uchar dat = 0;
	for (i=8;i>0;i--)
	 {
		  DQ = 0; // To the pulse signal
		  dat>>=1;
		  DQ = 1; // To the pulse signal
		  if(DQ)
		  dat|=0x80;
		  delay_18B20(4);
	 }
 	return(dat);
} 
void WriteOneChar(uchar dat)
{
 	unsigned char i=0;
 	for (i=8; i>0; i--)
 	{
  		DQ = 0;
 		DQ = dat&0x01;
    	delay_18B20(5);
 		DQ = 1;
    	dat>>=1;
 }
}
 
void ReadTemperature(void)
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned char t=0;

	Init_DS18B20();
	WriteOneChar(0xCC);    	// Skip read serial number column number of operations
	WriteOneChar(0x44); 	// Start temperature conversion

	delay_18B20(100);       // this message is wery important

	Init_DS18B20();
	WriteOneChar(0xCC); 	//Skip read serial number column number of operations
	WriteOneChar(0xBE); 	//Read the temperature register, etc. (a total of 9 registers readable) is the temperature of the first two

	delay_18B20(100);

	a=ReadOneChar();    	//Read the low temperature
	b=ReadOneChar();   		//Read the high temperature
	temp1=b<<4;
	temp1+=(a&0xf0)>>4;
	temp2=a&0x0f;
  temp=((b*256+a)>>4);    //In addition to the current collection temperature of 16 was the actual temperature
}
//////////////////////////////////////////////////////
 void start(void) 
 {				
 scl=1;
 sda=1;	
 _nop_();
 _nop_();
 sda=0;
 _nop_();
 scl=0;
 }
 void stop(void)	
 {	 
 scl=0;
 _nop_();
 sda=0;
 _nop_();
 scl=1;
 _nop_();
 sda=1;
 }
 bit write(unsigned char x)
 {	
 unsigned char i;
 bit k;	
 for(i=0;i<8;i++)
 {
 sda=(x&0x80);
 scl=1;					  
 _nop_();
 _nop_();			  
 scl=0;
 x<<=1;
 }
 sda=1;
 scl=1;
 _nop_();
 _nop_();
 k=sda ;
 scl=0;
 _nop_();	 
 return k ;
 }
 unsigned char read(bit ack)
 {	
 unsigned char Data,i;
 sda=1;	
 for(i=0;i<8;i++)
 {
 scl=1; 
 Data<<=1;
 Data=Data|sda;
 scl=0;
 }
 scl =0;	 	
 sda=ack;
 scl=1; 
 _nop_();
 _nop_();
 scl=0;
 _nop_();
 sda = 1;
 scl = 1;
 return Data;
 }
 void read_ds(void)
 {		
 int i;
 start();
 write(0xd0);
 write(0x00);
 start();
 write(0xd1);
 for(i=0;i<6;i++)
 time[i] = read(0);	
 time[6] = read(1);
 stop(); 	  
 }
 void write_ds(void)
 {
 unsigned char t;
 start();
 write(0xd0);
 write(0x0);
 for(t=0;t<7;t++)
 write(time[t]);
 stop();
 }
 void am_lich (bit k)
 {	
 unsigned int t;
 if((time[2]==0 & time[1] ==0 & time[0] < 3) | (k==1) ) //Tinh lich 00h00p03s
 {
 t = tinhlich(time[4],time[5],time[6]);			
 ngay_al=t & 0xff;
 thang_al= t >> 8;	
 };		
 }
 unsigned char tang(unsigned char bcd,unsigned char min,unsigned char max)
 {	
 if(bcd>=max) bcd = min;
 else if ((bcd& 0xf)==9)  bcd = bcd + 0x10 - 0x9;   
 else bcd++;
 return bcd;
 }
 unsigned char giam(unsigned char bcd,unsigned char min,unsigned char max)
 {
 if(bcd<=min) bcd = max;
 else if ((bcd& 0xf)==0)  bcd = bcd - 0x10 + 0x9; 	    
 else bcd--;
 return bcd;
 }
void scan_key (void)
{
 static unsigned char l;
 if(menu_key==0)
 {
 delay(10);
 if(menu_key==0)
 {
 while(menu_key==0 & l < 20){ l++; delay(10);};
 delay(10);
 if(l<20)
 {
 mode++;
 if( mode  > 7 )
 {
 mode = 0;
 write_ds(); 
 am_lich (1);
 }
 }
 if(l>=20)
 {
 mode = 0; 
 am_lich (1);
 }
	}
  }
 else if(up_key==0)
 {
 delay(10);
 if(up_key==0)
 {
 while(up_key==0 & l < 20){ l++; delay(10);};
 delay(10);
 if(l>=20) 
 {
 if	   (mode ==1 ) time[0] = tang(time[0],0   ,0x59);
 else if(mode ==2 ) time[1] = tang(time[1],0   ,0x59);
 else if(mode ==3 ) time[2] = tang(time[2],0   ,0x23);
 else if(mode ==4 ) time[3] = tang(time[3],0x1 ,0x07);
 else if(mode ==5 ) time[4] = tang(time[4],1   ,0x31);
 else if(mode ==6 ) time[5] = tang(time[5],1   ,0x12);
 else if(mode ==7 ) time[6] = tang(time[6],0x1 ,0x20);
 }	
 if(l<20)
 {
 if	   (mode ==1 ) time[0] = tang(time[0],0   ,0x59);
 else if(mode ==2 ) time[1] = tang(time[1],0   ,0x59);
 else if(mode ==3 ) time[2] = tang(time[2],0   ,0x23);
 else if(mode ==4 ) time[3] = tang(time[3],0x1 ,0x07);
 else if(mode ==5 ) time[4] = tang(time[4],1   ,0x31);
 else if(mode ==6 ) time[5] = tang(time[5],1   ,0x12);
 else if(mode ==7 ) time[6] = tang(time[6],0x1 ,0x20);
 }	
 }
 }	
 else if(down_key==0)
 {
 delay(10);
 if(down_key==0)
 {
 while(down_key==0 & l < 20){ l++; delay(10);};
 delay(10);
 if(l>=20)
 {
 if	   (mode ==1 ) time[0] = giam(time[0],0   ,0x59); 
 else if(mode ==2 ) time[1] = giam(time[1],0   ,0x59); 
 else if(mode ==3 ) time[2] = giam(time[2],0   ,0x23); 
 else if(mode ==4 ) time[3] = giam(time[3],0x1 ,0x07); 
 else if(mode ==5 ) time[4] = giam(time[4],1   ,0x31); 
 else if(mode ==6 ) time[5] = giam(time[5],1   ,0x12); 
 else if(mode ==7 ) time[6] = giam(time[6],0x1 ,0x20); 
 }	
 if(l<20)
 {
 if	   (mode ==1 ) time[0] = giam(time[0],0   ,0x59); 
 else if(mode ==2 ) time[1] = giam(time[1],0   ,0x59); 
 else if(mode ==3 ) time[2] = giam(time[2],0   ,0x23); 
 else if(mode ==4 ) time[3] = giam(time[3],0x1 ,0x07); 
 else if(mode ==5 ) time[4] = giam(time[4],1   ,0x31); 
 else if(mode ==6 ) time[5] = giam(time[5],1   ,0x12); 
 else if(mode ==7 ) time[6] = giam(time[6],0x1 ,0x20); 
 }	
 }
 }
 else l = 0;		
 }
 void kiem_tra_ds (void)
 { 
 read_ds();
 if(time[0] & 0x80)
 {
 time[0] = 0x1;
 time[1] = 0x40;
 time[2] = 0x6;
 time[3] = 0x3;
 time[4] = 0x1;
 time[5] = 0x12;
 time[6] = 0x15;
 write_ds(); 
 }
 }
 void main()
 {	
 kiem_tra_ds();
 am_lich (1);
 delay_ms(500);
 lcd_init();
 delay_ms(100);
 lcd_clear();
 delay_ms(300);
 while(1){
 if(mode ==0)
 {
 read_ds();
 ReadTemperature(); 
 am_lich (0);
 }
 lcd_gotoxy(0,0); lcd_puts_amban("  DAM CLOCK V1  ");	
 lcd_gotoxy(0,1); lcd_putchar16_1(((time[2]%100)>> 4)+48); lcd_putchar16_2(((time[2]%100)>> 4)+48);
 lcd_putchar16_1((time[2]& 0xf)+48); 
 lcd_putchar16_2((time[2]& 0xf)+48); 
 lcd_putchar16_1(':');	 
 lcd_putchar16_2(':');
 lcd_putchar16_1(((time[1]%100)>> 4)+48); 
 lcd_putchar16_2(((time[1]%100)>> 4)+48); 
 lcd_putchar16_1((time[1]& 0xf)+48); 
 lcd_putchar16_2((time[1]& 0xf)+48); 
 lcd_putchar16_1(':');	 
 lcd_putchar16_2(':');
 lcd_putchar16_1(((time[0]%100)>> 4)+48); 
 lcd_putchar16_2(((time[0]%100)>> 4)+48); 
 lcd_putchar16_1((time[0]& 0xf)+48); 
 lcd_putchar16_2((time[0]& 0xf)+48);
 lcd_gotoxy(0,2); 
 lcd_putchar16_3(((time[2]%100)>> 4)+48); 
 lcd_putchar16_4(((time[2]%100)>> 4)+48); 
 lcd_putchar16_3((time[2]& 0xf)+48); 
 lcd_putchar16_4((time[2]& 0xf)+48); 
 lcd_putchar16_3(':');		 
 lcd_putchar16_4(':');	
 lcd_putchar16_3(((time[1]%100)>> 4)+48); 
 lcd_putchar16_4(((time[1]%100)>> 4)+48); 
 lcd_putchar16_3((time[1]& 0xf)+48); 
 lcd_putchar16_4((time[1]& 0xf)+48); 
 lcd_putchar16_3(':'); 
 lcd_putchar16_4(':');
 lcd_putchar16_3(((time[0]%100)>> 4)+48);  
 lcd_putchar16_4(((time[0]%100)>> 4)+48); 
 lcd_putchar16_3((time[0]& 0xf)+48); 
 lcd_putchar16_4((time[0]& 0xf)+48);
 lcd_gotoxy(0,4); 
 lcd_puts_amban(" 20");
 lcd_gotoxy(3,4); 
 lcd_putchar_amban(((time[6]%100)>> 4)+48); 
 lcd_putchar_amban((time[6]& 0xf)+48);
 lcd_gotoxy(5,4); 
 lcd_puts_amban(" ");
 lcd_gotoxy(10,4); 
 lcd_puts_amban("  AL  ");
 lcd_gotoxy(6,4); if(time[3]==0x01) { lcd_putchar16_1('.');} else { lcd_putchar16_1(',');}
 lcd_gotoxy(7,4); if(time[3]==0x01) { lcd_putchar16_2('.');} else { lcd_putchar16_2(',');}
 lcd_gotoxy(6,5); if(time[3]==0x01) { lcd_putchar16_3('.');} else { lcd_putchar16_3(',');}
 lcd_gotoxy(7,5); if(time[3]==0x01) { lcd_putchar16_4('.');} else { lcd_putchar16_4(',');}
 lcd_gotoxy(8,4); if(time[3]==0x01) { lcd_putchar16_1('-');} else { lcd_putchar16_1((time[3]& 0xf)+48);}	 
 lcd_gotoxy(9,4); if(time[3]==0x01) { lcd_putchar16_2('-');} else { lcd_putchar16_2((time[3]& 0xf)+48);}		 
 lcd_gotoxy(8,5); if(time[3]==0x01) { lcd_putchar16_3('-');} else { lcd_putchar16_3((time[3]& 0xf)+48);}	 
 lcd_gotoxy(9,5); if(time[3]==0x01) { lcd_putchar16_4('-');} else { lcd_putchar16_4((time[3]& 0xf)+48);}
 lcd_gotoxy(0,5); 
 lcd_putchar(((time[4]%100)>> 4)+48); lcd_putchar((time[4]& 0xf)+48); lcd_putchar('/');
 lcd_gotoxy(3,5); 
 lcd_putchar(((time[5]%100)>> 4)+48); lcd_putchar((time[5]& 0xf)+48);
 lcd_gotoxy(11,5); 
 lcd_putchar(((ngay_al%100)>> 4)+48); lcd_putchar((ngay_al& 0xf)+48); lcd_putchar('/');
 lcd_gotoxy(14,5); 
 lcd_putchar((( thang_al%100)>> 4)+48); lcd_putchar(( thang_al& 0xf)+48);
 lcd_gotoxy(0,6); 
 lcd_puts_4("++++++++++++++++");
 if ( mode == 0) { lcd_gotoxy(3,7); lcd_puts_4("*)(");	 lcd_gotoxy(7,7); lcd_putchar(((temp1%100)/10)+48);  lcd_putchar((temp1%10)+48); lcd_putchar(','); lcd_putchar(((temp2%100)/10)+48); lcd_puts("*C    ");	 }
 else if ( mode == 1) {   
lcd_gotoxy(3,7); lcd_puts("SET Giay  ");}
 else if ( mode == 2) {   
lcd_gotoxy(3,7); lcd_puts("SET Phut  ");}
 else if ( mode == 3) {   
lcd_gotoxy(3,7); lcd_puts("SET Gio   ");}
 else if ( mode == 4) {   
lcd_gotoxy(3,7); lcd_puts("SET Thu   ");}
 else if ( mode == 5) {   
lcd_gotoxy(3,7); lcd_puts("SET Ngay  "); am_lich (1);}
 else if ( mode == 6) {   
lcd_gotoxy(3,7); lcd_puts("SET Thang "); am_lich (1);}
 else if ( mode == 7) {   
lcd_gotoxy(3,7); lcd_puts("SET Nam   "); am_lich (1);}  
 delay_ms(200);
 scan_key(); 
 } 
 }

Code Main chính

#include<regx52.h>
#include <INTRINS.H>
#include"lib\Fonts.c"
#include"lib\LCDG_S68063.c"
#include"Amlich.c"
//#include"Key.c"
#include"Ds18b20.h"
sbit sda =	P3^0;   // SDA
sbit scl =	P3^1;   // SCL


sbit menu_key=P3^7;
sbit up_key=P3^6;
sbit down_key=P3^5;

unsigned char gio,phut,giay,thang_al,ngay_al,mode = 0;
unsigned char time[7];
///////////////////////////////////////////////////////  
void delay(unsigned int i)
{unsigned int j;
	while(i-->0)
		{   
			for(j=0;j<400;j++)
			{
}
}
} 
void delay_ms(unsigned int t)
{
unsigned int x,y;
for(x=0; x<t; x++);
{
for(y=0; y<123; y++);   //delay 1ms
}
}


/*void delay(unsigned int i)
{unsigned int j;
	while(i-->0)
		{   
			for(j=0;j<400;j++)
			{
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// 
void nop(void)
{
	unsigned int j=3;
	while(j-->0) { }
}*/
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 //                    CAC CHUONG TRINH CON GIAO TIEP VOI RTC                   //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//

void start(void) 
   {				
	scl=1;
	sda=1;	
	_nop_();
	_nop_();
	sda=0;
	_nop_();
	scl=0;
   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void stop(void)	//dk stop: 1 su cdoi trang thai tu muc thap len cao tren duong sda trong khi duong				
    {				// slc dang o muc cao
	
	scl=0;
	_nop_();
	sda=0;
	_nop_();
	scl=1;
	_nop_();
	sda=1;
	}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
bit write(unsigned char x)
    {	
	unsigned char i;
	bit k;	
	for(i=0;i<8;i++)
	    {
		sda=(x&0x80);//? 1:0;  //dua bit du lieu ra chan SDA
		scl=1;					  
	   _nop_();
	   _nop_();			  
		scl=0;
		x<<=1;			   //bit co trong so lon hon dc truyen truoc
	    }
	sda=1;
	scl=1; 			   //nhan bit ACK tu SLAVER	bao hieu ket thuc mot byte du lieu
	_nop_();
	_nop_();
	k=sda ; // nhan gia tri ACK
	scl=0;
	_nop_();	 
	 return k ;
    }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
unsigned char read(bit ack)
{	
	unsigned char Data,i;
	sda=1;	
	for(i=0;i<8;i++) // nhan vao 8 bit
	  {
		scl=1; 
	 	Data<<=1;
		Data=Data|sda;
		scl=0;
     	}
	scl =0;	 	
	sda=ack;//master gui bit ACK
	scl=1;  //master nhan/gui bit du lieu(sda) khi scl o muc cao
	_nop_();
	_nop_();
	scl=0;
	_nop_();//du lieu(sda) thay doi khi scl muc thap/
	sda = 1;
	scl = 1;
	return Data;//tra gia tri cho ham
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void read_ds(void)
{		
	int i;
	start();
	write(0xd0);
	write(0x00);
	start();
	write(0xd1);
	for(i=0;i<6;i++)
    time[i] = read(0);	
	time[6] = read(1);
	stop(); 	  
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void write_ds(void)
     {
	unsigned char t;
	start();
	write(0xd0);
	write(0x0);
	for(t=0;t<7;t++)
		write(time[t]);
	stop();
     }
/**********************************************************************************/
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 //             CHUONG TRINH CON THUC HIEN TINH AM LICH                         //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void am_lich (bit k)
{	
	unsigned int t;
	if((time[2]==0 & time[1] ==0 & time[0] < 3) | (k==1) ) //Tinh lich 00h00p03s
	{
		t = tinhlich(time[4],time[5],time[6]);			
		ngay_al=t & 0xff;
		thang_al= t >> 8;	
	};		
}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
 //     CHUONG TRINH CON THUC HIEN VIEC CAI DAT NGAY GIO, THANG NAM             //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
  unsigned char tang(unsigned char bcd,unsigned char min,unsigned char max)// tang so bcd	lên 1 don vi
       {		  // chinh tang so bcd len 1  trong gioi han min,max
	   if(bcd>=max) bcd = min;
	   else if ((bcd& 0xf)==9)  bcd = bcd + 0x10 - 0x9; // neu hang don vi = 9 thi tang hang chuc len 1	    
	   else bcd++;
       return bcd;
         }
  unsigned char giam(unsigned char bcd,unsigned char min,unsigned char max)// giam so bcd xuong 1 don vi
       {		  // giam so bcd di 1
	   if(bcd<=min) bcd = max;
	   else if ((bcd& 0xf)==0)  bcd = bcd - 0x10 + 0x9; // neu hang don vi = 9 thi tang hang chuc len 1	    
	   else bcd--;
       return bcd;
         }
//=======================================================================
void scan_key (void)
{
	static unsigned char l;
  if(menu_key==0) // nut menu
  {
  	delay(10);
	if(menu_key==0)
	{
		while(menu_key==0 & l < 20){ l++; delay(10);};
		delay(10);
		if(l<20) // Nhan de vao cai dat
		            {
		            mode++;
		            if( mode  > 7 )
		                          {
			                         mode = 0;
			                         write_ds(); 
                               am_lich (1);
		                          }
	              }
		if(l>=20) // O cai dat nhan giu thi se thoat vaf khong luu
		            {
								mode = 0; 
                am_lich (1);
								}
	}
  }
	/////////////////////////////////////////////////////////////////////
  else if(up_key==0) // nut down
  {
  	delay(10);
	if(up_key==0)
	{
		while(up_key==0 & l < 20){ l++; delay(10);};
		delay(10);
		if(l>=20) // Nhan giu de tang gia tri cai dat
		            {
	            	if	   (mode ==1 ) time[0] = tang(time[0],0   ,0x59);// tang giay
		          	else if(mode ==2 ) time[1] = tang(time[1],0   ,0x59);// tang phut
		          	else if(mode ==3 ) time[2] = tang(time[2],0   ,0x23);// tang gio
		          	else if(mode ==4 ) time[3] = tang(time[3],0x1 ,0x07);// tang thu
		          	else if(mode ==5 ) time[4] = tang(time[4],1   ,0x31);// tang ngay
		          	else if(mode ==6 ) time[5] = tang(time[5],1   ,0x12);// tang thang
		          	else if(mode ==7 ) time[6] = tang(time[6],0x1 ,0x20);// tang nam
		            }	
		if(l<20) // Nhan de tang
		            {
		          	if	   (mode ==1 ) time[0] = tang(time[0],0   ,0x59);// tang giay
		          	else if(mode ==2 ) time[1] = tang(time[1],0   ,0x59);// tang phut
		          	else if(mode ==3 ) time[2] = tang(time[2],0   ,0x23);// tang gio
		          	else if(mode ==4 ) time[3] = tang(time[3],0x1 ,0x07);// tang thu
		          	else if(mode ==5 ) time[4] = tang(time[4],1   ,0x31);// tang ngay
		          	else if(mode ==6 ) time[5] = tang(time[5],1   ,0x12);// tang thang
		          	else if(mode ==7 ) time[6] = tang(time[6],0x1 ,0x20);// tang nam
		            }	
	}
  }	
	/////////////////////////////////////////////////////////////////////
else if(down_key==0) // nut down
  {
  	delay(10);
	if(down_key==0)
	{
		while(down_key==0 & l < 20){ l++; delay(10);};
		delay(10);
		if(l>=20) // Nhan giu de tang gia tri cai dat
		            {
	            	if	   (mode ==1 ) time[0] = giam(time[0],0   ,0x59);// giam giay
		          	else if(mode ==2 ) time[1] = giam(time[1],0   ,0x59);// giam phut
		          	else if(mode ==3 ) time[2] = giam(time[2],0   ,0x23);// giam gio
		          	else if(mode ==4 ) time[3] = giam(time[3],0x1 ,0x07);// giam thu
		          	else if(mode ==5 ) time[4] = giam(time[4],1   ,0x31);// giam ngay
		          	else if(mode ==6 ) time[5] = giam(time[5],1   ,0x12);// giam thang
		          	else if(mode ==7 ) time[6] = giam(time[6],0x1 ,0x20);// giam nam
		            }	
		if(l<20) // Nhan de tang
		            {
		          	if	   (mode ==1 ) time[0] = giam(time[0],0   ,0x59);// giam giay
		          	else if(mode ==2 ) time[1] = giam(time[1],0   ,0x59);// giam phut
		          	else if(mode ==3 ) time[2] = giam(time[2],0   ,0x23);// giam gio
		          	else if(mode ==4 ) time[3] = giam(time[3],0x1 ,0x07);// giam thu
		          	else if(mode ==5 ) time[4] = giam(time[4],1   ,0x31);// giam ngay
		          	else if(mode ==6 ) time[5] = giam(time[5],1   ,0x12);// giam thang
		          	else if(mode ==7 ) time[6] = giam(time[6],0x1 ,0x20);// giam nam
		            }	
	}
  }
  else l = 0;		
}
//=======================================================================
void kiem_tra_ds (void)
{
  
  read_ds();
	if(time[0] & 0x80) // kiem tra xem ds1307 co chay khong
	{
		time[0] = 0x1;
		time[1] = 0x40;
		time[2] = 0x6;
		time[3] = 0x3;
		time[4] = 0x1;
		time[5] = 0x12;
		time[6] = 0x15;
		write_ds(); 
	}
}
//====================================================================
void main() //Chuong trinh chinh
{	
	kiem_tra_ds();
	am_lich (1);
	delay_ms(500);
	lcd_init();
	delay_ms(100);
	lcd_clear();
	delay_ms(300);
	while(1){
		
		
if(mode ==0)
		    {
        read_ds();
        ReadTemperature(); 
        am_lich (0);
				}
					
		
		
 
	
	      lcd_gotoxy(0,0);
	      lcd_puts_amban("  DAM CLOCK V1  ");
/////////////////////////////////////////////////////////////////		
		    lcd_gotoxy(0,1);
        lcd_putchar16_1(((time[2]%100)>> 4)+48);  //Chuc
        lcd_putchar16_2(((time[2]%100)>> 4)+48);  //Chuc
        lcd_putchar16_1((time[2]& 0xf)+48);	//Don vi
        lcd_putchar16_2((time[2]& 0xf)+48);	//Don vi
        lcd_putchar16_1(':');	//Don vi		
        lcd_putchar16_2(':');	//Don vi
        lcd_putchar16_1(((time[1]%100)>> 4)+48);  //Chuc
        lcd_putchar16_2(((time[1]%100)>> 4)+48);  //Chuc
        lcd_putchar16_1((time[1]& 0xf)+48);	//Don vi
        lcd_putchar16_2((time[1]& 0xf)+48);	//Don vi
        lcd_putchar16_1(':');	//Don vi		
        lcd_putchar16_2(':');	//Don vi
        lcd_putchar16_1(((time[0]%100)>> 4)+48);  //Chuc
        lcd_putchar16_2(((time[0]%100)>> 4)+48);  //Chuc
        lcd_putchar16_1((time[0]& 0xf)+48);	//Don vi
        lcd_putchar16_2((time[0]& 0xf)+48);	//Don vi
			
		    lcd_gotoxy(0,2);
        lcd_putchar16_3(((time[2]%100)>> 4)+48);  //Chuc
        lcd_putchar16_4(((time[2]%100)>> 4)+48);  //Chuc
        lcd_putchar16_3((time[2]& 0xf)+48);	//Don vi
        lcd_putchar16_4((time[2]& 0xf)+48);	//Don vi
        lcd_putchar16_3(':');	//Don vi		
        lcd_putchar16_4(':');	//Don vi
        lcd_putchar16_3(((time[1]%100)>> 4)+48);  //Chuc
        lcd_putchar16_4(((time[1]%100)>> 4)+48);  //Chuc
        lcd_putchar16_3((time[1]& 0xf)+48);	//Don vi
        lcd_putchar16_4((time[1]& 0xf)+48);	//Don vi
        lcd_putchar16_3(':');	//Don vi		
        lcd_putchar16_4(':');	//Don vi
        lcd_putchar16_3(((time[0]%100)>> 4)+48);  //Chuc
        lcd_putchar16_4(((time[0]%100)>> 4)+48);  //Chuc
        lcd_putchar16_3((time[0]& 0xf)+48);	//Don vi
        lcd_putchar16_4((time[0]& 0xf)+48);	//Don vi
////////////////////////////////////////////////////////////////////
	      lcd_gotoxy(0,4);
	      lcd_puts_amban(" 20");
		    lcd_gotoxy(3,4);
        lcd_putchar_amban(((time[6]%100)>> 4)+48);  //Chuc
        lcd_putchar_amban((time[6]& 0xf)+48);	//Don vi
		    lcd_gotoxy(5,4);
	      lcd_puts_amban(" ");
				
	      lcd_gotoxy(10,4);
	      lcd_puts_amban("  AL  ");
	
	      lcd_gotoxy(6,4);
				      if(time[3]==0x01) { lcd_putchar16_1('.');} // Chu C
         else                   { lcd_putchar16_1(',');} // Chu T
	      lcd_gotoxy(7,4);
				      if(time[3]==0x01) { lcd_putchar16_2('.');} // Chu C
         else                   { lcd_putchar16_2(',');} // Chu T
	      lcd_gotoxy(6,5);
				      if(time[3]==0x01) { lcd_putchar16_3('.');} // Chu N
         else                   { lcd_putchar16_3(',');} // Chu T
	      lcd_gotoxy(7,5);
				      if(time[3]==0x01) { lcd_putchar16_4('.');} // Chu N
         else                   { lcd_putchar16_4(',');} // Chu T
	      lcd_gotoxy(8,4);
				      if(time[3]==0x01) { lcd_putchar16_1('-');} // Chu N
         else                   { lcd_putchar16_1((time[3]& 0xf)+48);} // Chu THU		 
	      lcd_gotoxy(9,4);
				      if(time[3]==0x01) { lcd_putchar16_2('-');} // Chu N
         else                   { lcd_putchar16_2((time[3]& 0xf)+48);} // Chu THU				 
	      lcd_gotoxy(8,5);
				      if(time[3]==0x01) { lcd_putchar16_3('-');} // Chu N
         else                   { lcd_putchar16_3((time[3]& 0xf)+48);} // Chu THU		 
	      lcd_gotoxy(9,5);
				      if(time[3]==0x01) { lcd_putchar16_4('-');} // Chu N
         else                   { lcd_putchar16_4((time[3]& 0xf)+48);} // Chu THU
/////////////////////////////////////////////////////////////////////
				lcd_gotoxy(0,5);      // ngay dl
        lcd_putchar(((time[4]%100)>> 4)+48);  //Chuc
        lcd_putchar((time[4]& 0xf)+48);	//Don vi
		    lcd_putchar('/');
		    lcd_gotoxy(3,5);
        lcd_putchar(((time[5]%100)>> 4)+48);  //Chuc
        lcd_putchar((time[5]& 0xf)+48);	//Don vi
				 
		    lcd_gotoxy(11,5);
        lcd_putchar(((ngay_al%100)>> 4)+48);  //Chuc
        lcd_putchar((ngay_al& 0xf)+48);	//Don vi
		    lcd_putchar('/');
		    lcd_gotoxy(14,5);
        lcd_putchar((( thang_al%100)>> 4)+48);  //Chuc
        lcd_putchar(( thang_al& 0xf)+48);	//Don vi
////////////////////////////////////////////////////////////////////
	      lcd_gotoxy(0,6);
	      lcd_puts_4("++++++++++++++++");
/////////////////////// nhiet do /////////////////////////				


				          if ( mode == 0) {	      lcd_gotoxy(3,7);
	                                        lcd_puts_4("*)(");	
				
		                                      lcd_gotoxy(7,7);
                                          lcd_putchar(((temp1%100)/10)+48);  //Chuc
                                          lcd_putchar((temp1%10)+48);	//Don vi
		                                      lcd_putchar(',');
                                          lcd_putchar(((temp2%100)/10)+48);  //Chuc
				                                  lcd_puts("*C    ");	
                                   }
						 else if ( mode == 1) {   lcd_gotoxy(3,7); lcd_puts("SET Giay  ");}
						 else if ( mode == 2) {   lcd_gotoxy(3,7); lcd_puts("SET Phut  ");}
						 else if ( mode == 3) {   lcd_gotoxy(3,7); lcd_puts("SET Gio   ");}
						 else if ( mode == 4) {   lcd_gotoxy(3,7); lcd_puts("SET Thu   ");}
						 else if ( mode == 5) {   lcd_gotoxy(3,7); lcd_puts("SET Ngay  "); am_lich (1);}
						 else if ( mode == 6) {   lcd_gotoxy(3,7); lcd_puts("SET Thang "); am_lich (1);}
						 else if ( mode == 7) {   lcd_gotoxy(3,7); lcd_puts("SET Nam   "); am_lich (1);} 				
				
		    delay_ms(200);
			
				
////////////////////////////////////////////////////////////////////
				scan_key();
				
}
}

Cài đặt

  • Nhấn phím menu ( P3.7 ) để vào chế độ cài đặt, nhấn up hoặc down để tăng giảm giá trị, khi cài xong Năm nhấn menu lần nữa thì sẽ thoát menu cài đặt về màn hình chính và lưu lại. Nếu đang cài các giá trị mà không muốn cài nữa thì nhấn giữ nút Menu, mạch sẽ trở về màn hình chính và không lưu cài đặt
  • Phím up,down khi cài đặt có thể nhấn giữ để tăng giá trị nhanh hơn.

Tải Phiên Bản V1.0 – Full Code

File nén gồm code hex, full code C, file nguyên lý và sơ đồ chân để vẽ mạch in, hiện tại mình đang dùng board nên chưa có file mạch in, mọi người chịu khó vẽ lại vậy.

Muốn mở mạch nguyên lý (File mô phỏng) hãy sử dụng phần mềm Proteus 7.8 (Bấm vào để tải)

GLCD HOMEPHONE CLOCK V1FW0 BY LEDACDAM

Hoặc

Link Mediafire

Tải Phiên Bản V1.1 – File Hex

  • Thêm còi báo đúng giờ từ 21 – 6h
  • Hẹn giờ
  • Đổi dấu ngát ngày
  • Hiển thị ngày lễ tết trong năm

GLCD CLOCK HOMEPHONE V1FW1 BY LEDACDAM

Hoặc

Link Mediafire

Video Demo Gphone Clock ( Dam Clock V1.0 )

Nguồn: Damclock

  • Share on Facebook
  • Tweet on Twitter

Thuộc chủ đề:LCD, Vi điều khiển Tag với:8051, code, Dam clock, đồng hồ, gphone clock

Bài viết trước « Đồng hồ thời gian thực (Read Time Clock – DS1307) sử dụng Arduino
Bài viết sau Đọc nhiệt độ, độ ẩm (DHT11) sử dụng Arduino Uno »

Reader Interactions

Bình luận

    Để lại một bình luận Hủy

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

  1. Nguyễn Phùng Sơn viết

    17/01/2025 lúc 23:04

    Có bán bộ màn hình này không bạn.

    Bình luận
    • admin viết

      24/01/2025 lúc 09:58

      Dạ mình hiện không sẵn bộ này bạn ạ

      Bình luận

Sidebar chính

Zalo hỏi đáp 24/7

Theo dõi qua mạng xã hội

  • Facebook

Bạn đang tìm gì?

Bài viết mới nhất

Các loại nguồn xung thông dụng và nguyên lý hoạt động

Các loại nguồn xung thông dụng và nguyên lý hoạt động

15/06/2025

Relay điện tử - Sử dụng TRIAC để đóng cắt thiết bị

Relay điện tử – Sử dụng TRIAC để đóng cắt thiết bị

15/06/2025

Mạch ổn áp cố định, IC ổn áp

Mạch ổn áp cố định, IC ổn áp

15/06/2025

Giám sát nhiệt độ, độ ẩm (DHT11) thông qua Thingspeak bằng NodeMCU ESP8266

15/06/2025

Phát hiện mưa (Rain Sensor) sử dụng NodeMCU ESP8266

15/06/2025

Danh mục

  • DỰ ÁN & MẠCH ĐIỆN (241)
    • Công nghiệp (16)
    • Dân dụng (29)
    • Điện tử ứng dụng (178)
      • Audio / Amplifiers (34)
      • Biến đổi AC và DC (24)
      • Cảm biến (40)
      • Động cơ bước (5)
      • Kiểm thử và đo đạc (23)
      • LCD (15)
      • LED (20)
      • Mạch linh tinh (27)
      • Nguồn điện (42)
      • Pin sạc/Acquy và mạch sạc (24)
      • RF – FM (5)
      • Robotic (2)
    • HOME AUTOMATION (23)
    • Lập trình (82)
      • ARDUINO PROJECT (39)
      • ESP32 PROJECT (6)
      • ESP8266 PROJECT (17)
      • RASPBERRY PI PROJECT (9)
      • Vi điều khiển (24)
    • Nixie Clock (3)
  • Kiến thức căn bản (170)
    • Arduino (36)
    • Điện tử cơ bản (77)
    • Điện tử số (9)
    • IN 3D (9)
    • Nixie Tube (13)
    • PCB (18)
    • Raspberry Pi (10)
    • Vi điều khiển (16)

Footer

Bài viết mới nhất

  • Các loại nguồn xung thông dụng và nguyên lý hoạt động
  • Relay điện tử – Sử dụng TRIAC để đóng cắt thiết bị
  • Mạch ổn áp cố định, IC ổn áp
  • Giám sát nhiệt độ, độ ẩm (DHT11) thông qua Thingspeak bằng NodeMCU ESP8266
  • Phát hiện mưa (Rain Sensor) sử dụng NodeMCU ESP8266
  • Điều khiển thiết bị thông qua Cayenne Mydevices và NodeMCU ESP8266

Bình luận mới nhất

  • admin trong Nguyên lý cảm biến siêu âm chống nước JSN-SR04T và sơ đồ mạch
  • Rohan trong Nguyên lý cảm biến siêu âm chống nước JSN-SR04T và sơ đồ mạch
  • Tên gì kệ tui trong Mạch Ampli 19W dùng IC LA4440
  • admin trong Đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307

Tìm kiếm

Tất cả nội dung trên website chỉ dùng để tham khảo. Chúng tôi không chịu trách nhiệm về thông tin thành viên đăng tải lên website và xóa bài viết khi có vi phạm bản quyền tác giả.