资源简介
基于52单片机的万年历电子时钟, 亲测好用 大家下载
代码片段和文件信息
#include //调用单片机头文件
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
#include “eeprom52.h“
#include “nongli.h“
#include “intrins.h“
bit flag_200ms ;
bit flag_100ms ;
sbit beep = P2^3; //蜂鸣器定义
bit flag_beep_en;
uint clock_value; //用作闹钟用的
sbit dq = P2^2; //18b20 IO口的定义
uint temperature ; //温度变量
uchar flag_nl; //农历 阳历显示标志位
uchar menu_1menu_2;
uchar key_timeflag_value; //用做连加的中间变量
bit key_500ms ;
uchar n_niann_yuen_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 ivalue;
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
write_18b20(0x44); //启动一次温度转换命令
delay_uint(50); //500us
init_18b20(); //初始化18b20
write_18b20(0xcc); //跳过64位ROM
write_18b20(0xbe); //发出读取暂存器命令
EA = 0;
low = read_18b20(); //读温度低字节
value = read_18b20(); //读温度高字节
EA = 1;
value <<= 8; //把温度的高位左移8位
value |= low; //把读出的温度低位放到value的低八位中
value *= 0.625; //转换到温度值 小数
return value; //返回读出的温度 带小数
}
/******************1ms 延时函数*******************/
void delay_1ms(uint q)
{
uint ij;
for(i=0;i for(j=0;j<120;j++);
}
/******************写星期函数*******************/
void w
- 上一篇:masm5含debug,li
nk - 下一篇:4人抢答器.rar
相关资源
- 基于51单片机的lcd篮球计分器程序
- 51单片机 等精度测频率 LCD显示 C程序
- 基于51单片机的锯齿波&正弦波发生器
- 利用51单片机实现了红外发射以及接受
- 51单片机LED16X16点阵滚动显示
- 基于51单片机的空调遥控器C源程序
- 51单片机控制RDA5807收音机模块
- 基于C51单片机的声光控灯
- 51单片机电子门铃设计
- 基于51单片机的 4×4键盘及8位数码管显
- 基于51单片机的霹雳灯
- 51单片机贪吃蛇游戏程序
- 51单片机控制57步进电机启停,正反转
- 51单片机实现Modbus从机程序
- 51单片机看门狗设计
- 51单片机开发的韦根接受的C程序;支
- 51单片机ADXL345三轴加速度传感器源代
- 51单片机1602万年历矩阵按键
- 超声波测距仪
- STC89C52RC使用电位器控制WS2812B调光
- C51单片机电子琴
- 带串口通信的温度控制器(带proteus仿
- 基于51单片机的智能家居系统程序
- AD9833驱动程序
- 基于C51单片机音乐盒设计[1]
- 89C51单片机控制HT1621B驱动LCD(C程序)
- 51单片机 lcd1602测试C程序
- 基于51单片机LCDLM041L显示贪吃蛇小游戏
- 基于51单片机的串行通信程序
- 51单片机 pwm波产生.zip
评论
共有 条评论