历史上的今天
返回首页

历史上的今天

今天是:2025年06月25日(星期三)

正在发生

2018年06月25日 | 电子时钟(51单片机定时器,1602液晶)

2018-06-25 来源:eefocus

电路图:



代码:

#include  

#include  

#include  

#include  

#define uint unsigned int  

#define uchar unsigned char  

  

uint num,A_num,x=0;  

uint h,m,s,year=2012,month=1,day=22,lcd_x=0,lcd_y=0;  

  

uchar code Zifu[]="0123456789";  

  

sbit beep = P2^3;  

  

sbit LCD_EN = P3^4;  

sbit LCD_RS = P3^5;  

  

sbit duan = P2^6;  

sbit wei = P2^7;  

  

sbit key_A = P3^6;  

sbit key_B = P3^7;  

  

void delay_1ms(uchar x){  

    uchar i,j;  

    for(j=0;j

        for(i=0;i<110;i++);  

}  

  

void write_command(uchar command){  

    LCD_RS = 0;  

    LCD_EN = 0;  

    P0 = command;  

    delay_1ms(2);  

    LCD_EN = 1;         //EN 由1 -- 0 完成 有效数据 的 锁存  

    delay_1ms(2);  

    LCD_EN = 0;  

}  

  

void write_data(uchar fuck){  

    LCD_RS = 1;  

    LCD_EN = 0;  

    P0 = fuck;  

    delay_1ms(2);  

    LCD_EN = 1;  

    delay_1ms(2);  

    LCD_EN = 0;  

}  

  

void lcd_post(int X,int Y){         //0,1表征 第一行 和 第二行  

    write_command(0x80+X*(0x40)+Y);  

}  

  

void init(){  

    h=m=s=0;  

    num=A_num=0;  

  

    LCD_EN=0;  

    write_command(0x38);  

    write_command(0x0c);  

    //write_command(0x06); //写字符后地址指针加一  

    write_command(0x01);  

  

    TMOD = 0x02;  

    TH0 = 6;  

    TL0 = 6;  

    EA = 1;  

    ET0 = 1;  

    TR0 = 1;  

  

/*时分秒*/   

    lcd_post(0,0); write_data(Zifu[h/10]);  

    lcd_post(0,1); write_data(Zifu[h%10]);  

  

    lcd_post(0,2); write_data(':');  

  

    lcd_post(0,3); write_data(Zifu[m/10]);  

    lcd_post(0,4); write_data(Zifu[m%10]);  

  

    lcd_post(0,5); write_data(':');  

  

    lcd_post(0,6); write_data(Zifu[s/10]);  

    lcd_post(0,7); write_data(Zifu[s%10]);  

  

/*年月日*/  

    lcd_post(1,6); write_data(Zifu[year/1000]);  

    lcd_post(1,7); write_data(Zifu[(year%1000)/100]);  

    lcd_post(1,8); write_data(Zifu[(year%100)/10]);  

    lcd_post(1,9); write_data(Zifu[year%10]);  

  

    lcd_post(1,10); write_data('-');  

  

    lcd_post(1,11); write_data(Zifu[month/10]);  

    lcd_post(1,12); write_data(Zifu[month%10]);  

  

    lcd_post(1,13); write_data('-');  

  

    lcd_post(1,14); write_data(Zifu[day/10]);  

    lcd_post(1,15); write_data(Zifu[day%10]);  

}  

  

void di(){  

    beep=0; delay_1ms(100); beep=1;  

}  

  

void keyscan(){  

    if(key_A==0){  

        delay_1ms(3);  

        if(key_A==0){  

            A_num++;      

            di();  

            switch(A_num){  

                case 1:                           //时  

                    TR0=0;                          

                    lcd_post(0,1);  

                    write_command(0x0f);  

                    break;  

                case 2:lcd_post(0,4);break;       //分  

                case 3:lcd_post(0,7);break;       //秒  

  

                case 4:lcd_post(1,6);break;       //年  

                case 5:lcd_post(1,7);break;  

                case 6:lcd_post(1,8);break;  

                case 7:lcd_post(1,9);break;  

  

                case 8:lcd_post(1,12);break;          //月  

                case 9:lcd_post(1,15);break;          //日  

                case 10:  

                    A_num=0;  

                    write_command(0x0c);  

                    TR0=1;  

                    break;  

            }         

        }  

        while(!key_A);  

    }  

    if(A_num!=0){  

        if(key_B==0){  

            delay_1ms(3);  

            if(key_B==0){     

                di();  

                  

                switch(A_num){  

                case 1:  

                    h=(++h)%24;  

                    lcd_post(0,0); write_data(Zifu[h/10]);  

                    lcd_post(0,1); write_data(Zifu[h%10]);  

                    break;        //时  

                case 2:  

                    m=(++m)%60;  

                    lcd_post(0,3); write_data(Zifu[m/10]);  

                    lcd_post(0,4); write_data(Zifu[m%10]);  

                    break;        //分  

                case 3:  

                    s=(++s)%60;  

                    lcd_post(0,6); write_data(Zifu[s/10]);  

                    lcd_post(0,7); write_data(Zifu[s%10]);  

                    break;        //秒  

  

                case 4:           //年  

                    lcd_post(1,6);  

                    write_data(Zifu[(++x)%10]);  

                    break;          

                case 5:  

                    lcd_post(1,7);  

                    write_data(Zifu[(++x)%10]);  

                    break;  

                case 6:  

                    lcd_post(1,8);  

                    write_data(Zifu[(++x)%10]);  

                    break;  

                case 7:  

                    lcd_post(1,9);  

                    write_data(Zifu[(++x)%10]);  

                    break;  

  

                case 8:  

                    month=(++month)%13;  

                    lcd_post(1,11); write_data(Zifu[month/10]);  

                    lcd_post(1,12); write_data(Zifu[month%10]);  

                    break;        //月  

                case 9:  

                    day=(++day)%32;  

                    lcd_post(1,14); write_data(Zifu[day/10]);  

                    lcd_post(1,15); write_data(Zifu[day%10]);  

                    break;        //日  

                case 10:break;  

                }write_command(0x10);         

            }  

            while(!key_B);  

        }  

    }  

}  

  

void main()  

{  

    init();  

    while(1){  

        if(num==3686){  

            num=0;  

            s++;  

            if(s==60){  

                s=0;  

                m++;  

                if(m==60){  

                    m=0;  

                    h++;  

                    if(h==24)h=0;  

                    lcd_post(0,0); write_data(Zifu[h/10]);  

                    lcd_post(0,1); write_data(Zifu[h%10]);  

                }  

                lcd_post(0,3); write_data(Zifu[m/10]);  

                lcd_post(0,4); write_data(Zifu[m%10]);  

            }  

            lcd_post(0,6); write_data(Zifu[s/10]);  

            lcd_post(0,7); write_data(Zifu[s%10]);  

        }  

        keyscan();  

          

    }  

}  

  

void T0_time() interrupt 1  

{  

    num++;  

}  


推荐阅读

史海拾趣

芯邦(Chipsbank)公司的发展小趣事

为了进一步扩大业务规模,提升研发实力,芯邦科技于2023年成功在上交所科创板上市,并计划募资6亿元用于投建移动存储控制芯片等项目。这一举措不仅为芯邦提供了更多的资金支持,也为其未来的发展奠定了坚实的基础。

Chicago Miniature公司的发展小趣事

随着LED技术的兴起,CML敏锐地捕捉到了这一趋势,并成为第一家引进LED灯具的公司。这一决策为公司带来了巨大的发展机遇。CML不断投入研发资源,推出了一系列具有创新性的LED产品,不仅提高了照明效率,还降低了能耗。这使得CML在微型照明领域逐渐取得了领先地位,并赢得了广泛的客户基础。

芯海科技(CHIPSEA)公司的发展小趣事

芯海科技自2003年成立以来,便专注于高精度ADC(模数转换器)芯片的研发。在成立初期,公司面临国际巨头的激烈竞争,但凭借对技术的执着追求,成功打破了国内市场的垄断。公司推出的高精度ADC芯片在电能计量领域得到了广泛应用,为工业领域提供了稳定、可靠的解决方案。这一阶段的成功为芯海科技在电子行业奠定了坚实的基础。

诚芯微(CXW)公司的发展小趣事

在2009年,诚芯微(CXW)公司在深圳成立,标志着其在中国电子行业的初步涉足。公司创始人凭借对集成电路设计领域的深刻理解和前瞻性的市场洞察,决定专注于电源芯片的研发与设计。初期,公司面临着资金紧张、技术储备不足等挑战,但创始人带领团队坚持自主研发,逐步积累了技术实力。

ARCOL公司的发展小趣事

品质是ARCOL公司的核心竞争力。公司始终坚持以质量为核心,建立了严格的质量管理体系。从原材料的采购到产品的出厂,每一个环节都经过严格把关,确保产品的质量和性能达到最高标准。同时,ARCOL还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

Alan Industries Inc公司的发展小趣事

随着国内市场的饱和,Alan Industries Inc.开始将目光投向海外市场。公司制定了国际化发展战略,通过设立海外分公司、参加国际展会等方式,积极开拓国际市场。同时,公司还加强了对国际市场的调研和分析,根据不同地区的市场需求和文化特点,推出了针对性的产品和服务。这些努力使得公司在国际市场上也取得了不俗的成绩。

问答坊 | AI 解惑

电容问题

一、在220V继电器线圈处串连一电容 (目的 : 一通电让继电器工作2秒 然后关掉) 二、在12V继电器线圈并联一电容 目的是让其断电后继续工作10秒 三、以上若能实现 请问要 多少的uf的电容…

查看全部问答>

linux下 vivi的下载命令load flash 的路径是什么!

比如我要用vivi下载内核,用“load flash kernel x”命令,但是这个内核映像文件要放在哪里,我用的是minicom? …

查看全部问答>

飞思卡尔单片机与rf905的通信spi通信问题

我是一个新人,对飞思卡尔单片机使用的不是很熟,最近在使用飞思卡尔128单片机和nrf905之间做一个无线传输的小协议,选择飞思卡尔为主机模式,并且作为接收终端,用于接收我的发送数据。我的发送端是用51做到已经好使了,没有问题了(发送端暂且不 ...…

查看全部问答>

请求 继续团购 MSP430 LaunchPad MSP-EXP430G2 25元不用包邮啊

请求 继续团购 MSP430 LaunchPad MSP-EXP430G2  25元不用包邮啊 30元 也可以试试 [ 本帖最后由 ppiicc 于 2012-5-3 22:53 编辑 ]…

查看全部问答>

我的富士通开发板DIY总结

富士通的板子我是第一次接触。给我印象最深的是。富士通的用户手册写的十分特别。条理特别清楚。 通过这次活动我学到了富士的AD及屏幕显示相关。明白了点显示。知道了示波显示的基本原理。 这个芯片十分复杂。不是一天两天就可完全拿下的。日后还 ...…

查看全部问答>

常用晶振封装尺寸

画430PCB的时候,发现以前没做过32768Hz的手表晶体的封装,然后再网上找到这样一个有很多晶振封装的网页,转成了PDF跟大家分享下。 …

查看全部问答>

protel99se软件

小弟想学习线路板设计,谁有protel99se 的软件,帮帮忙给上传一份…

查看全部问答>

晒设计方案+STM32F429i开发板之未完成部分

     这个算是个遗憾帖吧。     本来还准备了两个实验,但鉴于时间问题,不能在活动结束前完成了。不过等做完我会来让大家看看的。      其中一个是GPS的实验,模块已经买回来了,只 ...…

查看全部问答>

寻求AD13中如何在同个内电POWER层中划分多个电源网络?

新手第一次画4层PCB板,目前已初步弄懂了plane和layer的区别,但看到一些高手绘制的多层板中,可以在同一个power内电层上划分不同的电源网络,比如在power内电层上,划分+3.3v,+5v,+12v等电源。但在实际练习中,新增一个power层,导入PCB封装后,双 ...…

查看全部问答>

(改)项目又开始构想了----求项目小组成员

本帖最后由 wugx 于 2016-7-27 17:54 编辑 项目又开始构想了,大概是数据采集,存储,分析统计,显示等方面的,主要硬件载体是移动终端,目的是为了减轻负担,方便办公,搞研究等,由用户自己定义显示什么、如何计算(我们提供类似模型),我们只是 ...…

查看全部问答>