在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → 基于stc51单片机的电子时钟设计(main.c)

基于stc51单片机的电子时钟设计(main.c)

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:1.58KB
  • 下载次数:7
  • 浏览次数:94
  • 发布时间:2021-03-11
  • 实例类别:嵌入式开发
  • 发 布 人:liyunxu
  • 文件格式:.c
  • 所需积分:2
 相关标签: 51单片机 电子时钟 C51 stc 51

实例介绍

【实例简介】

本系统由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就能够设置时间,关于怎么知道你当前设置的是那一个时间我用了局部清屏之后在写然后在局部清屏实现局部屏幕闪烁提示用户当前正在修改那个时间。


实例下载地址

基于stc51单片机的电子时钟设计(main.c)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警