电子时钟(51单片机定时器,1602液晶)

发布者:数据舞者最新更新时间:2018-06-25 来源: eefocus关键字:电子时钟  51单片机  定时器  1602液晶 手机看文章 扫描二维码
随时随地手机看文章

电路图:



代码:

#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++;  

}  


关键字:电子时钟  51单片机  定时器  1602液晶 引用地址:电子时钟(51单片机定时器,1602液晶)

上一篇:51单片机第六弹---LCD液晶显示模块
下一篇:51单片机配合超声波测距以及用1602液晶进行显示

推荐阅读最新更新时间:2024-03-16 16:06

基于51单片机老人防跌倒GSM短信报警系统
1、项目简介 选题指导,项目分享: Lighter-z/嵌入式基地 1.1 系统构成 本设计由STC89C52单片机电路+ADXL345加速度传感器电路+按键电路+蜂鸣器报警电路+DS18B20温度传感器电路+LED灯电路+GSM模块电路+电源电路组成。 1.2 系统功能 1、板子竖直放置的时候,蜂鸣器不报警,板子歪倒一定角度,则蜂鸣器鸣叫报警。一段时间约15s未回复正确状态,GSM发送报警信息给手机:Help me!!。 2、如果温度超过38度,蜂鸣器报警,持续温度过高约15s左右,同时短信报警:has a cold 3、设计带有误报警按键,蜂鸣器报警的时候,如果老人认为是误报警,则按键按下,蜂鸣器停止报警,如果持续问题存在还会
[单片机]
51单片机局部变量占用ram的问题
一、问题 自从工作以来基本不使用51或者增强型51之类的单片机。最近调试芯圣HC89S003F4增强型51,移植了32的实用代码,结果发现RAM爆了!!! 二、实践 为了看出问题,我又重新建立了一个简单工程。 #include reg52.h int test(void) { char a ; return 1; } void main(void) { test(); while(1); } 结果a改多大,RAM就加多少。 再看STARTUP.A51文件,发现跟stm32的启动程序不一样,根本没有定义heap堆,stack也是追加在被使用RAM的末尾。 最后看了这个帖子 http://bbs.2
[单片机]
<font color='red'>51单片机</font>局部变量占用ram的问题
如何编写51单片机音乐程序
正好做了一个音乐程序,贡献出来给你吧,希望你能满意。 电路连接很简单,在P3.0端口接个蜂鸣器,不过效果一般。如果想效果好点,就加个放大电路,接个小功率喇叭就行。因为这里发电路不方便,所以如果需要放大电路,可加我QQ:7468485。 音乐程序的设计原理和程序如下: 设计原理 ⑴ 总体原理: 乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。 ⑵ 单片机产生不同频率脉冲信号的原理: 1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复
[单片机]
8051单片机由什么组成 8051单片机有多少管脚
8051单片机介绍 8051单片机是一款广泛应用于嵌入式系统中的8位单片机,由Intel公司在1980年推出,是当时业界最先进的8位单片机之一,也是单片机领域的经典之作。 8051单片机具有较低的功耗、高度集成、强大的功能和易于编程等优点,广泛应用于各种嵌入式系统中,如家电控制、自动化设备、工业控制、仪器仪表、汽车电子、通讯设备、电子游戏等领域。 8051单片机内部包含了CPU、存储器、定时器、串行通信接口、并行输入输出端口等基本模块,同时还具有多种外设和扩展接口,可以根据不同应用需要进行灵活配置和扩展。 在编程方面,8051单片机支持多种编程语言和开发工具,如C语言、汇编语言、BASIC语言等,并且有许多成熟的开源或商业的集
[单片机]
51单片机1秒定时C语言程序(通过调试)
#include reg52.h // 晶振为12MHz, #include stdio.h #include absacc.h #include intrins.h /*************************** * 定义硬件引脚连接 ****************************/ sbit p1_0=P1^0; /************************* * 定义全局变量 ***********************/ // Byte data intrCounter; // 计时器中断次数 // Byte data beginNum; // 开始倒计时的时间 /
[单片机]
基于51单片机的波形发生器的课程设计
一、 设计任务和性能指标 1.1 设计任务 按要求设计波形发生器并完成相关功能: (1)运用单片机控制产生多种波形,这些波形包括三角波、方波、锯齿波等。 (2)信号的发生器所产生波形的频率、幅值均为连续可调。 扩展功能 在上位机将波形实时显示出来,用红外线遥控器实现上述功能,其它功能。 1.2 性能指标 (1)幅值0~5V可调 (2)频率0~1KHz可调 二、设计方案 采用AT89C51单片机和数模转换器PCF8591实现波形的产生。波形的产生方法是用AT89C51单片机执行波形程序,向PCF8591转换器的输入端输入相应的数据,从而在DA转换电路输出端再通过运放电路转换得到相应的电压波形。在AT89C51的P
[单片机]
基于<font color='red'>51单片机</font>的波形发生器的课程设计
基于89C51单片机的数字视频监控系统键盘及报警控制卡
键盘是数字视频监控录像系统中最重要的输入设备之一,是人机接口的重要组成部分。目前常用的工业控制计算机键盘除配置电子锁开关防止非法键盘输入外,与 PC键盘并没有多大区别。这种键盘不仅键数多,操作不灵活,而且通常只能作为输入设备,主机无法通过键盘与外设进行通信。本文在分析PC机键盘通信方式的基础上,设计出以89C51单片机为核心的数字视频监控系统键盘及报警控制卡,该卡具有键盘通信和输入输出报警两种功能,采用标准PCI卡的结构,但不占用主机硬件资源。其中,报警部分有4路输入和4路输出,可以与标准的报警传感器相连;键盘部分有16个键,通信方式与PC机完全兼容。采用这种控制卡,不仅可以节省视频监控系统中常用的专用报警解码器,而且能够实现
[安防电子]
基于89C<font color='red'>51单片机</font>的数字视频监控系统键盘及报警控制卡
51单片机】 A4988驱动模块驱动四线步进电机
A4988是控制双极步进电机的驱动模块,在本文中,我们学习如何使用它控制步进电机。 A4988的逻辑电压范围是:3~5.5V,如果配备较好的散热条件每相最大电流可达2A,在没有配备散热器的情况下,每相连续电流最好控制在1A范围内。 先来看图: --------------------------------------------------------------------------------------------------- 从右边自上而下分析: VMOT、GND: 外接电源正负极,用来给步进电机供电的。 (注意:购买时看一下驱动电压参数,电压不要过高,小的步进电机在4-9v,如果选择12v供电,启动启动没多
[单片机]
【<font color='red'>51单片机</font>】 A4988驱动模块驱动四线步进电机
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved