c51语言单片机打铃系统设计,基于单片机的自动打铃系统的设计

//调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义              变量范围0~255

#define uint  unsigned int              //无符号整型 宏定义              变量范围0~65535

#include "eeprom52.h"

#include "nongli.h"

bit flag_200ms ;

bit flag_100ms ;

sbit beep = P3^7;                //蜂鸣器定义

bit flag_beep_en;

uint clock_value;     //用作闹钟用的

sbit dq   = P3^1;                //18b20 IO口的定义

uint temperature ;    //温度变量

uchar flag_nl;        //农历 阳历显示标志位

uchar menu_1,menu_2;

uchar key_time,flag_value;      //用做连加的中间变量

bit key_500ms  ;

uchar n_nian,n_yue,n_ri;                            //农历显示的函数

#include "ds1302.h"

#include "lcd1602.h"

/******************把数据保存到单片机内部eeprom中******************/

void write_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000, fen1);

byte_write(0x2001, shi1);

byte_write(0x2002, open1);

byte_write(0x2058, a_a);

}

/******************把数据从单片机内部eeprom中读出来*****************/

void read_eeprom()

{

fen1  = byte_read(0x2000);

shi1  = byte_read(0x2001);

open1  = byte_read(0x2002);

a_a      = byte_read(0x2058);

}

/**************开机自检eeprom初始化*****************/

void init_eeprom()

{

read_eeprom();                            //先读

if(a_a != 1)                            //新的单片机初始单片机内问eeprom

{

fen1  = 3;

shi1  = 8;

open1  = 1;

a_a = 1;

write_eeprom();                 //保存数据

}

}

/***********************18b20初始化函数*****************************/

void init_18b20()

{

bit q;

dq = 1;                                                        //把总线拿高

delay_uint(1);                  //15us

dq = 0;                                                        //给复位脉冲

delay_uint(80);                            //750us

dq = 1;                                                        //把总线拿高 等待

delay_uint(10);                            //110us

q = dq;                                                        //读取18b20初始化信号

delay_uint(20);                            //200us

dq = 1;                                                        //把总线拿高 释放总线

}

/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{                                                                      //写数据是低位开始

dq = 0;                                          //把总线拿低写时间隙开始

dq = dat & 0x01; //向18b20总线写数据了

delay_uint(5);              // 60us

dq = 1;                                          //释放总线

dat >>= 1;

}

}

/*************读取18b20内的数据***************/

uchar read_18b20()

{

uchar i,value;

for(i=0;i<8;i++)

{

dq = 0;                                          //把总线拿低读时间隙开始

value >>= 1;              //读数据是低位开始

dq = 1;                                          //释放总线

if(dq == 1)                            //开始读写数据

value |= 0x80;

delay_uint(5);              //60us              读一个时间隙最少要保持60us的时间

}

return value;                            //返回数据

}

/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

uint value;

uchar low;                                             //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

init_18b20();                               //初始化18b20

write_18b20(0xcc);                 //跳过64位ROM

c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 610626052e95c7fbe3d254abc769d9ad.gif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值