首页 > 代码库 > 单片机第15课:时钟
单片机第15课:时钟
#include<reg51.h> /* ¹¦ÄÜ£ºLCDÏÔʾʱÖÓ¡¢ÈÕÆÚ¡¢ºÍÐÇÆÚ ×÷Õߣºluluc */ #define uint unsigned int #define uchar unsigned char uchar code table_row1[] = " 2014-10-20 MON "; uchar code table_row2[] = " 00-00-00 "; sbit lcd_E = P2^7; sbit lcd_RS = P2^6; sbit lcd_RW = P2^5; sbit key1 = P1^0; sbit key2 = P1^1; sbit key3 = P1^2; sbit key4 = P1^3; char flag_t0,hour,minute,second,count_key1; void write_lcd_comm(uchar comm); void write_lcd_data(uchar lcd_data); void delay(uchar z); void init_lcd(); void init_t0(); void init_v(); void display_on_lcd(uchar where, uchar what); void clock_work_modle(); void key_scan(); void main() { init_lcd(); init_v(); init_t0(); while(1) { //ʱÖӵŤ×÷ÔÀí clock_work_modle(); //ɨÃèÊÇ·ñÓа´¼ü°´Ï key_scan(); } } /* ¹¦ ÄÜ£º°´¼üɨÃè ²Î Êý£º ·µ»ØÖµ£ºÎÞ */ void key_scan() { //key1---Í£Ö¹ÅÜ±í¡¢¶¨Î» if(key1 == 0) { //ÑÓʱһÏ delay(10); //Ôٴμì²â if(key1 == 0) { //ȷʵÊÇ°´ÏÂÁË //µÈ´ýËÉÊÖ£¬ËÉÊÖÖ®ºó¶¨Ê±Æ÷Í£Ö¹¹¤×÷ while(!key1); delay(10); while(!key1); count_key1++; switch(count_key1) { case 1: TR0 = 0; //ͬʱ¶¨Î»µ½Ãë //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 11); break; case 2: //ͬʱ¶¨Î»µ½·Ö //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 8); break; case 3: //ͬʱ¶¨Î»µ½Ê± //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 5); break; case 4: TR0 = 1; count_key1 = 0; break; } } } //°´¼ü2±»°´Ï if(count_key1 != 0) { if(key2 == 0) { //ÑÓʱһÏ delay(10); //Ôٴμì²â if(key2 == 0) { //ȷʵÊÇ°´ÏÂÁË //µÈ´ýËÉÊÖ£¬ËÉÊÖÖ®ºó¶¨Ê±Æ÷Í£Ö¹¹¤×÷ while(!key2); delay(10); while(!key2); switch(count_key1) { case 1: second++; if(second == 60) { second = 0; } display_on_lcd(0x80+0x40+10, second); //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 11); break; case 2: minute++; if(minute == 60) { minute = 0; } display_on_lcd(0x80+0x40+7, minute); //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 8); break; case 3: hour++; if(hour == 24) { hour = 0; } display_on_lcd(0x80+0x40+4, hour); //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 5); break; } } } } //°´¼ü3±»°´Ï if(count_key1 != 0) { if(key3 == 0) { //ÑÓʱһÏ delay(10); //Ôٴμì²â if(key3 == 0) { //ȷʵÊÇ°´ÏÂÁË //µÈ´ýËÉÊÖ£¬ËÉÊÖÖ®ºó¶¨Ê±Æ÷Í£Ö¹¹¤×÷ while(!key3); delay(10); while(!key3); switch(count_key1) { case 1: second--; if(second == -1) { second = 59; } display_on_lcd(0x80+0x40+10, second); //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 11); break; case 2: minute--; if(minute == -1) { minute = 59; } display_on_lcd(0x80+0x40+7, minute); //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 8); break; case 3: hour--; if(hour == -1) { hour = 23; } display_on_lcd(0x80+0x40+4, hour); //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80 + 0x40 + 5); break; } } } } } /* ¹¦ ÄÜ£ºÊ±ÖÓ¹¤×÷ÔÀí ²Î Êý£º ·µ»ØÖµ£ºÎÞ */ void clock_work_modle() { //ÈÃÃëÿ¸ôÒ»Ãë¼Ó1 if(flag_t0 == 20) { flag_t0 = 0; second++; if(second == 60) { second = 0; //·ÖÖÓ¼Ó1 minute++; if(minute == 60) { minute = 0; //·ÖÖÓ¼Ó1 hour++; if(hour == 24) { hour = 0; } //½«·ÖÔÚLCDÉÏÏÔʾ³öÀ´---LCDÉÏÃæÊÇÁ½Î»Êý display_on_lcd(0x80+0x40+4, hour); } //½«·ÖÔÚLCDÉÏÏÔʾ³öÀ´---LCDÉÏÃæÊÇÁ½Î»Êý display_on_lcd(0x80+0x40+7, minute); } //½«ÃëÔÚLCDÉÏÏÔʾ³öÀ´---LCDÉÏÃæÊÇÁ½Î»Êý display_on_lcd(0x80+0x40+10, second); } } /* ¹¦ ÄÜ£º½«Êý×ÖÔÚLCDÉÏÃæÏÔʾ³öÀ´ ²Î Êý£ºuchar where, uchar what ·µ»ØÖµ£ºÎÞ */ void display_on_lcd(uchar where, uchar what) { //»ñÈ¡Á½¸öÊý×Ö£¬Ê®Î»ºÍ¸öλ uchar left_num,right_num; //ÏÔʾµÄλÖà left_num = what/10; right_num = what%10; //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(where); write_lcd_data(0x30+left_num); write_lcd_data(0x30+right_num); } /* ¹¦ ÄÜ£º±äÁ¿³õʼ»¯ ²Î Êý£ºÎÞ ·µ»ØÖµ£ºÎÞ */ void init_v() { //ʱ·ÖÃë second = 0; minute = 0; hour = 0; //KEY1±»°´ÏµĴÎÊý count_key1 = 0; } /* ¹¦ ÄÜ£º¶¨Ê±Æ÷t0³õʼ»¯ ²Î Êý£ºÎÞ ·µ»ØÖµ£ºÎÞ */ void init_t0() { //ÖØÐÂ×°³õÖµ,¶¨Ê±50ms TH0 = (65536-50000)/256; TH0 = (65536-50000)/256; //È·¶¨¶¨Ê±Æ÷µÄ¹¤×÷·½Ê½1 TMOD = 0x01; //¿ªÖÐ¶Ï ET0 = 1; EA = 1; //Æô¶¯¶¨Ê±Æ÷ TR0 = 1; } /* ¹¦ ÄÜ£º¶¨Ê±Æ÷ÖжϷþÎñ³ÌÐò ²Î Êý£ºÎÞ ·µ»ØÖµ£ºÎÞ */ void timer0() interrupt 1 { //ÖØÐÂ×°³õÖµ,¶¨Ê±50ms TH0 = (65536-50000)/256; TH0 = (65536-50000)/256; flag_t0++; } /* ¹¦ ÄÜ£ºLCD³õʼ»¯ ²Î Êý£ºÎÞ ·µ»ØÖµ£ºÎÞ */ void init_lcd() { uchar flag; //ÏÔʾģʽÉèÖà write_lcd_comm(0x38); //ÉèÖÿª¹ØºÍ¹â±êÉèÖà write_lcd_comm(0x0f); write_lcd_comm(0x06); //ÇåÆÁ write_lcd_comm(0x01); //Êý¾ÝÖ¸ÕëÉèÖà write_lcd_comm(0x80); //³õʼ»¯Êý¾Ý for(flag=0; flag<15; flag++) { write_lcd_data(table_row1[flag]); } write_lcd_comm(0x80 + 0x40); //³õʼ»¯Êý¾Ý for(flag=0; flag<12; flag++) { write_lcd_data(table_row2[flag]); } } /* ¹¦ ÄÜ£ºLCDдÃüÁî ²Î Êý£ºuchar comm ·µ»ØÖµ£ºÎÞ */ void write_lcd_comm(uchar comm) { void delay(uchar z); //×¢ÒâʱÐò lcd_RS = 0; lcd_RW = 0; P0 = comm; lcd_E = 1; delay(5); lcd_E = 0; } /* ¹¦ ÄÜ£ºLCDдÊý¾Ý ²Î Êý£ºuchar lcd_data ·µ»ØÖµ£ºÎÞ */ void write_lcd_data(uchar lcd_data) { void delay(uchar z); //×¢ÒâʱÐò lcd_RS = 1; lcd_RW = 0; P0 = lcd_data; lcd_E = 1; delay(5); lcd_E = 0; } /* ¹¦ ÄÜ£ºÑÓʱº¯Êý ²Î Êý£ºuchar z ·µ»ØÖµ£ºÎÞ */ void delay(uchar z) { uint i,j; for(i=110; i>0; i--) for(j=0;j<z; j++); }
单片机第15课:时钟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。