0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于51单片机+DS1302时钟芯片的多功能数字电子钟设计方案

基于51单片机+DS1302时钟芯片的多功能数字电子钟设计方案

来源: elecfans
2021-01-28
类别:工业控制
eye 13
文章创建人 拍明

原标题:基于51单片机的多功能数字电子钟设计方案

  实现的功能有:走 时、校时、闹钟、温度、遥控这几个功能。要想实现这几个功能,其中走时所需要的就是时钟芯片,即 DS1302;时间需要显示给人看,就需要显示器件,我们用到了点阵、数码管、 独立 LED、液晶;再来看校时,校时需要输入器件。

  

1.jpg


  注重模块化思想:

  //工程配置头文件config.h:

  #ifndef_CONFIG_H

  #define_CONFIG_H

  /*通用头文件*/

  #include

  #include

  /*数据类型定义*/

  typedefsignedcharint8;//8位有符号整型数

  typedefsignedintint16;//16位有符号整型数

  typedefsignedlongint32;//32位有符号整型数

  typedefunsignedcharuint8;//8位无符号整型数

  typedefunsignedintuint16;//16位无符号整型数

  typedefunsignedlonguint32;//32位无符号整型数

  /*全局运行参数定义*/

  #defineSYS_MCLK(11059200/12)//系统主时钟频率,即振荡器频率÷12

  /*IO引脚分配定义*/

  sbitKEY_IN_1=P2^4;//矩阵按键的扫描输入引脚1

  sbitKEY_IN_2=P2^5;//矩阵按键的扫描输入引脚2

  sbitKEY_IN_3=P2^6;//矩阵按键的扫描输入引脚3

  sbitKEY_IN_4=P2^7;//矩阵按键的扫描输入引脚4

  sbitKEY_OUT_1=P2^3;//矩阵按键的扫描输出引脚1

  sbitKEY_OUT_2=P2^2;//矩阵按键的扫描输出引脚2

  sbitKEY_OUT_3=P2^1;//矩阵按键的扫描输出引脚3

  sbitKEY_OUT_4=P2^0;//矩阵按键的扫描输出引脚4

  sbitADDR0=P1^0;//LED位选译码地址引脚0

  sbitADDR1=P1^1;//LED位选译码地址引脚1

  sbitADDR2=P1^2;//LED位选译码地址引脚2

  sbitADDR3=P1^3;//LED位选译码地址引脚3

  sbitENLED=P1^4;//LED显示部件的总使能引脚

  #defineLCD1602_DBP0//1602液晶数据端口

  sbitLCD1602_RS=P1^0;//1602液晶指令/数据选择引脚

  sbitLCD1602_RW=P1^1;//1602液晶读写引脚

  sbitLCD1602_E=P1^5;//1602液晶使能引脚

  sbitDS1302_CE=P1^7;//DS1302片选引脚

  sbitDS1302_CK=P3^5;//DS1302通信时钟引脚

  sbitDS1302_IO=P3^4;//DS1302通信数据引脚

  sbitI2C_SCL=P3^7;//I2C总线时钟引脚

  sbiTI2C_SDA=P3^6;//I2C总线数据引脚

  sbitBUZZER=P1^6;//蜂鸣器控制引脚

  sbiTIO_18B20=P3^2;//DS18B20通信引脚

  sbiTIR_INPUT=P3^3;//红外接收引脚

  #endif/*_CONFIG_H*/

  //头文件Lcd1602.h:

  #ifndef_LCD1602_H

  #define_LCD1602_H

  #ifndef_LCD1602_C

  #endif

  voidInitLcd1602();

  voidLcdClearScreen();

  voidLcdOpenCursor();

  voidLcdCloseCursor();

  voidLcdSetCursor(uint8x,uint8y);

  voidLcdShowStr(uint8x,uint8y,uint8*str);

  voidLcdShowChar(uint8x,uint8y,uint8chr);

  #endif/*_LCD1602_H*/

  //实时时钟芯片DS1302驱动模块的头文件DS1302.h:

  #ifndef_DS1302_H

  #define_DS1302_H

  structsTIme//日期时间结构

  {

  uint16year;//年

  uint8mon;//月

  uint8day;//日

  uint8hour;//时

  uint8min;//分

  uint8sec;//秒

  uint8week;//星期

  };

  #ifndef_DS1302_C

  #endif

  voidInitDS1302();

  voidGetRealTime(structsTime*time);

  voidSetRealTime(structsTime*time);

  #endif/*_DS1302_H*/

  //温度传感器DS18B20驱动模块的头文件

  #ifndef_DS18B20_H

  #define_DS18B20_H

  #ifndef_DS18B20_C

  #endif

  bitStart18B20();

  bitGet18B20Temp(int16*temp);

  #endif/*_DS18B20_H*/

  //多功能电子钟主要功能文件的头文件Time.h:

  #ifndef_TIME_H

  #define_TIME_H

  #ifndef_TIME_C

  #endif

  voidRefreshTime();

  voidRefreshDate(uint8ops);

  voidRefreshAlarm();

  voidAlarmMonitor();

  voidKeyAction(uint8keycode);

  #endif/*_TIME_H*/

  //4*4矩阵按键驱动模块的头文件keyboard.h:

  #ifndef_KEY_BOARD_H

  #define_KEY_BOARD_H

  #ifndef_KEY_BOARD_C

  #endif

  voidKeyScan();

  voidKeyDriver();

  #endif/*_KEY_BOARD_H*/

  //点阵LED、数码管、独立LED和无源蜂鸣器的驱动模块头文件:LedBuzzer.h:

  #ifndef_LED_BUZZER_H

  #define_LED_BUZZER_H

  structsLedBuff//LED显示缓冲区结构

  {

  uint8array[8];//点阵缓冲区

  uint8number[6];//数码管缓冲区

  uint8alone;//独立LED缓冲区

  };

  #ifndef_LED_BUZZER_C

  externbitstaBuzzer;

  externstructsLedBuffledBuff;

  #endif

  voidInitLed();

  voidFlowingLight();

  voidShowLedNumber(uint8index,uint8num,uint8point);

  voidShowLedArray(uint8*ptr);

  #endif/*_LED_BUZZER_H*/

  //主文件的头文件main.h:

  #ifndef_MAIN_H

  #define_MAIN_H

  enumeStaSystem//系统运行状态枚举

  {

  E_NORMAL,E_SET_TIME,E_SET_ALARM

  };

  #ifndef_MAIN_C

  externenumeStaSystemstaSystem;

  #endif

  voidRefreshTemp(uint8ops);

  voidConfigTimer0(uint16ms);

  #endif/*_MAIN_H*/

  //Lcd1602.c:

  #define_LCD1602_C

  #include“config.h”

  #include“Lcd1602.h”

  uint8tmpP0;//暂存P0口的值

  bittmpADDR0;//暂存LED位选译码地址0的值

  bit tmpADDR1; //暂存LED位选译码地址


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案