C51单片机项目:时钟

#include<reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit ENLCD = P1^5;
sbit KeyIn2 = P2^5;
sbit KeyIn3 = P2^6;
sbit BUZZ = P1^6;
unsigned char LED[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

void main()
{
    bit buff=1;//buf为KeyIn2上一次状态
    bit bufff=1;//buf为KeyIn3上一次状态
    unsigned int i,tt;
    static char bit_p[6]={0,0,0,0,0,0};
    static int cnt,sec,min,hour;
    i = 0;
    sec=0;
    min=0;
    hour=0;
    ENLED = 0;
    ENLCD = 0;
    ADDR3 = 1;
    TMOD = 0x10;
    TH1 = 0xFC;
    TL1 = 0x66;
    TR1 = 1;
    P2 = 0xFE;

    while(1)
    {
        if(TF1==1)
        {
            TF1 = 0;
            TH1 = 0xFC;
            TL1 = 0x66;
            cnt++;
            if(cnt ==1000)
            {
                cnt = 0;
                //秒
                sec++;
                bit_p[0]=sec%10;
                bit_p[1]=sec/10%10;
                if(sec==60)
                {
                    sec=0;
                    //分钟
                    min++;
                    bit_p[2]=min%10;
                    bit_p[3]=min/10%10;
                }
                if(min==60)
                {
                    min=0;
                    //小时
                    hour++;
                    bit_p[4]=hour%10;
                    bit_p[5]=hour/10%10;
                }
            }
            switch (i)
            {
                case 0:ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;P0 = LED[bit_p[0]];i++;break;
                case 1:ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;P0 = LED[bit_p[1]];i++;break;
                case 2:ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P0 = LED[bit_p[2]];i++;break;
                case 3:ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;P0 = LED[bit_p[3]];i++;break;
                case 4:ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;P0 = LED[bit_p[4]];i++;break;
                case 5:ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;P0 = LED[bit_p[5]];i=0;break;
            }
        }
            //设置时钟的分钟
            if(KeyIn2!=buff)
            {
                if(buff==0)
                 {
                    TR1=0;
                    min--;
                    if(min==-1)
                    {
                        min=60;
                    }
                    bit_p[2]=min%10;
                    bit_p[3]=min/10%10;
                }
                buff=KeyIn2;
                TR1=1;
            }

            //设置时钟的小时
            if(KeyIn3!=bufff)
            {
                if(bufff==0)
                 {
                    TR1=0;
                    hour--;
                    if(hour==-1)
                    {
                        hour=24;
                    }
                    bit_p[4]=hour%10;
                    bit_p[5]=hour/10%10;
                }
                bufff=KeyIn3;    //buf = 0,keyIn2=0
                TR1=1;
            }

            //自己设置闹钟 00:00:10
            if(sec==10)
            {
                BUZZ=~BUZZ;
                for(tt=0;tt<2000;tt++);
            } 

}    }

C51单片机,时钟时间显示,蜂鸣器一到指定时间可以响。

时间: 2024-08-04 17:17:27

C51单片机项目:时钟的相关文章

C51单片机项目:红绿灯

#include<reg52.h> sbit ENLCD=P1^5; sbit ENLED=P1^4; sbit ADDR3=P1^3; sbit ADDR2=P1^2; sbit ADDR1=P1^1; sbit ADDR0=P1^0; unsigned char ge1=5,shi1=1,ge2=0,shi2=1,LED1; unsigned long cnt=0,n=0,j=0; unsigned char LED[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x8

新唐单片机项目总结

最近做了两个单片机项目,新唐的029和mini58ZDE的MCU,都是cortex-M0,一个厂家所以API基本一致,大致了解了串口中断及定时器功能以及ADC采样相关的编程内容. 4G项目即mini58zde,主要是从GPS中读数据然后从另外一个串口转发出去 GPS模块  ------ 串口1接收 ----数据处理组包 -----串口0发送------上位机 GPS模块是不断地有数据来,数据格式为 $GNRMC,014053.00,A,3205.65222,N,11853.26056,E,0.0

C51单片机实现呼吸灯和花样流水灯程序

1.用C51单片机实现花样流水灯,代码如下: #include <reg52.h> #define LED_A P1 //led灯所用的接口,是哪个口就写P几void delayms(){ unsigned char x = 0; unsigned char i; unsigned char y = 0; while(y < 0.001) //定义led灯的切换的延时时间,越小越快. {   //(y < 0.001);(x<100);(i<100)都可以修改 x =

Arduino和C51开发DS1302时钟

技术:51单片机.Arduino.DS1302时钟.串口通信 概述 本文实现51单片机和Arduino串口实时显示时钟功能,让读者对DS1302能够更好的理解,这次功能也和上节课学到的串口通信运用在一起 详细 代码下载:http://www.demodashi.com/demo/14706.html 一.DS1302时钟 DS1302 是美国DALLAS公司推出的一种高性能.低功耗.带RAM的实时时钟电路,它可以对年.月.日.周.时.分.秒进行计时,具有闰年补偿功能,工作电压为2.0V-5.5V

【单片机】时钟及温度的显示

回头看我所写的文章,基本都是软件方面的,是个典型的"欺软怕硬"的人.然而,在最开始的时候,我学习的是硬件.在前面文章<我的2013–一起从心开始>一文中写道,我在大一暑假的时候开始了单片机的学习,在大二.大三期间做过些小东西.刚进入程序员的领域的时候,显然是单片机带我入了门.下面我将写写用单片机做过的一些东西,权当纪念. 本文介绍我大一暑假学完单片机后,在大二上学期为参加学校星火杯而完成的作品(最终没有参加比赛).这个电子制作是关于用单片机显示时间的作品,其功能就用单片机控

为什么单片机需要时钟系统,时钟信号在单片机中扮演怎样的角色?

1.单片机内部需要储存器.累加器,这些都需要逻辑门电路.比如锁存器就是一个D触发器,而触发器的置1.清0.置数的功能都需要跳变沿.D触发器就是上升沿后存入数据,而这个上升沿就得外部提供脉冲,这就是脉冲信号 ,而这个脉冲信号就是我们稳定的时钟信号. 2.单片机运行需要时钟支持-–就像计算机的CPU一样,如果没有时钟电路来产生时钟驱动单片机,那单片机就不能执行程序.单片机可以看成是在时钟驱动下的时序逻辑电路. 以MCS–51单片机为例:MCS–51单片机为12个机器周期执行一条指令,也就是说单片机运

单片机的时钟

http://www.easy-key.com/home/article/news_details/aid/5718 我们先来理解几个比较重要的概念:时间周期.指令周期.机器周期,以及系统时钟的工作原理. 时钟周期: 时钟周期也叫振荡周期或晶振周期,即晶振的单位时间发出的脉冲数,一般有外部的振晶产生,比如12MHZ=12×10的6次方,即每秒发出12000000个脉冲信号,那么发出一个脉冲的时间就是时钟周期,也就是1/12微秒.通常也叫做系统时钟周期.是计算机中最基本的.最小的时间单位. 在80

c8051f320学习,单片机不外乎时钟、IO、串口、USB等外设用法

时钟 IO(输入.输出,如何配置) IO 数字和模拟资源可以通过25个I/O 引脚(C805 1F3 2 0 ),每个端口引脚都可以被定义为1 通用I/O(GPIO)或 0 模拟输入 所有端口I/O 都耐5V电压 端口I/O 单元可以被配置为漏极开路或推挽方式,口输出方式寄存器PnMDOUT 中设置,n =  0,1, 2, 3 P1MDOUT |= 0x0F;//0000  1111    置P1的0-3口为1即推挽输出方式 P2MDOUT |= 0x0C;//0000 1100 对应 P2.

单片机的时钟初始化

void Clock_Init(){ uchar i; BCSCTL1&=~XT2OFF; //打开XT2振荡器 BCSCTL2|=SELM1+SELS;                //MCLK为8MHZ,SMCLK为8MHZ do{ IFG1&=~OFIFG; //清楚振荡器错误标志 for(i=0;i<100;i++) _NOP();           //延时等待 } while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待 IFG1&am