Đồng hồ kỹ thuật số sử dụng vi điều khiển 89C52 / 89S52

Print
digital clock.JPGĐây là một trong những projects đơn giản cho những người mớibắt đầu.Projects nhỏ này sẽ cung cấp cho bạn một sự hiểu biết rõ ràng về lập trình vi điều khiển.Projects đồng hồ kỹ thuật số bạn sẽ có cái nhìn sâu sắc về cách thức vi điều khiển được sử dụng để làm cho nó hoạt động như một đồng hồ kỹ thuật số.

digital clock.JPG
Thành phần:
Sơ đồ mạch

schematic diagram.JPG

Code:
MÃ:
#include "REGX52.H"[/I][/B] [B][I]#include "delay.h"[/I][/B] [B][I]#include "lcd.h"[/I][/B] [B][I]void main(void)[/I][/B] [B][I]{[/I][/B] [B][I]int hr=0; /*initiate hour=0 */[/I][/B] [B][I]int min=0; /*initiate minutes=0 */[/I][/B] [B][I]int sec=0; /*initiate seconds=0 */[/I][/B] [B][I]P1=0xff; /*set port 1 as input port */[/I][/B] [B][I]P2=0x00; /*set port 2 as output port*/[/I][/B] [B][I]while(1)[/I][/B] [B][I]{ LCD_INIT(); /*initialize LCD*/[/I][/B] [B][I]if (P1_4==0)/*if P1_4 is grounded enter the 12hr loop */[/I][/B] [B][I]{[/I][/B] [B][I]for (sec=0;sec<60;sec )[/I][/B] [B][I]{[/I][/B] [B][I]LCD_DisplayNum(hr,2);[/I][/B] [B][I]LCD_STRING(":");[/I][/B] [B][I]LCD_DisplayNum(min,2);[/I][/B] [B][I]LCD_STRING(":");[/I][/B] [B][I]LCD_DisplayNum(sec,2);[/I][/B] [B][I]LCD_STRING(" (12 HR)");[/I][/B] [B][I]delay_sec(1);[/I][/B] [B][I]LCD_CLEAR();[/I][/B] [B][I]if (sec==59)[/I][/B] [B][I]{[/I][/B] [B][I]min=min 1;[/I][/B] [B][I]if(min==60)[/I][/B] [B][I]{[/I][/B] [B][I]if(hr==11&&min==60&&sec==59)[/I][/B] [B][I]{hr=0;min=0;sec=0;}[/I][/B] [B][I]else[/I][/B] [B][I]{ hr=hr 1;[/I][/B] [B][I]min=0;}[/I][/B] [B][I]}[/I][/B] [B][I]}[/I][/B] [B][I]} }[/I][/B] [B][I]else[/I][/B] [B][I]{[/I][/B] [B][I]if(P1_5==0) /*if P1_5 is grounded enter the 24hr loop */[/I][/B] [B][I]{[/I][/B] [B][I]for (sec=0;sec<60;sec )[/I][/B] [B][I]{[/I][/B] [B][I]LCD_DisplayNum(hr,2);[/I][/B] [B][I]LCD_STRING(":");[/I][/B] [B][I]LCD_DisplayNum(min,2);[/I][/B] [B][I]LCD_STRING(":");[/I][/B] [B][I]LCD_DisplayNum(sec,2);[/I][/B] [B][I]LCD_STRING(" (24 HR)");[/I][/B] [B][I]delay_sec(1);[/I][/B] [B][I]LCD_CLEAR();[/I][/B] [B][I]if (sec==59)[/I][/B] [B][I]{[/I][/B] [B][I]min=min 1;[/I][/B] [B][I]if(min==60)[/I][/B] [B][I]{[/I][/B] [B][I]if(hr==23&&min==60&&sec==59)[/I][/B] [B][I]{hr=0;min=0;sec=0;}[/I][/B] [B][I]else[/I][/B] [B][I]{ hr=hr 1;[/I][/B] [B][I]min=0;}[/I][/B] [B][I]}[/I][/B] [B][I]}[/I][/B] [B][I]} }}[/I][/B] [B][I]LCD_INIT();[/I][/B] [B][I]}[/I][/B] [B][I]}[/I][/B] [B][I]