万年历阴历星期温度

万年历阴历星期温度
万年历阴历星期温度

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit CLK=P1^1; //DS1302时钟线

sbit SDA=P1^0; // DS1302数据线

sbit RST=P1^2; //DS1302复位线

sbit RS=P2^0;//数据/指令选择端口

sbit RW=P2^1;//读写端口

sbit EN=P2^2;//使能端口

sbit K1=P3^4; // 选择

sbit K2=P3^5; // 加

sbit K3=P3^6; // 减

sbit K4=P3^7; // 确定

uchar tCount=0;//一年中每个月的天数,2月的天数由年份决定

uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};

uchar *WEEK[]={"sun","mon","tus","wen","thu","fri","sat"};//周日,周一到周六

uchar LCD_DSY_BUFFER1[]={"Date 00-00-00 "}; //LCD显示缓冲

uchar LCD_DSY_BUFFER2[]={"Time 00-00-00 "};

uchar DateTime[7]; //所读取的日期时间

char Adjust_Index=-1; //当前调节的时间:秒,分,时,日,

uchar Change_Flag[]="-MHDM-Y";

uchar Read_LCD_State();//读LCD状态

void LCD_Busy_Wait();//判忙

void Write_LCD_Data(uchar dat);//写数据

void Write_LCD_Command(uchar cmd);//写命令

void Init_LCD();//LCD初始化

void Set_LCD_POS(uchar p);//设置显示位置

void Display_LCD_String(uchar p,uchar *s);//写字符串

void DelayMS(uint x)//延时

{

uchar i;

while(x--) for(i=0;i<120;i++);

}

uchar Read_LCD_State()//读LCD状态

{

uchar state;

RS=0;

RW=1;

EN=1;

DelayMS(1);

state=P0;

EN=0;

DelayMS(1);

return state;

}

void LCD_Busy_Wait()//判忙

{

while((Read_LCD_State()&0x08)==0x80);

DelayMS(5);

}

void Write_LCD_Data(uchar dat) //写数据

{

LCD_Busy_Wait();

RS=1;

RW=0;

EN=0;

P0=dat;

EN=1;

DelayMS(1);

EN=0;

}

void Write_LCD_Command(uchar cmd)//写命令{

LCD_Busy_Wait();

RS=0;

RW=0;

EN=0;

P0=cmd;

EN=1;

DelayMS(1);

EN=0;

}

void Init_LCD() //LCD初始化

{

Write_LCD_Command(0x38); DelayMS(1);

Write_LCD_Command(0x01); DelayMS(1);

Write_LCD_Command(0x06); DelayMS(1);

Write_LCD_Command(0x0C); DelayMS(1);

Display_LCD_String(0x00,"zhongzhoudaxue "); // DelayMS(1000);

Display_LCD_String(0x40," dian zi ri li ");

DelayMS(2000);

}

void Set_LCD_POS(uchar p)

{

Write_LCD_Command(p|0x80);

}

void Display_LCD_String(uchar p,uchar *s) {

uchar i;

Set_LCD_POS(p);

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

{

Write_LCD_Data(s[i]);

DelayMS(1);

}

}

/*--------------------------

向DS1302写入一字节

---------------------------*/

void DS1302_Write_Byte(uchar x)

{

uchar i;

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

{

SDA=x&1;

CLK=1;

CLK=0;

x>>=1;

}

}

/*-------------------------------

从DS1302读取一字节

--------------------------------*/

uchar DS1302_Read_Byte()

{

uchar i,b,t;

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

{

b>>=1;

t=SDA;

b|=t<<7;

CLK=1;

CLK=0;

}

return b/16*10+b%16;

}

/*-------------------------------

从DS1302指定位置数据

--------------------------------*/

uchar Read_Data(uchar addr)

{

uchar dat;

RST=0;

CLK=0;

RST=1;

DS1302_Write_Byte(addr);

dat=DS1302_Read_Byte();

CLK=1;

RST=0;

return dat;

}

/*-------------------------------

向DS1302某地址写入数据

--------------------------------*/

void Write_DS1302(uchar addr,uchar dat)

{

CLK=0;

RST=1;

DS1302_Write_Byte(addr);

DS1302_Write_Byte(dat);

CLK=0;

RST=0;

}

/*------------------------------------

设置时间

------------------------------------*/

void SET_DS1302()

{

uchar i;

Write_DS1302(0x8e,0x00);

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

{

Write_DS1302(0x80+2*i,(DateTime[i]/10<<4|(DateTime[i]%10)));

}

Write_DS1302(0x8e,0x80);

}

/*------------------------------------

读取当前时期时间

------------------------------------*/

void GetTime()

{

uchar i;

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

{

DateTime[i]=Read_Data(0x81+2*i);

}

}

/*------------------------------------

时间和日期转换成数字字符

------------------------------------*/

void Format_DateTime(uchar d,uchar *a)

{

a[0]=d/10+'0';a[1]=d%10+'0';

}

/*------------------------------------

判断是否为闰年

------------------------------------*/

uchar isLeapYear(uint y)

{

return (y%4==0&&y%100!=0)||(y%400==0);

}

/*------------------------------------

星期转换

------------------------------------*/

void RefreshWeekDay()

{

uint i,d,w=5;

for(i=2000;i<2000+DateTime[6];i++)

{

d=isLeapYear(i) ? 366 : 365;

w=(w+d)%7;

}

d=0;

for(i=1;i

d+=DateTime[3];

DateTime[5]=(w+d)%7+1;

}

/*------------------------------------

年月日时分秒++/--

------------------------------------*/

void DateTime_Adjust(char x)

{

switch (Adjust_Index)

{

case 6: //年

if(x== 1&&DateTime[6]<99) DateTime[6]++;

if(x==-1&&DateTime[6]>0) DateTime[6]--;

MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;

if(DateTime[3]>MonthsDays[DateTime[4]])

DateTime[3]=MonthsDays[DateTime[4]];

RefreshWeekDay();

break;

case 4: //月

if(x== 1&&DateTime[4]<12) DateTime[4]++;

if(x==-1&&DateTime[4]>1) DateTime[4]--;

MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;

if(DateTime[3]>MonthsDays[DateTime[4]])

DateTime[3]=MonthsDays[DateTime[4]];

RefreshWeekDay();

break;

case 3: //日

MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;

if(x== 1&&DateTime[3]

if(x==-1&&DateTime[3]>0) DateTime[3]--;

RefreshWeekDay();

break;

case 2: //时

if(x== 1&&DateTime[2]<23) DateTime[2]++;

if(x==-1&&DateTime[2]>0) DateTime[2]--;

break;

case 1: //秒

if(x== 1&&DateTime[1]<59) DateTime[1]++;

if(x==-1&&DateTime[1]>0) DateTime[1]--;

break;

}

}

/*------------------------------------

定时器每秒刷新LCD显示

------------------------------------*/

void T0_INT() interrupt 1

{

TH0=-50000/256;

TL0=-50000%256;

if(++tCount!=2) return;

tCount=0;

Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5);

Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8);

Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11);

strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]);

Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5);

Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8);

Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11);

Display_LCD_String(0x00,LCD_DSY_BUFFER1);

Display_LCD_String(0x40,LCD_DSY_BUFFER2);

}

/*------------------------------------

键盘中断

------------------------------------*/

void EX_INT0() interrupt 0

{

if(K1==0) //选择调整对象:年,月,日,时,分,秒{

while(K1==0);

if(Adjust_Index==-1||Adjust_Index==1) Adjust_Index=7;

Adjust_Index--;

if(Adjust_Index==5) Adjust_Index=4;

LCD_DSY_BUFFER2[13]='[';

LCD_DSY_BUFFER2[14]=Change_Flag[Adjust_Index];

LCD_DSY_BUFFER2[15]=']';

}

else

if(K2==0) // 加

{

while (K2==0); DateTime_Adjust(1);

}

else

if(K3==0) // 减

{

while (K3==0); DateTime_Adjust(-1);

}

else

if(K4==0) // 确定

{

while(K4==0);

SET_DS1302(); //调整后的时间写入DS1302

LCD_DSY_BUFFER2[13]=' ';

LCD_DSY_BUFFER2[14]=' ';

LCD_DSY_BUFFER2[15]=' ';

Adjust_Index=-1;

}

}

/*------------------------------------

主程序

------------------------------------*/

void main()

{

Init_LCD(); //CLD初始化

IE=0x83; // 允许INT0,T0中断

IP=0x01;

IT0=0x01;

TMOD=0x01;

TH0=-50000/256;

TL0=-50000%256;

TR0=1;

while(1)

{

if(Adjust_Index==-1) GetTime();

}

}

带温度显示的万年历_数码管显示(附电路图和源代码)

设计报告 设计任务: 设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。设计要求: 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术所连线路和单片机接口仿真图如图3所示: 图3 仿真按键 4)温度采集部分: DS18B20温度传感器,测温范围-55℃~+125℃,固有测温分辨率0.5℃。独特的单线接口方式,DS18B20在与微处理器

连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示 : 程序如下: ReadOneChar(void) { unsigned char i=0;// 定义i用于循环 unsigned char dat = 0;// 读取的8位数据 for (i=8;i>0;i--)//8次循环 { DQ = 0;// 拉低DQ总线开始读时序 dat>>=1;// dat左移一位 DQ = 1; //释放DQ总线 if(DQ)// 如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat 即为读取的数据) //DQ=0,就跳过 dat|=0x80; Tdelay(4);// 延时以完成此次读时序,之后再读下一数据 } return(dat); 返回读取的dat } //写一个字节 WriteOneChar(unsigned char dat) { unsigned char i=0;// for (i=8; i>0; i--)// { DQ = 0;// DQ = dat&0x01;// Tdelay(5);//延时以完成此次读时序,之后再读下一数据

带温度计的万年历

设计课题题目: 带温度计的万年历 一、设计任务与要求 1. 显示准确的北京时间(时、分、秒)及公历日期显示功能(年、月、日); 2. 可通过按键切换年、月、日及时、分、秒的显示状态; 3. 可随时可以调校年、月、日或时、分、秒; 4. 可每次增减一进行时间调节,也可快速增减进行时间调节; 5. 可显示环境温度。 二、系统设计方案 方案一、用主芯片为AT89C51的单片机控制实现,使用单片机内部的定时计数器实现时间的设定,使用按键进行时间的调整和定时,按键有蜂鸣器提示,温度传感器使用DALLAS 公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配处理器等优点。显示时间和温度使用数码管显示。 方案二、用主芯片为STC89C52的单片机控制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用按键进行时间的调整和定时,温度传感器使用 DS18B20。显示时间和温度使用LCD1602显示。 方案一片内定时器会导致计时节拍的时间误差,当进行年、月、日的日历计时,定时中断误差扥积累就会很大。使用片内定时器进行计时的时候,单片机始终要处于工作状态。才能维持计时时间,一旦停机或进入待机状态,开机后,计时时间就需要重新设定。为了满足单片机系统的实时钟需求,本设计采用的是方案二,系统框图如图2-1所示。 图2-1 三、单元电路分析与设计 1. 原理分析 1.1主控制器 单片机STC89C52 具有低电压供电和体积小等特点,如图3-1所示。

1.2晶振电路 AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图3-2所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz 之间,电容C1、C2取值范围在5~30pF 之间。 根据实际情况,本设计晶振选择频率为12MHZ ,电容选择30pF 如图3-2。经计算得单片机工作的机器周期为:12×(1÷12M )=1us 。振荡器的振荡信号从XTAL2端输入到片内的时钟发生器上。时钟发生器是个二分频的触发器,它将振荡器的信号频率fosc 除以2,向CPU 提供两相时的时钟号。 1.3复位电路 时钟电路工作后, 芯片内部开始进行初始复位,如图3-3 。 1.4 LCD 显示电路 显示器是单片机常用的功能单元之一,显示器的工作是由单片机通过显示接口驱动的。本设计采用的是LCD1602显示电路图如图3-4所示。

万年历阴历星期温度

#include #include #include #define uchar unsigned char #define uint unsigned int sbit CLK=P1^1; //DS1302时钟线 sbit SDA=P1^0; // DS1302数据线 sbit RST=P1^2; //DS1302复位线 sbit RS=P2^0;//数据/指令选择端口 sbit RW=P2^1;//读写端口 sbit EN=P2^2;//使能端口 sbit K1=P3^4; // 选择 sbit K2=P3^5; // 加 sbit K3=P3^6; // 减 sbit K4=P3^7; // 确定 uchar tCount=0;//一年中每个月的天数,2月的天数由年份决定 uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31}; uchar *WEEK[]={"sun","mon","tus","wen","thu","fri","sat"};//周日,周一到周六 uchar LCD_DSY_BUFFER1[]={"Date 00-00-00 "}; //LCD显示缓冲 uchar LCD_DSY_BUFFER2[]={"Time 00-00-00 "}; uchar DateTime[7]; //所读取的日期时间 char Adjust_Index=-1; //当前调节的时间:秒,分,时,日, uchar Change_Flag[]="-MHDM-Y"; uchar Read_LCD_State();//读LCD状态 void LCD_Busy_Wait();//判忙 void Write_LCD_Data(uchar dat);//写数据 void Write_LCD_Command(uchar cmd);//写命令 void Init_LCD();//LCD初始化 void Set_LCD_POS(uchar p);//设置显示位置 void Display_LCD_String(uchar p,uchar *s);//写字符串 void DelayMS(uint x)//延时 { uchar i; while(x--) for(i=0;i<120;i++); } uchar Read_LCD_State()//读LCD状态 { uchar state;

lcd数显温度万年历电波钟

外观尺寸:29cm(宽)*18.5cm(高) 可挂可摆,背面有挂孔,可挂在墙上,也可以安装随机配送的支架摆放在台面上。 电子说明书地址:https://www.360docs.net/doc/2817678292.html,/item.htm?spm=a1z09.5.0.4 0&id=16362908718 功能特点: 1、时间显示:时:分:秒,12/24小时制可选 2、日历显示:日/月 3、星期显示:英文简写 4、温度显示:摄氏或华摄,范围:0℃-50℃(32℉-122℉),分辨率:0.1℃。 5、闹铃功能:可设置1个闹铃时间。 6、特殊日期提醒功能:可设置三个特殊日期提醒。 使用电源:两节AA电池(不配送电池),超省电,两节电池可使用一年以上。 使用说明: 一、信号自动同步: 当时钟正确装上电池后,稍等几秒,自动开始接收日本发射的无线电校时信号,接收过程中屏幕右上角显示一个闪动的信号接收塔标识。当接收到正确的时间信号后,接收塔标识停止闪动并自动同步时间和日历信息,时钟每天会定时进行接收,无须人工干预。如果接收不成功,时钟仍可以作为一个高精度石英钟使用。 时钟在接收信号的过程(接收塔标识闪动)中无法进行其他功能的操作,如果需要进行其它设置或取消接收,须按下‘+’键退出接收状态。为了达到最好的接收效果,应将时钟远离其它用电器至少在1-2米以上,并可以适当转动时钟位置以获取最佳接收效果。 二、信号手动同步: 在正常的时钟显示模式,长按‘+’键,强制进入信号接收状态,此时收塔标识闪动,接收过程与自动同步一样。 三、手动设定时钟、日历: 在正常的时钟显示模式,长按‘CLK/CAL’键,进入时间日历设置界面,当前设置项目闪动,通过短按‘+,-’键调整数值,再短按‘CLK/CAL’确认并进入下一设置项目。设置项目顺序:12/24时制—小时—分钟—年—月—日—时区。 四、每日闹钟设置: 在正常的时钟显示模式,长按‘ALARM’键,进入闹铃设置界面,通过短按按‘+,-’键输入每天的闹铃时间,最后按‘ALARM’键确认。 在正常的时钟显示模式,短按‘-’键可以开启和关闭闹铃功能,当闹铃响时,按任意键都可以关闭闹铃。 五、特殊日期提醒设置:

基于51单片机带温度显示的液晶万年历

摘要 在寒假期间我用一周时间完成了这个液晶万年历,它可以显示年月日、时分秒、以及温度(可上下限报警),可以对时间进行加一或减一调整,并加入了闰、平年时间调整,方便可行,已经调试成功。考虑到成本和方便,本作品采用了STC89c52和DS18B20,计时用的是51单片机自带的十六位定时器/计数器T0,尽管对时间进行了误差调整但是还是有一定的误差,考虑到学校后改用DS1302时钟芯片,进一步减小误差。温度显示精度达到0.1摄氏度。 关键词:单片机 DS18B20 万年历温度 1.硬件工作介绍 (1)上电自动复位及手动复位电路 STC89c52单片机的RST端外部复位有两种操作方式:上电自动复位和按键手动复位。本设计用上电自动复位以及手动复位下结合的方式外接电路(见附图)。 (2)时钟振荡电路 作品中采用12M晶振,其连接方法如图所示,其中电容的值都为22pF。(3)1602液晶显示接口 1602采用标准的16脚接口(见附图),其中: 第1脚:GND为地电源 第2脚:VCC接5V正电源 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。 第15脚:VCC 第16:GND (4)键盘 键盘是通过S3(P3.2),S4(p3.3),S5(p3.4)对时钟进行调整,其S3选择要调整的对象如时,分,日,月等等,并在液晶屏上显示所选的对象。S4对所选中

可以显示温度的万年历程序(已在PD1000开发板上运行)

//1602+18b20+ds1302程序 // 程序名称:1602+18b20+ds1302程序 // 实验目的:综合应用lcd1602,ds18b20,ds1302 // 连接方法:将LCD1602液晶屏插到J9端子上引脚朝下 // JP8与JP5 用8p排线连接 // 描述:液晶显示当前时间(可调整),温度(精度可调) // K1设置键 K2递增键 K3递减键 // 版本:PD1000开发板 // 作者:青岛普爱特 // 日期:2011.02.28 //注:(1):主芯片STC89C52RD 使用12M晶振 // (2):Keil uV3 3.30编译运行通过 // (3):本例程在 PD1000 开发板平台上成功运行通过 // (4):青岛普爱特版权所有,只供学习参考,不得应用于商业用途. // (5):公司网站:https://www.360docs.net/doc/2817678292.html, 淘宝网店:https://www.360docs.net/doc/2817678292.html, #include #include #include #define uchar unsigned char //功能引脚定义 sbit set= P1^0; //设置调整按键 sbit up = P1^1; //加键 sbit down =P1^2; //减键 sbit LCM_RS= P2^5; //l602定义引脚 sbit LCM_RW= P2^6; sbit LCM_E =P2^7; #define LCM_Data P0

#define Busy 0x80 //用于检测LCM状态字中的Busy标识 uchar id,timecount,dipsmodid; bit lmcinit_or_not; //是否需要清屏标志位“1”为需要“0”为不需要 bit flag,sflag; //flag是时钟冒号闪烁标志,sflag是温度负号显示标志void Disp_line1(void); //显示屏幕第一行 void Disp_line2(void); //显示屏幕第二行 void id_case1_key(); void Disp_mod0(void); //*********** DS1302 时间显示定义部分 sbit T_IO =P3^4; sbit T_RST=P3^5; sbit T_CLK=P3^6; sbit ACC0=ACC^0; sbit ACC7=ACC^7; void Set(uchar,uchar); //根据选择调整相应项目 void RTInputByte(uchar); /* 输入 1Byte */ uchar RTOutputByte(void); /* 输出 1Byte */ void W1302(uchar, uchar); // 向DS1302写入一个字节 uchar R1302(uchar); // 从DS1302读出一个字节 void Set1302(unsigned char * ); // 设置时间 bit sec,min,hour,year,mon,day,weekk; //闪烁标志位 //初始化后设置为:11年02月28日星期1 08点11分59秒 unsigned char inittime[7]={0x59,0x11,0x08,0x28,0x02,0x11,0x01}; // 秒分钟小时日月年星期 //***** 18B20温度显示定义部 sbit DQ=P3^7; //18B20 接P3.7口 typedef unsigned char byte; typedef unsigned int word; Read_Temperature(char,char); void mychar(void); byte ow_reset(void); byte read_byte(void); void write_byte(char val); void adjust_res(char res); //res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应 // 0.5, 0.25, 0.125

多功能液晶显示万年历、温度计

实验报告 实验名称:多功能液晶显示万年历、温度计的制作 所在专业:测控技术与仪器 学生姓名: 班级学号: 任课教师:陆婷 2014 /2015 学年第一学期

摘要:多功能液晶显示万年历、温度计具有造型美观、经济实用,性能稳定、耗电少等优点。实验内容为学习PCB板的设计和绘制方法,完成一个多功能万年历、温度计的装配及调试。 一、设计目的:1. 了解并掌握多功能液晶显示万年历、温度计的主要工作原理,更好的理解和掌握平时所学的电子电路理论知识; 2.认识贴片元件,学习贴片元件的装配方法和PCB板的设计和绘制方法; 2.通过自己亲自动手装配,锻炼动手能力,提高学生解决实际电路问题的能力。还能激发学生的好奇心。 二、基本功能说明: (1)液晶同屏显示年、月、日、星期、时、分、秒,正常走时状态下,外围电路设有一LED秒指示灯,每秒闪烁一次。 (2)开机画面显示3秒,显示相关制作信息3秒,清屏后进入正常走时状态。 (3)整点报时功能,早8点到晚10点,多首歌曲在整点时刻循环播放,每首歌曲的长度均控制在一分钟以内。 (4)公历和农历所有的节日提醒,均在屏幕最下面一行显示。如果当天是某个节日,则显示相关节日信息,若当天无任何节日,则可显示当天的各个时段信息,如:凌晨、早晨、上午、中午、下午、

晚上、夜里、深夜等。 (5)实时温度显示,精确到小数点后一位。(6)时间调整:在正常走时状态下,按SET键进入时间调整界面,可以依次调节年、月、日、星期、时、分等信息,按CLK键退出当前的调整状态,恢复正常走时。 (7)闹钟调整:在正常走时状态下,按CLK键,进入闹钟设置界面,可以依次调节闹钟小时、闹钟分、闹钟开启和闹钟关闭。当想要设置闹钟时,设置好小时、分之后,再按此键至闹钟开启,按SET键即可退出闹钟设定界面,闹钟设置完成,若不想使用闹钟,就按CLK 键至闹钟关闭状态时,再按SET键退出界面,则闹钟被关闭。(8)外部电路设有扬声器开关,用户可根据需要自行开关扬声器。(9)电路板界面设计人性化,便于人机交互,在正常走时界面或任一调整界面状态时,均会在相应按键对应位置显示相关的操作提示信息,使用户使用方便,易学易用。 三、元件

万年历说明书

万年历说明书 2、定闹的设置:按“D”键,进入定闹的设置,月数码管位置显示定闹序号,序号闪烁,按“B”或“C”键,可选择定闹1~4中的某个设置;再按“D”键时闪烁,按“B”或“C”键其调整为设置值;再按“D”键分闪烁,按“B”或“C”键其调整为设置值;再按“D”键,在日数码管位置显示“on”或“--”的定闹状态并闪烁,,按“B”或“C”键,关闭或开启此定闹,再按“D”键,退出定闹的设置。注:4个定闹中只要有1个或1个以上的定闹状态设置为开启,定闹指示灯即亮,只有所有定闹的状态都为关闭时,定闹指示灯才灭。 3、整点闹铃的设置:在正常运行状态下,按一下“B”键,面板上的整点闹指示灯“亮”表示整点闹铃已开启,反之,灯“灭”为关闭。 数码万年历使用说明书 作者pupaishop浏览213发布时间11/09/24 1.按键阐明:报时/退出键、设置键、上调键、下调/定闹键、流水键、模式/定闹键(模式键只在选为倒计天或逆计天才有)。 2.时光调剂: ①反常走时状态下,按“设置”键进进时间设置状态,同时暮年份“闪

耀”,可按“上调”或“下调”键建改暮年份,修正佳先按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键建改月份;用同样的方式可对于日、时、分、秒入止设置;12个公历节日及正计地数、24个农历节气及正计天数、12生肖、12星座、礼拜、工历月、日将自静追随母历的变更。 ②该秒设定佳先,再按“设置”键退出时间设置,归到正常时间状态。 3.12/24小时制切换: 在反常走时状态,按住“上调”键3秒钟,则可进止12小时制取24小时造的切换。 下电单位时,否默以为24大时造或者12大时造,由选项决议。4.启/闭零面报时: 在正常走时状态,按一下“上调”键,则可以挨开整点报时指导灯和整点报时功能;按一下“上调”键,则可以关关整点报时指导灯战整点报时功能。 5.地数正计时或逆计时(由选项决议) 在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示“????”,表示计时“无效”;若显示详细数字表示有效,按“上调”键可以切换“有效”/“无效”,按“设置”键进入天数设定,且右边第一位(千位)闪烁,按“上调”或“下调”键修改内容,按“设置”键挪动闪烁位置到第两位(百位),按“上调”或“下调”键修改闪烁位的内容,同样方式可设置十位取个位。

数字万年历温度控制器

// Header: DS18B20 // File Name: tem.h #include #include"tem.h" #define uint unsigned int #define uchar unsigned char uchar code table[]=" 2013-05-24 FRI"; uchar code table1[]=" 23:59:55 "; uchar code week[]="MON TUE WED THU FRI STA SUN"; uchar code dis4[]={"0123456789-."}; sbit rs=P3^4; sbit rw=P3^5; sbit lcden=P3^6; sbit s1=P1^1; sbit s2=P1^2; sbit s3=P1^3; sbit feng=P3^7; sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; //uint set_higer=300; uint yushezhi=8500; uint w1=300; uint w2=310; uint w3=320; uint w4=330; uint w5=340; uint w6=350; uint w7=360; uint w8=370; uchar count,s1num,k; char shi,fen,miao,year1,year2,month,day,w,Y; void delayms(uchar z) //延时函数{ uchar i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void write_com(uchar com)

LCD带温度显示万年历

LCD带温度显示万年历.txt都是一个山的狐狸,你跟我讲什么聊斋,站在离你最近的地方,眺望你对别人的微笑,即使心是百般的疼痛只为把你的一举一动尽收眼底.刺眼的白色,让我明白什么是纯粹的伤害。LCD带温度显示万年历(2009-4-5 15:02:00)【收藏】【评论】【打印】【关闭】 标签:1 #include #include #define uchar unsigned char #define uint unsigned int #define LCD_Data P2 #define Busy 0x80 //用于检测LCD状态字中的Busy标识 sbit DQ = P1^3; sbit lcdrs = P3^5; //数据命令选择端(H/L) sbit lcdrw = P3^6; //读写选择端(H/L) sbit lcde = P3^7; //使能信号 sbit SCL2=P1^0; //SCL2定义为P1口的第3位脚,连接DS1302SCL和ADC0831SCL脚 sbit SDA2=P1^1; //SDA2定义为P1口的第4位脚,连接DS1302SCL和ADC0831SDA脚 sbit RST = P1^2; // DS1302片选脚 sbit key0 = P0^0; //定义三个按键 sbit key1 = P0^1; //加按键 sbit key2 = P0^2; //减按键 sbit H1 = P0^3; sbit L=P0^4; bit presence ; uchar code cdis2[ ] = {" . C "} ; uchar buzyc,funtion_flag=0,temp_num; char shi,fen,miao,nian,yue,ri,xin; uchar beep; unsigned char data temp_data[2] = {0x00,0x00} ; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ; unsigned char code mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; unsigned char l_tmpdate[8]={0x00,59,12,19,2,8,2};//显示初值 unsigned char l_tmpdisplay[8]={0x40,0x40,0x40,0x40,0x40,0x40,0x40,0};//待显示的数code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}; //1302写入地址 code unsigned char

带温度显示万年历--单片机课程设计

课程设计说明书 课程名称: 《单片机技术》 设计题目:万年历 院(部):电子信息与电气工程学院 学生姓名: ******* 学号:************ 专业班级:************ 指导教师:******* 20**年5月23日

课程设计任务书

万年历 摘要:设计了一个带温度显示的万年历电路系统,该电路具有年、月、日、星期、时、分、秒、闹钟显示和调整功能,并且还能显示温度和按键鸣叫、整点鸣叫、定时闹钟鸣叫等功能。其中显示部分采用LCD1602显示,时钟部分采用DS1302时钟芯片,温度部分采用DS18B20单线温度传感器。报时鸣叫采用有源蜂鸣器并用三极管驱动。软件方面我们采用C语言编程,利用Keil uVision4软件编写C语言程序并且生成HEX文件。先将程序在Proteus仿真,通过之后再烧录到单片机中。该设计的优点是充分利用了LCD1602的显示功能完成了万年历应该具有的功能并且还扩展了温度和闹钟。不足之处是收到LCD1602显示功能的限制没能显示农历日期,而且报时部分只是发出滴滴声而不是语音报时。 关键词:万年历;LCD1602;温度传感器(DS18B20);时钟芯片(DS1302)

目录 1.设计背景 (1) 1.1时钟的用途及精度的需求 (1) 1.2万年历的使用现状及设计目的 (1) 2.设计方案..............................................................................12.1任务分析 (1) 2.2方案选择和论证 (2) 2.2.1显示模块选择方案和论 (2) 2.2.2时钟模块的方案选择和论证 (2) 2.2.3按键控制模块的方案选择和论证 (2) 2.2.4温度采集模块方案选择 (3) 2.2.5方案的整体框图 (3) 2.2.6设计流程图程序部分的拟定案 (4) 3.方案实施 (5) 3.1.1整体电路及其分析 (5) 3.1.2电源电路 (6)

单片机万年历 时钟 闹钟 温度程序

这个程序是在1602液晶上显示世界时钟,并且能设定闹钟,链接闹钟的引脚为p1^4,w1控制位选,w2控制加一,w4控制减一 w6为闹钟模式和时钟模式的切换键,按一下w6可设定那种时间,w2单独使用时为开关闹钟,中间屏蔽了一段18b20温度显示程序,把屏蔽去除后也能在液晶上显示温度 #include #define uchar unsigned char #define uint unsigned int sbit DQ=P2^3; sbit L=P1^4; sbit DZ=P3^5;//这是用于控制数码管关闭,这个数码管和液晶同时亮所需电流大,单片机难驱动 sbit rs=P2^5; sbit rw=P2^6; sbit lcden=P2^7; sbit w1=P3^2; sbit w2=P3^3; sbit w4=P3^4; sbit w6=P3^7; sbit jd=P3^6; uchar temp,f,k; uchar count,s1num; uchar miao,shi,fen,miao1,shi1,fen1,nian=14,nian2=20,yue=12,ri=12,ri1=12,r=0,k,num; uchar code table[]=" 2014-12-12 FRI "; uchar code table1[]=" 00:00:00"; uchar code table2[]="MONTUEWEDTHUFIRSATSUN"; //************************************************ //延时函数,在12MHz的晶振频率下延时1ms //************************************************ void delay(uint t) { uchar x,y; for(x=t;x>0;x--) for(y=110;y>0;y--); } //写数据 //************************************************ void write_com(uchar com) { rs=0; lcden=0; rw=0; P0=com; delay(5); lcden=1;

st89c52单片机万年历(温度显示)

燕京理工学院 课程设计报告 课程名称: 电子课程设计 设计题目:基于单片机的数字万年历 专业、班级: 通信工程1401 学号: 姓名: 穆 指导教师: 赵 设计时间: 2016.12.12-2016.12.23 2017年1 月4 日

基于STC89C52的万年历设计 摘要 51以及52单片机是现今单片机学习以及开发中最具有代表性的一种,本次的毕业设计通过对它的学习以及应用,同时配备必要的外围电路,实现相应的功能,以达到学习、设计、开发软件、硬件的能力。 本设计以STC89C52RC芯片为核心,实现了以LCD1602为显示器的万年历。该万年历不但能显示日历、时间、星期,还能显示当前环境温度,并可以通过按钮校准时间,具有良好的人机操作界面。 关键词:单片机发展STC89C52万年历温度

引言 近年来,人们的生产生活方式发生了巨大的变化,产生这一变化的重要原因就是计算机技术的发展,其中就包括了微电子技术的高速发展。而单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。 时钟,自它被发明的那一天起,就成为人们生活中必不可少的物品。而随着科学技术的不断发展,人们对时间计量的精度要求越来越高,而时钟也从最原始的日晷发展到现今的高精度的石英钟表,最先进的时钟误差为37亿年误差一秒。 在现今单片机的学习、开发中,用单片机设计的时钟万年历已经成为了单片机实验中一个很常用的项目。原因是因为它具有很好的开放性和可发挥性,不仅考察了对单片机的掌握能力,同时也考察了单片机扩展应用,而且在硬件设计电路中也要力求简洁,功能齐全,显示出色,所以对操作者的要求较高。 本文主要介绍通过89C52单片机辅以时钟电路等设计的万年历及当前温度显示的方法。本次设计由单片机STC89C52为核心,辅以必要的电路,构成了一个单片机万年历以及当前温度显示,具有显示准确时间以及当前环境温度的功能,同时可对时间进行手动校准,由于采用了LCD1602进行显示,所以具有了夜视功能。 鉴于本人水平有限,设计以及说明书中难免有错误、疏漏、不足之处,在这里恳请老师批评指正不吝赐教。

带温度显示的万年历数码管显示

设计报告万年历时钟的设计班级: 09光电<2>班专业:光电子技术 姓名:阮军峰 学号: 0906010234 完成日期: 2011年06月11日

一、设计目的: 1、掌握C51程序用于实践并实现相应的功能; 2、掌握时钟程序的使用方法; 3、掌握时间函数的使用方法; 4、掌握键盘的程序使用方法; 二、设计任务: 设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。 三、设计要求: 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术指标。 四、系统方案设计: 1、系统总体设计: 1) 原理构成框图 本设计用STC89C51作为核心控制部分,外接晶振电路和74HC154,74LS138作为位选扩展电路,P3.0、 P3.1 、P3.2接三个个按钮作为时间调整部分,以两个17个数码管作为显示部分,P2口作为位选,P0口作为数据输出部分。具体框图如图1所示:

图1 原理框图

2) 主程序的设计 系统程序采用C语言按模块化方式进行设计,然后通过KeilC51L 软件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照Proteous的仿真电路图,在Protel99SE中完成电路板的逻辑布局及布线。 3) 时间调整电路的设计 采用按键设计,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,按下模式可以选择年月日时分秒星期。按下(+)(-)进行调试,程序如下: while(1) { P3_0=1; if(P3_0==0){ delay(10); if(P3_0==0)//如果按键被按下 { Kdelay(); if(P3_0==0)//确定按键按下 { while(P3_0==0); // 等待按键放开 cursor++; if(cursor>=9){cursor=0;}//如果cursor大于9则cursor=0 if(P1_0==0){cursor=0;} } } } P3_1=1; if(P3_1==0){ delay(10); if(P3_1==0) //如果按键被按下 { Kdelay(); if(P3_1==0) //确定按键按下 { if(cursor==1) { sec++;//如果cursor=1则按键按下秒数加一 if(sec==60)

自制万年历年月日时分秒周温度

万年历 #include #include "ds1302.h" #include "hareware.h" #include "18b20.h" //1MS延时子程序 void delay_ms(int x){ int i,j; for(i=0;i

unsigned char code TAB1[]={0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, 0xc0,0xb0,0x60};//数据选择输出口 char disp1[17]; //char init[7]; int j,temperture,y,t_cnt,t_cnt1,flag,mos,yiwei,shezhi,a; void trasfer(void); //数据转换 //void trasfer1(void); //数据转换2 void anjian(void);//按键判断 void shuzhi1(void);//数值的转化 void wendu(void);//温度报警 main(){ TMOD = 0X11;//定时器0和定时器0工作在方式一 TH0=(65536-time0_us)/256; TL0=(65536-time0_us)%256;//定时器0赋初值 TH1=(65536-time_us)/256; TL1=(65536-time_us)%256;//定时器0赋初值 EA=1;//开总中断开关 ET0=1;//开定时器0中断开关 TR0=1;//定时器0开始定时 ET1=1;//开定时器0中断开关 TR1=1;//定时器0开始定时 DS1302_Initial(); //初始化DS1302 // DS1302_SetTime(init1); //设置初始时间 DS1302_GetTime(now); //读取当前时间 y=temperture; flag=1; mos=0; yiwei=0; shezhi=0; a=0x20; while(1){ temperture=ReadTemperature(); anjian(); // trasfer1(); trasfer(); wendu(); } } /**************************************************/ /**************定时器T0中断服务子函数**************/ /**************************************************/

万年历显示年月日温度可以调时

#include #include #define uint unsigned int #define uchar unsigned char #define Delay4us() {_nop_();_nop_();_nop_();_nop_();} sbit SCL=P1^3; sbit SDA=P1^4; sbit SPK=P1^2; sbit DS1302_CLK=P1^7; sbit DS1302_IO =P1^6; sbit DS1302_RST=P1^5; sbit ACC0=ACC^0; sbit ACC7=ACC^7; char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; sbit Set=P2^0; sbit Up=P2^1; sbit Down=P2^2; sbit out=P2^3; sbit DQ=P1^0; char done,count,temp,flag,up_flag,down_flag; uchar temp_value; uchar TempBuffer[5],week_value[2]; void show_time(); /************************************/ //PortDefinitions**************************************************************** sbit LcdRs =P2^5; sbit LcdRw =P2^6; sbit LcdEn =P2^7; sfr DBPort =0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xb0数据端口 //内部等待函数******************************************************************* unsigned char LCD_Wait(void) { LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); LcdEn=0; return DBPort; } //向LCD写入命令或数据************************************************************* #define LCD_COMMAND 0 //Command

基于单片机带温度显示的电子万年历设计设计

基于单片机带温度显示的电子万年历设计设计

毕业设计 基于单片机带温度显示的电子万年历设计

摘要 单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。单片机是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。 本设计着重要描述的就是基于AT89S52的单片机的电子万年历。本文首先描述系统硬件工作原理,随后说明了本系统所应用的各硬件接口技术(既芯片驱动程序)和各个接口模块的功能及工作过程。本设计的主导思想是软硬件相结合来进行各功能模块的编写。 电子万年历以硬件C语言为主体进行软件设计,增加了程序的可读性和可移植性。系统通过LCD液晶输出显示数据,可以显示当前时间、公农历日期、星期、温度,并附有以峰鸣器为提示的闹铃功能。 关键词:单片机电子万年历公农历接口模块C语言

Abstract MCU rapid development of applied technology, we now live Looking at the various fields, from the missile's navigation devices, to the various instruments on the aircraft control, computer network communications and data transmission, industrial automation to the process of real-time control and data Processing, and we live in the extensive use of the smart IC cards, electronic pets, these are inseparable from the SCM. SCM is set CPU, RAM, ROM, timing, counting on one interface and a variety of microcontrollers.Its small size, low cost, feature strong, smart widely used in industry and industrial automation. This design is going to describing the calendar based on AT89S52. System hardware of main body is described first, Follow the function, principle of work a nd hardware interface (that means the chip’s drives) are introduced. The design‘s main ideas is that composes soft and hardware to achieve the design. The calendar is designed with hardware C language as the Realization tool, which increased procedure readability and transplanting. The system shows the output by LCD1602, which can demonstrate the current time, the lunar calendar date, the week, the temperature and the system, can alter people with a small sounder. Keywords: MCU Electronic calendar Lunar calendar Interface module C Language.

相关主题
相关文档
最新文档