目录

1.使用的模块

2.基本功能

3.报警的功能

4.按键功能

5.初始化

4)数码管显示图片

电压显示

实时时钟显示

6.代码如下

main

iic.c

iic.h

ds1302.c

ds1302.h


1.使用的模块

1)蜂鸣器和继电器。

2)LED灯。

3)数码管。

4)AD、DA模块。

5)独立按键模块。

6)DS302模块。

2.基本功能

1)光敏电阻输出的电压超过3V就产生报警。

2)转口输出的电压超过3.5V就产生报警。

3)数码管可以显示电压和实时时钟。

4)时间为整点时发生警报。

3.报警的功能

1)光敏电阻输出的电压报警产生的功能为100ms流水灯和蜂鸣器响继电器吸合。

2)转口电阻输出的电压报警产生的功能为LED灯隔个点亮。

3)光敏电阻输出的电压报警和转口报警同时符合条件时值产生光敏报警模式。

4)当实时时钟的时间为整点时继电器吸合,LED3点亮其他熄灭。

4.按键功能

1)S4按下转换数码管显示界面。

2)在什么界面都是S5按下报警停止。

5.初始化

1)继电器与蜂鸣器都关闭。

2)数码管显示ADC界面。

3)实时时钟初始时间为8:58:00。

4)数码管显示图片

电压显示

实时时钟显示

6.代码如下

main

#include <STC15F2K60S2.H>
#include "iic.h"
#include "ds1302.h"void Delay()       //@12.000MHz
{unsigned char i, j;i = 6;j = 211;do{while (--j);} while (--i);
}void Timer2Init(void)      //1毫秒@12.000MHz
{AUXR &= 0xFB;     //定时器时钟12T模式T2L = 0x18;        //设置定时初始值T2H = 0xFC;       //设置定时初始值AUXR |= 0x10;     //定时器2开始计时EA=1;               //开启总中断IE2  |= 0x04;       //开启定时器2中断
}
void Device(unsigned char p2,unsigned char p0)//配置138锁存器
{P0=p0;P2=P2&0x1f|p2; P2 &=0x1f;
}void system()//初始化
{Device(0xa0,0);//关闭蜂鸣器与继电器Device(0x80,0xff);//关闭LED灯
}unsigned int smgs[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x3E,0x80,0x39,0x40};
//0~9  10U 11 .  13-
void smg(unsigned n,unsigned m)//数码管显示函数
{int a;a=0x01<<n;Device(0xc0,0);Device(0xe0,~smgs[m]);//显示内容Device(0xc0,a);//位置n+1
}
unsigned char u1,ms,u2;//收集电压的1变量相关变量
unsigned int  u1_5,u2_5;//变量的转变void ADC_read()//ADC采集,10模式采集一次 ,  因为每次都是上一次的值,所以要使用两次该函数
{
if(ms>=10)
{   ms=0;ADC(0x41);u1=ADC(0x41);ADC(0x43);u2=ADC(0x43);//255->500u1_5=u1*100/51;u2_5=u2*100/51;
}   }
//Delay()作用是让数码管显示更加明亮
void show_adc()//显示电压的函数
{smg(0,u1_5/100);Delay();smg(0,11);Delay();smg(1,u1_5/10%10);Delay();smg(2,u1_5%10);Delay();smg(4,u2_5/100);Delay();smg(4,11);Delay();smg(5,u2_5/10%10);Delay();smg(6,u2_5%10);Delay();smg(7,10);Delay();
}int s,min,h;//收据时间变量
void ds1302()//实时时钟采集
{
s= BCDToDec(Read_Ds1302_Byte( 0x81 ));
min=BCDToDec(Read_Ds1302_Byte( 0x83 ));
h=BCDToDec(Read_Ds1302_Byte( 0x85 ));
}void show_sj()//实时时钟显示函数
{smg(0,h/10);Delay();smg(1,h%10);Delay();smg(2,13);Delay();smg(3,min/10);Delay();smg(4,min%10);Delay();smg(5,13);Delay();smg(6,s/10);Delay();smg(7,s%10);Delay();
}int led;//时间变量
int w;//位移变量
void Led_running()//流水灯函数
{if(led>500)
{led=0;Device(0x80,~(0x01 << w));w++;w=w%8;Device(0xa0,0x50);
}   }
unsigned char adc=0;//adc报警变量
int b=0;//按键功能变量
void adc_jb()//报警函数
{//光敏电阻
if((u1_5>300)&&(adc==1)&&(b==0))
{Led_running();Device(0xa0,0x50);
}
//转口器
if((u2_5>350)&&(adc==2)&&(b==0))
{Device(0x80,0xaa);Device(0xa0,0);
}
//变量优先级条件
if((u1_5>300)&&(u2_5>300))
{adc=1;}if((u2_5>350)&&(u1_5<300))
{adc=2;}if((u2_5<350)&&(u1_5>300))
{adc=1;}if((u2_5<350)&&(u1_5<300))
{adc=3;b=0;}if((adc!=1)&&(adc!=2))
{Device(0x80,0xff);Device(0xa0,0);}}void ds1302_bj()//实时时钟报警器
{
//报警条件
if((min==0)&&(s==0)&&(b==0))
{Device(0x80,~0x03);Device(0xa0,0x10);
}if(min==0&&(s==5))
{b=0;Device(0xa0,0);Device(0x80,0xff);
}}int i;//界面转换变量
void key()//按键
{
if(P33==0)//s4
{Delay();if(P33==0){i++;i=i%2;while(P33==0){}}}
if(P32==0)//s5
{Delay();if(P32==0){b=1;}}}void main()
{system();Timer2Init();vClock_Set(8,58,00);//实时时钟初始化时间
while(1)
{}
}void t2() interrupt 12//中断入口
{key();ADC_read();ms++;led++;ds1302();//根据变量显示界面if(i==0){show_adc();adc_jb();}if(i==1){show_sj();ds1302_bj();}if(b==1)
{Device(0xa0,0);Device(0x80,0xff);
}}

ds1302.c

#include <intrins.h>
#include "ds1302.h"
#include <STC15F2K60S2.H>sbit SCK=P1^7;
sbit IO=P2^3;
sbit CE = P1^3;        // DS1302复位                                         void Write_Ds1302(unsigned  char temp)
{unsigned char i;for (i=0;i<8;i++)        { SCK=0;IO=temp&0x01;temp>>=1; SCK=1;}
}   void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
{CE=0; _nop_();SCK=0; _nop_();CE=1;  _nop_();  Write_Ds1302(address);    Write_Ds1302(dat);      CE=0;
}unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;CE=0;  _nop_();SCK=0; _nop_();CE=1;  _nop_();Write_Ds1302(address);for (i=0;i<8;i++)   {       SCK=0;temp>>=1; if(IO)temp|=0x80;  SCK=1;} CE=0; _nop_();SCK=0; _nop_();SCK=1; _nop_();IO=0;  _nop_();IO=1;  _nop_();return (temp);
}//实时时钟转变
void vClock_Set(unsigned char hour,unsigned char minute,unsigned char second)
{Write_Ds1302_Byte(0x8e,0x00);          //关闭写保护Write_Ds1302_Byte(0x80,DecToBCD(second));       //写入小时数据到对应的地址Write_Ds1302_Byte(0x82,DecToBCD(minute));       //写入分钟数据到对应的地址Write_Ds1302_Byte(0x84,DecToBCD(hour));         //写入秒钟数据到对应的地址Write_Ds1302_Byte(0x8e,0x80);          //打开写保护
}

ds1302.h

#ifndef __DS1302_H
#define __DS1302_H#define DecToBCD(dec) (dec/10*16)+(dec%10)//10进制转变为BCD码
#define BCDToDec(bcd) (bcd/16*10)+(bcd%16)//BCD码转变为10进制unsigned char Read_Ds1302_Byte( unsigned char address );
void vClock_Set(unsigned char hour,unsigned char minute,unsigned char second);#endif

iic .c

#include "reg52.h"
#include "intrins.h"#define DELAY_TIME 5#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1void Delay_Ms(unsigned int ms)       //@12.000MHz
{unsigned char i, j;
while(ms--)
{i = 12;j = 169;do{while (--j);} while (--i);
}
}//总线引脚定义
sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */void IIC_Delay(unsigned char i)
{do{_nop_();}while(i--);
}
//总线启动条件
void IIC_Start(void)
{SDA = 1;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 0;IIC_Delay(DELAY_TIME);SCL = 0;
}//总线停止条件
void IIC_Stop(void)
{SDA = 0;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 1;IIC_Delay(DELAY_TIME);
}//发送应答
void IIC_SendAck(bit ackbit)
{SCL = 0;SDA = ackbit;                    // 0:应答,1:非应答IIC_Delay(DELAY_TIME);SCL = 1;IIC_Delay(DELAY_TIME);SCL = 0; SDA = 1;IIC_Delay(DELAY_TIME);
}//等待应答
bit IIC_WaitAck(void)
{bit ackbit;SCL  = 1;IIC_Delay(DELAY_TIME);ackbit = SDA;SCL = 0;IIC_Delay(DELAY_TIME);return ackbit;
}//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){SCL  = 0;IIC_Delay(DELAY_TIME);if(byt & 0x80) SDA  = 1;else SDA  = 0;IIC_Delay(DELAY_TIME);SCL = 1;byt <<= 1;IIC_Delay(DELAY_TIME);}SCL  = 0;
}//从I2C总线上接收数据
unsigned char IIC_RecByte(void)
{unsigned char i, da;for(i=0; i<8; i++){   SCL = 1;IIC_Delay(DELAY_TIME);da <<= 1;if(SDA) da |= 1;SCL = 0;IIC_Delay(DELAY_TIME);}return da;
}//ADC输出函数
char ADC(unsigned  char c)
{
char q;IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(c);IIC_WaitAck();IIC_Start();IIC_SendByte(0x91);IIC_WaitAck();
q=IIC_RecByte();IIC_SendAck(1);IIC_Stop();return q;
}

iic  .h

#ifndef _IIC_H
#define _IIC_Hvoid Write_EEPROM(unsigned char add, unsigned char dat);
unsigned char  ucRead_EEPROM(unsigned char add);
char ADC(unsigned  char c);#endif

期待大家一起谈论不足之处。

使用蓝桥杯单片机实现ADC采集和实时时钟界面转换与报警功能相关推荐

  1. 蓝桥杯单片机——PCF8591 ADC/DAC模块

    本篇讲的单片机是第十一届蓝桥杯单片机实训的硬件设备. 蓝桥杯单片机硬件基础 PCF8591电路图: PCF8591是具有IIC总线接口的8位A/D及D/A转换器,有4路A/D转换输入,1路D/A模拟输 ...

  2. 蓝桥杯嵌入式 ---- “空手套白狼“ 之 实时时钟 RTC

    文章目录 前言 一.RTC初始化 二.RTC应用函数 三.RTC中断函数 四.RTC在主函数的应用 前言 本文是基于嵌入式开发板CT117E,stm32f103RBT6."空手套白狼&quo ...

  3. 【蓝桥杯单片机(9)】DS1302时钟芯片学习笔记

    备赛目录 目录 1.DS1302简介 1.1功能 1.2通信方式 1.3电路连接图 2.DS1302通信时序 3.编写读取函数 3.1地址 3.2BCD码与十进制互换 4.DS1302时间读取实验 1 ...

  4. 蓝桥杯省赛考点_【蓝桥杯单片机01】从历年决赛真题中寻找单片机常见的考点...

    [蓝桥杯单片机01]从历年决赛真题中寻找单片机常见的考点 广东职业技术学院  欧浩源 [第三届:门禁系统] 1.功能简述 "门禁系统"主要有两种工作模式: 模式1:7:00-22: ...

  5. 【蓝桥杯单片机(24)】历届单片机客观题及答案解析

    目录 考前冲刺,专栏完结篇 ## 推荐链接: 推荐视频–小蜜蜂老师讲解 赛点资源包下载,提取码:brno 三极管基本知识总结 运算放大电路的基础 第十三届蓝桥杯单片机官方直播课录屏 目录 一些刷题后的 ...

  6. 【蓝桥杯单片机第十二届国赛真题】

    [蓝桥杯单片机第十二届国赛真题] 文章目录 [蓝桥杯单片机第十二届国赛真题] 前言 一.真题 二.源码 前言 有幸进入国赛,为自己大学最后一个比赛画上完满的句号^@^ 下面为蓝桥杯单片机第十二届国赛程 ...

  7. 蓝桥杯单片机组——榨干选手资源包(芯片数据手册)

    文章目录 前言 DS18B20 原理图 1-Wire协议简介 赛场技巧 DS1302 原理图 SPI协议简介 赛场技巧 AT24C02 原理图 IIC协议简介 赛场技巧 PCF8591 原理图 赛场技 ...

  8. 蓝桥杯单片机第十四届省赛题目和程序答案

    目录 1.前言 2.题目 3.程序架构 3.1 display.c 3.2 ds1302.c 3.3 iic.c 3.4 onewire.c 3.5 main.c 主函数文件 3.6 环境配置 4. ...

  9. 【蓝桥杯单片机组】客观题(赛前必看)

    微信搜索:ReCclay,也可免费阅读博主蓝桥系列所有文章,后台回复"代码"即可获取蓝桥所有备赛代码!关注博主公众号,还可拥有加入博主粉丝群实时沟通技术难题.免费下载CSDN资源等 ...

最新文章

  1. 高招攻略 领英助你清晰解读大数据专业
  2. GPU端吊打RegNet、EfficientNet的强悍担当:GENet
  3. JSEnhancements.vsix
  4. 我国科学家成功研制全球神经元规模最大的类脑计算机
  5. 用MFC显示一张图片
  6. Silverlight OOB Setup
  7. 嵌入式数据库SQLite的编译、安装和使用[ZT]
  8. 网络工程师常用英文单词和缩写翻译
  9. autograd手动仿真手记
  10. 使用maven构建多模块项目
  11. php中svn上传项目直接访问不了,phpstorm8 通过svn导入项目后项目右键列表里没有subversion选项,无法提交和更新啊?...
  12. 侧栏广告 image flash
  13. 排序算法之——堆排序分析
  14. 统计学习导论(ISLR) 第四章分类算法课后习题
  15. ARP欺骗的艺术 | 断网与监听
  16. nexus批量上传与下载
  17. 大学如何自学计算机科学与技术?
  18. 如何利用linux分析转录组数据库,对转录组测序数据进行分析以及注释
  19. 抖音作品别人保存不了,这个方法可快速将抖音短视频下载到本地
  20. C++互斥量、原子锁、自旋锁等比较

热门文章

  1. 认证疑难问题分析报告
  2. 【lwIP(第三章)】内存管理
  3. initramfs详解----设备文件系统
  4. Android WebView(一) WebView详解
  5. 一元n次多项式的处理
  6. poi版本冲突导致连续报错NoSuchMethodError、VerticalAlignment无法转换为short和ClassNotFoundException的解决办法及兼容性问题解决
  7. 小米再次回购股票:斥资近1亿港元 传递市场信心
  8. 狂欢,不过是一群人的孤单--来自人人
  9. python如何设置rgb颜色_Python 转换RGB颜色值的示例代码
  10. 关于H.264 x264 h264 AVC1