想要更多项目私wo!!!

一、简介

此系统主要由AT89C51、DS18B20温度模块、LCD1602液晶显示屏、DS1302时钟模块和矩阵按键组成。

二、运行效果图

三、部分代码

#include <reg52.h>
#include <intrins.h>  //包含_nop_()函数定义的头文件
#define uchar unsigned char
#define uint  unsigned int
//以下是对1302的定义
sbit  clk= P2^3;              //实时时钟时钟线引脚
sbit  IO= P2^2;              //实时时钟数据线引脚
sbit  rst =P2^1;              //实时时钟复位线引脚
uchar second,minute,hour,week,day,month,year;       //8421码表示的时间  高四位用于表示十位,低四位用于表示个位
char second1,minute1,hour1,week1,day1,month1,year1;//十进制表示的时间  也即普通意义下的时间
uchar read_byte(uchar com);
uchar readyear_byte(uchar com);
void write_byte(uchar com,uchar date);
void init_1302();
void readtime();
//以下是对lcd1602的定义
sbit wela=P2^6;
sbit dula=P2^7;
uchar table[]="0123456789";
sbit LCM_RS=P2^6;    //寄存器选择位,将RS位定义为P2.6引脚
sbit LCM_EN=P2^5;     //使能信号位,将E位定义为P2.5引脚
bit lcd_bz(void);
void write_com(unsigned char CMD);
void write_date(unsigned char dataW);
void init_1602();
void displaytime();
void delaynms(unsigned char n);
//以下是对按键调时程序的定义
sbit mode=P1^0;     //调整闹钟或者时间时的选择按键
sbit plus=P1^1;     //加1键
sbit minus=P1^2; //减1键
sbit s1=P1^3;   //计算器和万年历切换键
void key();
void delay20ms();
//以下是对温度采集部分的定义
sbit DS=P2^0;           //DS18B20数据端口
uchar code wendu[]="0123456789";        //利用一个温度表解决温度显示乱码
void write_byte(uchar com,uchar date);   //写一个字节
void tmpDelay(int num);                 // 延时
void Init_DS18B20();                    //初始化DS18B20
unsigned char ReadOneChar();            //读一个字节
void WriteOneChar(unsigned char dat);   //写数据
unsigned int Readtemp();                //读温度
void display();                         //显示温度/**************************************************************
主程序
*************************************************************/
main()
{   init_1602();   //LCD1602初始化while(1){readtime(); //读时间   displaytime();  //显示时间key();            //调整时间键盘display();     //读温度并显示switchfunction();//调功能切换程序,若功能切换键按下,进入计算器显示模式}
}  /*************DS18B20温度读取模块*************/
void tmpDelay(int num)//延时函数
{while(num--) ;
}void Init_DS18B20()//初始化ds1820
{unsigned char x=0;DS = 1;    //DS复位tmpDelay(8);  //稍做延时DS = 0;    //单片机将DS拉低tmpDelay(80); //精确延时 大于 480usDS = 1;    //拉高总线tmpDelay(14);x=DS;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败tmpDelay(20);
}unsigned char ReadOneChar()//读一个字节
{unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DS = 0; // 给脉冲信号dat>>=1;DS = 1; // 给脉冲信号if(DS)    dat|=0x80;tmpDelay(4);}return(dat);
}void WriteOneChar(unsigned char dat)//写一个字节
{   char i;for (i=8; i>0; i--)  {DS = 0;   DS = dat&0x01; tmpDelay(5);DS = 1;    dat>>=1;  }
}unsigned int Readtemp()//读取温度
{unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;   Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器a=ReadOneChar();   //连续读两个字节数据   //读低8位 b=ReadOneChar();                          //读高8位t=b;t<<=8;t=t|a;            //两字节合成一个整型变量。tt=t*0.0625;     //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度t= tt*10+0.5;   //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。return(t);
}void display()
{uint num;                   //定义的时候用uchar宏定义就会出错uint shi,ge,xiaoshu;       //这里的num,shi,ge,xiaoshu 必须用uint无符号整数来表示,用uchar字符型则显示错误num=Readtemp();shi=num/100;  ge=num/10%10;  xiaoshu=num%10;      //write_com(0x80+0x40+0xa); write_date(wendu[shi]);write_com(0x80+0x40+0xb);  write_date(wendu[ge]);write_com(0x80+0x40+0xc);   write_date(0x2e);write_com(0x80+0x40+0xd);    write_date(wendu[xiaoshu]); write_com(0x80+0x40+0xe);     write_date(0xdf);write_com(0x80+0x40+0xf);    write_date(0x43);
}           

单片机设计 万年历与计算器(AT89C51)相关推荐

  1. 单片机设计_智能计算器(AT89C51、LCD1602、矩阵键盘)

    基于单片机的智能计算器(AT89C51.LCD1602.矩阵键盘) 想要更多项目私wo!!! 一.简介 此电路由AT89C51最小系统.LCD1602液晶显示模块和矩阵键盘模块组成. 二.执行效果 三 ...

  2. 51单片机怎么显示当前时间_电子设计模块项目专题:史上讲解最全的51单片机设计万年历项目①

    1.设计任务书: 设计任务书 学生姓名: 班级: 学号: 题目:1602A液晶显示万年历设计 一.设计任务:本设计由数据显示模块.温度采集模块.时间处理模块和调整设置模块四个模块组成.系统以AT89S ...

  3. 单片机加减法计算器_十进制加减法计算器单片机设计.doc

    十进制加减法计算器单片机设计 十进制加减法计算器单片机设计 一.设计目的 通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用汇编语言编程的能力,并将所学的内容加以综合.通过查阅资料, ...

  4. c语言课程设计之简易计算器,简易计算器课程设计 帮忙写简单计算器课程设计...

    帮忙写简单计算器课程设计书繁华若真如一梦,过而无痕多好,人就不必失意,只当醉了一场,醒来仍过平淡的生活. 程序 #include #include //定义atlf函数 #include 简介下的 要 ...

  5. 基于AT89C52单片机的万年历设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87777668?spm=1001.20 ...

  6. 基于51单片机的简易电子计算器——有温度显示和万年历等额外功能

    基于51单片机的简易电子计算器--有温度显示和万年历等额外功能 设计实际所实现的功能 模式一可显示日期.时钟.温度,模式二可进行计算器的计算,且显示日期温度模式和计算器模式可随意切换,模式三可以滚动显 ...

  7. 单片机简易计算机有程序,AT89C51单片机C实现简易计算器

    <AT89C51单片机C实现简易计算器>由会员分享,可在线阅读,更多相关<AT89C51单片机C实现简易计算器(15页珍藏版)>请在人人文库网上搜索. 1.AT89C51单片机 ...

  8. 检测噪声大小的c语言程序,单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计.doc...

    单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计 摘 要 本文以AT89S52 单片机为控制核心,通过播音判断电路寻找广播间歇时段,实时采集噪声环境内的噪音信 号,根据A/ D 转换 ...

  9. 51单片机节日彩灯控制c语言,采用AT89C51单片机设计的可编程彩灯控制

    本文介绍一种采用单片机设计的可编程彩灯控制器,使用者布置好彩灯接好线路后不需要改变接线,就可以按自己的要求编入各路彩灯的亮灭顺序和延时时间,随时改变显示花样,可配合各种字符.图案,增加艺术效果,也可用 ...

最新文章

  1. 什么工具可以去视频去水印
  2. 函数的使用——未完待续
  3. RecyclerView复杂适配器的终极形态?代码更解耦
  4. 小小军团获取服务器配置文件,小小军团2资源攻略 六种办法让你不再缺资源
  5. CSDN转载别人文章的详细步骤
  6. flutter 判断是不是调试模式_女人怎么判断男人是不是喜欢自己//男人真正喜欢女人的追求方式...
  7. html5 建筑物模型,基于HTML5的建筑物阴影实时模拟
  8. eclipse中anroid adk添加
  9. 鸿蒙810 980,稳了!鸿蒙系统升级名单再曝:至少麒麟980机型都能升级
  10. ThreadLocal http://blog.jobbole.com/20400/
  11. 14款荣耀/华为机型获版本升级: 适配FlyPods Pro骨声纹识别
  12. android 说出密码,关于未来的住宅的作文400字5篇
  13. 大数据从入门到就业的四个必备常识
  14. python继承语法_python语法学习面向对象之继承
  15. inheritConstructorStealing.js
  16. spring REST中的内容协商(同一资源,多种展现:xml,json,html)
  17. java 32位无符号整数_Java中32位无符号数的取法
  18. APISpace 全国行政区查询API 方便好用
  19. 目前可行的4种知网文献免费下载方法分享
  20. 你也可以找到好工作(二)

热门文章

  1. 实战版 天猫精灵接入指南(AliGenie接入)
  2. 使用EasyExcel从Excel表格读取链接地址下载文件
  3. bind9 dlz mysql_Bind9和MySQL DLZ缓冲区错误
  4. GitHub上Swift语言指南
  5. 新书来了 | 邀您一起来看看
  6. robotframework-ride.py:在python2切换至python3时,ride.py变成了文本格式,不能使用python3打开,此时右键属性,更改……
  7. 用python实现相声、评书自动下载(二)
  8. Problem E. L04-05 计算银行存款余额和利息(单利计算简单问题)
  9. 201606中通笔试题
  10. js 通过id名找到对象数字里对应的name