基本信息
源码名称:基于stc51单片机的电子时钟设计(main.c)
源码大小:1.58KB
文件格式:.c
开发语言:C/C++
更新时间:2021-03-11
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

本系统由ds1302时钟芯片产生时基掉电可用后备电源不影响时间准确关于ds1302,蜂鸣器用于闹钟(也可用温度报警本系统没有),ds18b20数字温度传感器用于检测环境温度关于ds18b20,24c02芯片是IIC时序的存储器用于存储用户信息,整个系统的显示用的是LCD12864(串口的),整个系统均由stc90c516协调控制。

main.h,引入标准头文件和数据类型重命名


#ifndef _MAIN_H
#define _MAIN_H

#include "reg52.h"
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int 	
#define ulong unsigned long
	
sbit beep = P1^5;//蜂鸣器控制引脚定义
	
#define ds1302init 0   //ds1302初始化时间标志

void Delay10ms(unsigned int c);//10ms延时


#endif
  • main.c
    #include "main.h"
    #include "lcd.h"			//显示头文件
    #include "ds1302.h"			//温度传感器
    #include "24c02.h"			//存储
    #include "ds18b20.h"		//时钟
    #include "key.h"			//按键
    
    void Delay10ms(unsigned int c)
    {
        unsigned char a,b;
        for(;c>0;c--)
            for(b=38;b>0;b--)
                for(a=130;a>0;a--);
    }
    
    void main(void)
    {	 
    	uchar b = 50,n=10;
    	TMOD|=0X01;							//选择为定时器0模式,工作方式1,仅用TR0打开启动。
    	TH0 = 0xff;
    	TL0 = 0x9c;
    	ET0 = 1;
    	EA = 1;										//使用定时器0中断
    	Init_lcd();
    	#if ds1302init 								//是否初始化时间
    		Init_ds1302();
    	#endif
    	clear_all();
    	display_graphic_8x16(1,1,&num[2][0]);
    	display_graphic_8x16(1,8,&num[0][0]);
    	display_graphic_8x16(3,8*12,O);
    	display_graphic_8x16(3,8*13,F);
    	display_graphic_8x16(3,8*14,F);
    	while(1)
    	{
    		At24c02Write(1,0x00);
    		if(At24c02Read(1) == 0x00)
    			display_graphic_16x16(3,8*14,ri);
    		Key_Function(Key_Read()); 					//按键读取函数并实现相应功能
    		if(n == 10) 								//延时控制
    		{
    			time_display();  						 //时间显示函数
    			n=0;
    		}
    		if(b == 50) 								//延时控制
    		{
    			Ds18b20_display(Ds18b20ReadTemp());     //温度显示函数
    			b=0;		
    		}
    		if(clock[2] == 0x01) 						//判断闹钟标志
    		{
    			if(Alarm_clock[0] == time[2])    		//检查闹钟是否到时
    			{			
    				if(Alarm_clock[1] == time[1])
    				{
    					TR0 = 1;  						//开启定时器0
    					clear_8x16(3,8*13);
    					display_graphic_8x16(3,8*13,F);
    					display_graphic_8x16(3,8*14,F);
    					clear_8x16(5,8*3);
    					clear_8x16(5,8*4);
    					clear_8x16(5,8*5);
    					clear_8x16(5,8*6);
    					clear_8x16(5,8*7);
    					clock[2] = 0x00;
    					clock[0] = 0x00;
    					clock[1] = 0x00;
    				}
    			}
    		}
    		Delay10ms(1);
    		b  ;
    		n  ;
    	}
    }
    
    void Timer0() interrupt 1  		//中断服务函数
    {
    	static uint i;
    	TH0=0xff;	
    	TL0=0x9c;
    	beep = ~beep;				//蜂鸣器
    	i  ;
    	if(i==15000)   				//可调整想多长时间
    	{
    		i=0;
    		TR0 = 0;
    	}	
    }
    程序采用C语言的模块化思想把功能封装成函数,主函数主要实现所用硬件的初始化定时器中断和所有需要显示到LCD上的内容。ds1302初始时间只需要设置一次因为掉电程序会重新运行但是时间掉电也会运行所以时间不需要初始化我们采用条件编译来实现。ds1302读回来的时间放在一个可供所有文件使用的全局数组time里。
    key.c主要介绍按键功能实现的函数这个函数实现两个功能调整时间和设置闹钟时间(最好把这两个功能写成两个独立的函数,也不知道当时我是咋想的☹☹)进入设置后利用加一减一函数实现加减在通过time数组写给ds1302就能够设置时间,关于怎么知道你当前设置的是那一个时间我用了局部清屏之后在写然后在局部清屏实现局部屏幕闪烁提示用户当前正在修改那个时间。