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

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

设计报告万年历时钟的设计班级: 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)

sec=0;//如果秒数等于60秒则回到0开始

}

if(cursor==2)

{

min++;//如果cursor=2则按键按下分数加一

if(min==60)

min=0; 如果分数等于60分则回到0开始

}

if(cursor==3)

{

hour++;//如果cursor=3则按键按下时数加一

if(hour==24)

hour=0; //如果时数等于24时则回到0开始

}

if(cursor==4)

{

day++;//如果cursor=4则按键按下天数加一

if(day==31)

day=0; //如果天数等于31天则回到0开始

}

if(cursor==5)

{

month++;//如果cursor=5则按键按下月数加一

if(month==13)

month=0; //如果月数等于13月则回到0开始

}

if(cursor==6)

{

yearl++;//如果cursor=6则按键按下年数低位加一

if(yearl==100)

yearl=0; //如果年数等于100则回到0开始

}

if(cursor==7)

{

yearh++;//如果cursor=7则按键按下年数高位加一

if(yearh==30)

yearh=20; //如果年数大于30则回到0开始

}

if(cursor==8)

{

week++;//如果cursor=8则按键按下星期数加一

if(week==8)

week=1; //如果星期数等于8则回到0开始

}

}

while(P3_1==0);}

}

P3_2=1; //写入时先写1

if(P3_2==0){//按键按下

delay(10);//延时10个毫秒

if(P3_2==0)//确定按键按下

{

Kdelay();

if(P3_2==0)

{

if(cursor==1)

{

sec--;//如果cursor=1则按键按下秒数减一

if(sec==0)

sec=59; //如果秒数小于0则回到59开始

}

if(cursor==2)

{

min--;//如果cursor=2则按键按下分数减一

if(min==0)

min=59; //如果分数小于0则回到59开始

}

if(cursor==3)

{

hour--;//如果cursor=3则按键按下时数减一

if(hour==0)

hour=23; //如果时数小于0则回到23开始

}

if(cursor==4)

{

day--;//如果cursor=4则按键按下天数减一

if(day==0)

day=31; //如果天数小于0则回到31开始

}

if(cursor==5)

{

month--;//如果cursor=5则按键按下月数减一

if(month==0)

month=12; //如果月数小于0则回到12开始

}

if(cursor==6)

{

yearl--;//如果cursor=6则按键按下年的低位数减一

if(yearl==0)

yearl=99; //如果年数小于0则回到99开始

}

if(cursor==7)

{

yearh--;//如果cursor=7则按键按下年的高位数减一

if(yearh==20)

yearh=30; //如果年数小于0则回到30开始

}

if(cursor==8)

{

week--;//如果cursor=8则按键按下秒星期减一

if(week==0)

week=7; //如果星期数小于0则回到7开始

}

while(P3_2==0);

}

}

}

i=ReadTemperature();

所连线路和单片机接口仿真图如图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);//延时以完成此次读时序,之后再读下一数据

DQ = 1;//

dat>>=1;//

}

}

//读取温度

ReadTemperature(void)

{

unsigned char a=0;

unsigned char b=0;

unsigned int t=0;

float tt=0;//

Init_DS18B20();

WriteOneChar(0xCC);// 写指令,跳过ROM,

WriteOneChar(0x44);// 启动温度转换

Init_DS18B20();

WriteOneChar(0xCC);// 写指令,跳过ROM,

WriteOneChar(0xBE);// 写指令,读暂存存储器

a=ReadOneChar();//读低8位

b=ReadOneChar();//读高8位

t=b;//

t<<=8;//

t=t|a;//

tt=t*0.0625;//

t= tt*10+0.5;//

return(t); //获得0.01°C 的精度并返回

}

5) LED数码管的选择

LED数码管分为共阴和共阳两种,以利用STC89C51的P0口作为LED显示的数据部分,以P2口的七个口作为显示部分的位选,通过三八译码器和4-16译码器扩展为17位的位选分别接在一个四位数码管和13个数码管的位选部分。详细电路图如图4-5所示:

程序如下:

P2=0xF0;

P0=L1;

delay(1); //yearh P2=0xF1;

P0=L2;

delay(1); //yearh

if(cursor==8)

{

P2=0x1F|a;

P0=L17;

delay(1);

}

else

{

P2=0x1F;

P0=L17;

delay(1);

}//week

if(cursor==6)

{

P2=0xF2|a;

P0=L3;

delay(1);

}

else

{

P2=0xF2;

P0=L3;

delay(1);

} //yearl

if(cursor==6) {

P2=0xF3|a;

P0=L4;delay(1);

}

else

{

P2=0xF3;

P0=L4;

delay(1);

} //yearl

if(cursor==5) {

P2=0xF4|a;

P0=L5;

delay(1);

}

else

{

P2=0xF4;

P0=L5;

delay(1);

} //month

if(cursor==5) {

P2=0xF5|a;

P0=L6;

delay(1);

}

else

{

P2=0xF5;

P0=L6;

delay(1);

} //month

if(cursor==4) {

P2=0xF6|a;

P0=L7;

delay(1);

}

else

{

P2=0xF6;

P0=L7;

delay(1);

} //day

if(cursor==4) {

P2=0xF7|a;

P0=L8;

delay(1);

}

else

{

P2=0xF7;

P0=L8;

delay(1);

} //day

P2=0xFF;

if(cursor==3) {

P2=0xF8|a;

P0=L9;

delay(1);

}

else

{

P2=0xF8;

P0=L9;

delay(1);

} //hour

if(cursor==3) {

P2=0xF9|a;

P0=L10;

delay(1);

else

{

P2=0xF9;

P0=L10;

delay(1);

} //hour

if(cursor==2) {

P2=0xFA|a;

P0=L11;

delay(1);

}

else

{

P2=0xFA;

P0=L11;

delay(1);

} //min

if(cursor==2) {

P2=0xFB|a;

P0=L12;

delay(1);

}

else

{

P2=0xFB;

P0=L12;

delay(1);

} //min

if(cursor==1) {

P2=0xFC|a;

P0=L13;

delay(1);

}

else

{

P2=0xFC;

P0=L13;

delay(1);

} //sec

if(cursor==1)

P2=0xFD|a;

P0=L14;

delay(1);

}

else

{

P2=0xFD;

P0=L14;

delay(1);

} //sec

P2=0xFE;

P0=L15;

delay(1); //temp

P2=0x0F;

P0=L16;

delay(1); //temp

P2=0xFF;

}

图5 日期显示6) 仿真实验

整个电路仿真图如下图6所示所示:

图6 仿真电路图

7) 实物的制作与调试

(1)原理图的绘制与PCB的制作

(2)原理图的绘制

(3)在Protel99se中先新建一个工程,把所需要的元件载入

到文档里面。

(4)按照所设计的电路画原理图

(5)通过电气检查是否有错,并修改完善。

原理图如图7所示:

显示部分

图7 原理图

8) PCB的绘制

将画好的原理图转为PCB图,设置好规则开始布线,由于边线比

较的复杂,采用手动布线的方式进行布线,PCB图如图8所示:

图8 PCB图

五、系统实现:

1、方案设计、方案比较

方案一:采用实时时钟芯片

实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。由于功能完美,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。

方案二:软件控制

利用单片机内部的定时/计数器进行中断定时,配合软件延时实

数字万年历的制作

数字万年历的制作 数字显示万年历,它采用一枚专用软封装的时钟芯片,驱动15只红色共阳极数码管,可同时显示公历年、月、日、时、分、星期,以及农历月、日,还有秒点显示和整点报时、定时闹钟功能,使用220V市电供电,预留有备用电池座,外形尺寸为长21cm×宽14.5cm×厚3cm,最厚处6cm,适合放置在办公桌面上使用,具有很好的实用性。成品外观如图1所示。 图1 图2 原理简介 电路原理图如图2所示,为了读图方便,连线稍作了简化。从图中可以看出,IC1是一枚专用时钟芯片,Y1是32768Hz的晶振,为芯片提供时基频率信号,经过芯片内部处理后,输出各显示位的驱动信号,经过PNP(8550)型三极管做功率放大后驱动各数码管显示。芯片采用了动态扫描的输出

方式,由于人眼存在视觉暂留现象,且扫描速度比较快,因此看上去所有数码管都是在显示的。这种方式可以有效减少芯片的输出引脚数量,简化了线路,降低了功耗。 在电源部分中,整流二极管VD1~VD4组成了桥式整流电路,将变压器输出的交流电转换为直流电,经C6滤波后,送至三端稳压块7805,输出5V直流稳压电源,为电路供电。VD3和VD8组成互相隔离的供电电路,目的是在市电停电时,后备纽扣电池通过VD3,自动为芯片IC1提供后备电源,保证芯片计时数据不中断。同时由于VD8、VD9的存在,后备电池将不再向数码管供电,以节约后备电池的耗电量。由于芯片自身耗电较低,因此靠纽扣电池也可以维持芯片在很长时间里,内部计时不中断。当市电恢复后,7805输出经过VD8、VD9分别向芯片和数码管供电,由于DV3的存在,且纽扣电池电压为3V,低于7805输出的5V,因此纽扣电池将自动停止供电,7805输出也不会对纽扣电池充电。 VT9是唯一一只NPN(8050)型三极管,用于驱动喇叭,做为整点报时和定闹发声。LED10、LED14是用于秒点显示的发光二极管,LED11和LED12分别是整点报时显示和定闹显示的发光二极管,均为红色。 图3是万年历的全套散件的照片。表1是元器件清单。 图3 表1 元器件清单 序号元件名称参数元件数量序号元件名称参数元件数量 1 电阻10Ω 1 21 三极管8050 1 2 电阻33Ω8 22 三端稳压块7805 1 3 电阻47Ω 3 23 晶振32768Hz 1 4 电阻75Ω7 24 IC1软封装芯片 1 5 电阻100Ω 1 25 0.5’数码管红11 6 电阻150Ω8 26 0.8’数码管红 4

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

设计报告 设计任务: 设计一个智能化万年历时钟电路,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);//延时以完成此次读时序,之后再读下一数据

万年历(时钟芯片和液晶显示)

#include #include #include"zhuanhuan.h" #define uchar unsigned char #define uint unsigned int sbit SCK=P3^5; sbit SDA=P3^4; sbit RST=P3^3;// DS1302复位 sbit set=P1^0;//定义按键端口 sbit s1=P1^1; sbit s2=P1^2; sbit s3=P1^3; void keyscan1();void keyscan(); /************液晶口定义*******/ sbit RS=P2^0;//RS为数据/指令选择1/0 sbit RW=P2^1;//读写 sbit E=P2^2;//E为使能信号 bit flag;//是否读取时间的标志位 uchar setn=0;//复位键、增加键、减少键按下次数 uchar code time0[]="Date: - - "; uchar code time1[]="Time: : : "; uchar l_tmpdate[]={00,00,00,7,1,7,12};//秒分时日月周年// 可随时更改uchar code write_add[7]={0x80,0x82,0x84,0x86, 0x88,0x8a,0x8c}; //秒分时日月周年写的寄存器地址 uchar code read_add[7]={0x81,0x83,0x85,0x87, 0x89,0x8b,0x8d}; //秒分时日月周年读的寄存器地址 extern uchar data dis_buf2[16]; void delay(uint z) { while(--z); } void write_com(uchar com)//液晶写命令函数 { RS=0;//写命令使能 RW=0;//写 delay(5000); /****在高脉冲下命令输入*****/ E=0; P0=com; delay(500); E=1; delay(500); E=0; }

电子万年历课程设计报告

课程:创新与综合课程设计 电子与电气工程系 实践教学环节说明书 题目名称电子万年历 院(系)电子与电气工程学院 专业电子信息工程 班级119411 学号1109635010 学生姓名11 指导教师q1 起止日期13周周一~14周周五

电子万年历 一.设计目的 设计一个具有报时功能、停电正常运行(来电无需校时)、带有年月日、时分秒及星期显示的电子日历。 二.方案设计 硬件控制电路主要用了AT89S52芯片处理器、LCD1602显示器等。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及星期显示程序等组成。主控程序中对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是电子万年历中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第二个月天数不为28天,而是29天。再用公式s=v-1 +〔(y-1/4〕-〔(y-1/100〕+〔(y-1/400〕+ d计算当前显示日期是星期几,当调节日期时,星期自动的调整过来。闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。在我们的这个设计中由于只涉及100年范围内,所以判断是否闰年就只需要用该年份除4来判断就行了。 三.系统的设计框图 本系统以AT89S52单片机为核心,结合时钟芯片DS1302,LCD1602,键盘等外围器件,实现电子万年历的一系列功能,并通过液晶屏和按键控制完成人机交互的功能。系统总体设计框图如图(1)所示

万年历数码管显示设计及键盘控制设计final

万年历数码管显示及其键盘控制设计 组长:康智勇 组员:王辉 王玉 王天龙 付晓蓉 2008年08月08日

目录 前言 (3) 一、总体方案设计(方案的对比) (4) 二.单元模块设计(设计细节) (5) (一)烧写板 (5) (二) 单片机最小系统板 (7) (三) 4-16译码器驱动数码管控制板 (12) (四) 数码管显示板 (13) (五) 键盘控制板 (14) (六) DS12C887功能板 (14) 三、系统功能说明(结果说明) (20) 四、设计总结(心得体会) (20) 五、改进方案: (21) 附录: (22) 【参考文献】: (22) 【电路原理图】: (23) 【程序清单】: (28) 【流程图】: (47) 【键盘使用说明】 (49)

前言 目前,计算机技术的发展分为两大分支:通用计算机系统与嵌入式计算机系统。嵌入式计算机系统是面向测控对象嵌入到应用系统中的计算机系统的统称,而单片机则是一种经典的嵌入式系统。 从广义上讲,将微型计算机的主要功能部件集中在一块单芯片上的微型计算机称为单片机,这一类计算机又称为微控制器MCU(Micro Control Unit)。由于单片机集成度高、体积小、功能强、速度快、功耗低、抗干扰能力强等优点,它在智能仪器、工业测控、日常生活及家电中等得到了广泛的应用。万年历的数码管显示及键盘控制就是单片机的开发过程中的一个经典的应用。 在国内市场中存在着很多种不同厂家生产的不同类型的单片机,在本次设计中我们选用Atmel公司MCS-51系列兼容单片机中的AT89S51单片机。AT89S51单片机是一个低功耗高性能CMOS 8位单片机,40个引脚,片内含4KB Flash ROM和128B ROM,32个外部双向输入输出(I/O)接口,同时内含两个外中断口,两个16为可编程定时计数器,两个全双工串行通信口,它的最大的一个特点就是支持在线更新程序(In System Programmable,ISP)功能。 本设计中除了选用了单片机进行显示和键盘控制外,还需要一个主要的芯片就是美国DALLAS公司的新型时钟日历芯片DS12C887。DS12C887是一个能够自动产生世纪、年、月、日、时、分、秒等时间信息,而且DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久,因此各种设备、家电、仪器、工业控制系统中,可以很容易地用DS12C887来组成时间获取单元,以实现各种时间的获取。本次设计中正是利用它的这一性能来获取准确的时间信息。 本次设计中需要硬件和软件两方面的结合。在硬件方面,需要准备烧写板、单片机最小系统板、4-16译码器驱动数码管控制板、数码管显示板、键盘控制板、DS12C887功能板等硬件;在软件选择了Protel Technology公司开发的具有PDM 功能的强大的EDA综合设计环境Protel 99SE来进行原理图设计、PCB(印刷电路板)设计,选择了Keil Software公司推出的Keil C51的集编译器、汇编器、实时操作、项目管理器、调试器于一体的集成开发环境uVision3。 本次设计的成功离不开本组组员在实习期间的不懈努力,在必要情况下的加班加点。在整个设计过程中,本组组员本着认真负责的精神,本着“没有最好,只有更好”的原则,采取“团结一致、分工合作”的措施,终于成功的设计出了万年历的数码管显示及键盘控制。 当然,本次设计中我们也遇到了很多的问题,本次设计的成功离不开本组组员的共同努力,更离不开老师和师兄及其他组员等的帮忙,在此本组组员衷心的感谢周庆国老师、赵庆林老师、王绍伟老师、刘钰力师兄、姚琪师兄等,谢谢你们不厌其烦地给予我们帮助。 时间过得很快,实习将近尾声,但是本次实习中的收获、经历及组员间建立起来的友谊将在本组组员的脑海中留下抹不去的青春的痕迹。

带温度计的万年历

设计课题题目: 带温度计的万年历 一、设计任务与要求 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所示。

基于stc51单片机的LCD1602显示时间_的电子万年历(显示当前温度)

1 课设所需软件简介 1.1 Keil uVision4的简要介绍 2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。 2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。 Keil C51开发系统基本知识Keil C51开发系统基本知识 1. 系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 2. Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

液晶显示万年历设计

湄洲湾职业技术学院 液晶显示万年历设计 系别:自动化工程系 年级:10 级专业:电气自动化 姓名:陈承隆学号:1001020212 导师姓名:许振龙职称:讲师 2013年 5 月27日

目录 1.前言 (1) 2.系统设计参数要求 (2) 3.系统设计 (3) 3.1系统设计总体框图 (3) 3.2 各模块原理说明 (4) 3.2.1 AT89C52单片机最小系统模块 (4) 3.2.2 液晶显示模块 (5) 3.2.3 机给蜂鸣器模块 (5) 3.2.4 独立键盘模块 (5) 3.3 系统总原理图说明 (6) 3.4系统印刷电路板的制作图 (6) 3.5系统的操作说明 (6) 3.6 系统操作注意事项 (6) 参考文献 (7) 致谢词 (8) 附录 (9) 附录1:电路总原理图 (10) 附录2:印刷电路板 (11) 附录3:原件清单 (12)

1.前言 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。目前,单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来了诸多方便。随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。 单片机单芯片的微小体积和低的成本,可广泛地嵌入到如玩具、家用电器、机器人、仪器仪表、汽车电子系统、工业控制单元、办公自动化设备、金融电子系统、舰船、个人信息终端及通讯产品中,成为现代电子系统中最重要的智能化工具,于是基于单片机的醒目而时尚的电子版万年历顺应而生。基于单片机的电子万年历结合了时钟和日历的功能,将其二者融为一体,在显示时间的同时还能显示日期和年、月,它主要是通过单片机来读取时钟芯片的时间、日期,然后送给显示设备显示出来。而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。

北极星数码万年历使用说明书

北极星数码万年历 北极星数码万年历使用说明书 操作说明 1、按键说明:设置键、上调键、下调键、流水开关键。 2、时间调整在正常走时状态下,按“设置”键进入时间设置状态,同时年份“闪烁”,可按“上调”或“下调”键修改年份,修改好后按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键修改月份;用同样的方法可对日、时、分进行设置;12个公历节日及倒计天数、24个农历节气及倒计天数、12生肖、12星座、星期、农历月、日将自动跟随公历的变化。当分设定好后,再按“设置”键退出时间设置,回到正常时间状态。 3、节气灯花样转换在正常走时状态下,按住“设置”键3秒钟即可进入节气灯花样转换。 4、12/24小时制切换在正常走时状态下,按住“上调”键3秒钟,则可进行12小时制与24小时制的切换。上电复位时,可默认为24小时制或12小时制,由选项决定。 5、开/关整点报时在正常走时状态下,按住“下调”键3秒钟听到“嘀”一声,则可以打开或关闭整点报时功能。 6、天数倒计时或顺计时(由选项决定)在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示“――――”,表示计时“无效”;若显示具体数字表示有效,按“上调”键可以切换“有效”/“无效”,按“设置”键进入天数设定,且左边第一位(千位)闪烁,按“上调”或“下调”键修改内容,按“设置”键移动闪烁位置到第二位(百位),按“上调”或“下调”键修改闪烁位的内容,同样方法可设置十位与个位 7、闹钟 8组定闹(由按键选项决定),默认值无效,默认时间为――:――点,闹钟设定:在正常时间状态下(或天数计时状态),按“下调”键进入“定闹查询状态”,定闹指示灯点亮,在温度位显示“A1”,表示当前你看到的是“第1组定闹”的信息,在小时、分钟位显示“――∶――”,表示定闹“无效”;显示“XX∶XX”的具体时间,表示定闹“有效”,按“上调”键可以切换“有效”/“无效”,按“设置”键进入定闹时间设定,且小时位闪烁,按“上调”或“下调”键修改闪烁位的内容,按“设置”键移动闪烁位置到分钟位,按“上调”或“下调”键修改闪烁位的内容,再按“设置”键确认并退出定闹时间设定,再按“下调”键进入下一组闹铃状态,其设置与“第1组定闹”相同,依次类推即可设置所有定闹。 8、生日提醒①7组生日提醒,默认值无效。②生日提醒设定:在最后一组定闹状态,再按一次“下调”键则进入第一组生日提醒,生日提醒指示灯点亮,在温度位显示“b1”,在公历“月日位”显示有效“生日日期”或无效日期“――――”,则表示生日以“公历日期”为准,若在农历“月日位”显示则表示生日以农历日期为准;按“上调”键可“打开/关闭”该组生日提醒,按“设置”键进入“该组生日提醒日期”设置,按“上调”或“下调”键修改其内容,按“设置”键移动闪烁位置,再按“设置”键确认该组生日提醒设置,再按“下调”键进入下一组生日提醒,依次类推即可设置所有生日提醒,当在最后一组生日提醒时,按“下调”键则退到正常时间状态若闹铃中没有一组设置有效,则定闹指示灯熄灭,在任何闹铃时间到正在响闹 北极星数码万年历使用说明书第1页共2页

基于51单片机电子万年历设计

基于51单片机电子万年历设计 专业:机电设备维修与管理姓名:杜洪浦指导老师: 摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序,显示程序等。程序采用汇编语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 关键词时钟电钟,DS1302,液晶LCD1602,单片机 目录 1设计要求与方案论证 (2) 1.1 设计要求 (2) 1.2 系统基本方案选择和论证 (2) 1.2.1单片机芯片的选择方案和论证 (2) 1.2.2 显示模块选择方案和论证 (3) 1.2.3时钟芯片的选择方案和论证: (3) 1.3 电路设计最终方案决定 (3) 2系统的硬件设计与实现 (3) 2.1 电路设计框图 (4) 2.2 系统硬件概述 (4) 2.3 主要单元电路的设计 (4) 2.3.1单片机主控制模块的设计 (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;

电子万年历

河北科技师范学院课程设计说明书 题目: 学院(系): 年级专业: 学号: 学生姓名: 指导教师:

摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。 我选用的是单片机8052来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。 该电子万年历使用12MHZ晶振与单片机8052相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机8052,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, 单片机8052的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。 因此,采用单片机8052原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。

基于液晶显示的万年历-毕设论文

毕业设计(论文)报告题目基于液晶显示的万年历 系别 专业 班级 学生姓名 学号

指导教师 2013年4 月

基于液晶显示的万年历 摘要: 本设计应用AT89S52芯片作为核心,采用C语言进行编程,实现以下功能:小时、分、秒、年、月、日、星期的显示和实时温度检测。该设计的电子时钟系统由时钟电路、LCD显示电路、按键调整电路和温度检测电路四部分组成。使用时钟芯片DS1302完成时钟日期的功能,以LCD1602为显示器,同时利用温度传感器DS18B20测量周围环境温度,并且可以依靠按键随时对日期时间进行调整。我们共设计四个按键,一个模式键,也就是我们用来选定被修改的数字的,两个调整键,一个“加”键和一个“减”键,当按下模式键,选定要调整的数字的时候,“加”、“减”可以帮我们调到所需的状态,还有一个复位键,显示精度为1秒。设计还提供三位实时温度检测并显示,其显示精度为0.1℃。 关键词: AT89S52、时钟日历芯片DS1302、温度传感器DS18B20、LCD1602

目录 前言 (1) 第一章方案选择与万年历研究情况 (2) 1.1 方案选择 (2) 1.1.1时钟芯片选择 (2) 1.1.2键盘选择 (3) 1.1.3显示模块选择 (3) 1.2电子万年历的研究情况 (4) 第二章主要硬件描述 (5) 2.1 AT89S52 (5) 2.1.1主要性能 (5) 2.1.2引脚说明 (5) 2.2 LCM1602 (8) 2.2.1工作原理 (8) 2.2.2端口引脚第二功能 (9) 2.2.3管脚功能 (10) 2.3 芯片DS1302 (11) 2.3.1工作原理 (11) 2.3.2引脚功能及结构 (12) 2.4 数字温度传感器DS18B20 (12) 2.4.1DS18B20工作原理 (12) 2.4.2DS18B20 引脚定义 (13) 第三章硬件设计与实现 (14) 3.1 单片机最小系统的设计 (14) 3.2 时钟电路的设计 (15) 3.3 温度采集模块的设计 (15) 3.4 LCDM1602显示模块设计 (16) 第四章系统软件设计与实现 (17)

数码管模块化显示电子万年历

数码管显示模块化显示电子万年历 数码管共阳极7407驱动共阴极max7221/7419驱动 Ds1302 实时时间显示 Ds18b20 温度显示芯片 /*delay.h*/ #ifndef _DELAY_H #define _DELAY_H_ #define uint unsigned int #define uchar unsigned char void delay(uint xms); //秒级延时 void delayms(uint xms); //毫秒级延时,不可以更改,若更改,DS18B20将显示异常#endif /*delay.c*/ #include "delay.h" void delay(uint xms) { uint i; uchar j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void delayms(uint xms) //毫秒级别延时 {

while(xms--); } /*ds1302.h*/ #ifndef _DS1302_H_ #define _DS1302_H_ #include #define uint unsigned int #define uchar unsigned char sbit IO=P1^0; //ds1302跟单片机接口 sbit SCLK=P1^1; sbit RST=P1^2; extern unsigned char datetime[7]; //存储获得的时间值extern void gettime(); //读取时间值函数 #endif /*ds1302.c*/ #include #include "ds1302.h" uchar datetime[7]={0,0,0,0,0,0,0}; //用来接收获得的时间值void write_a_byte_to_ds1302(uchar X) { uchar i; for(i=0;i<8;i++) { IO=X&0X01; SCLK=1; SCLK=0; X>>=1; } } uchar get_a_byte_from_ds1302() { uchar i,b=0x00; for(i=0;i<8;i++) { b|=_crol_((uchar )IO,i); SCLK=1; SCLK=0; } //return b/16*10+b%16; //返回的BCD码转换为十进制return (b>>4)*10+(b&0x0f); //注意运算的优先级 } uchar read_data(uchar add)

lcd数显温度万年历电波钟

外观尺寸:29cm(宽)*18.5cm(高) 可挂可摆,背面有挂孔,可挂在墙上,也可以安装随机配送的支架摆放在台面上。 电子说明书地址:https://www.360docs.net/doc/bc1946740.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’键确认。 在正常的时钟显示模式,短按‘-’键可以开启和关闭闹铃功能,当闹铃响时,按任意键都可以关闭闹铃。 五、特殊日期提醒设置:

基于单片机的液晶显示“万年历”

宁波大红鹰学院 《单片机原理及应用》课程设计报告 课题名称:单片机液晶显示“万年历” 分院:机械与电气工程学院 教研室:电气工程及其自动化 班级: 09电自3 姓名:徐卡达 学号:0 指导教师:杨会保 二○一二年五月

单片机液晶显示“万年历” 一、设计任务 利用STC89C52RC单片机设计一个具有如下功能的电子万年历: (一)、能够显示年、月、日、时、分、秒、星期 (二)、能正确显示闰年日期 (三)、用独立键盘进行校时 二、硬件设计 1、系统框图 按照系统设计的要求和功能,将系统分为主控模块、时钟电路模块、按键扫描模块、LCD显示模块、蜂鸣器电路、电源电路、复位电路、晶振电路几个模块,系统框图如图1所示。主控模块采用STC89C52RC单片机,按键模块用5个按键,用于调整时间和设定闹钟,显示模块采用LCD1602,时钟电路模块采用DS1302实时时钟实现对时间,日期的操作。 图1 基于AT89C52RC单片机的电子万年历系统框图 2、原理图 基于STC89C52RC单片机的电子万年历硬件仿真电路图如图10所示,系统由STC89C52RC单片机、按键扫描电路、显示电路、时钟电路、晶振电路、复位电路、蜂鸣器电路组成。

图2 电子万年历仿真图 3、各部分介绍 (1)、主控模块 控制芯片使用STC89C52,控制系统如下图: 图3 STC89C52RC主控模块 主控制芯片采用STC89C52,系统包括晶振电路、复位电路、下载接口。

(2)、时钟芯片 时钟芯片使用DS1302,该模块电路原理图如下图: 图4 DS1302时钟电路 时钟电路采用的是ds1302芯片,DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为~。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。工作电压与单片机的输入电压比较适合。上面是它的一些基本的应用介绍。下面是它的引脚的描述: 图5 DS1302引脚 下面是DS1302的时钟寄存器。我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。 图6 DS1302的时钟寄存器 DS1302和单片机的连接很简单。只需一根复位线,一根时钟线,一根数据

电子万年历(数码管显示)

程序 #include #include #define uchar unsigned char #define uint unsigned int #define jump_ROM 0xCC #define start 0x44 #define readdata 0xBE sbit dq=P1^7; sbit w1=P0^6; sbit w2=P0^5; sbit w3=P0^4; sbit w4=P0^7; sbit wela=P0^3; sbit A=P0^0; sbit b=P0^1; sbit C=P0^2; sbit SCLK=P1^0; //DS1302通讯线定义sbit DIO=P1^1; sbit RST=P1^2; sbit k1=P1^6; sbit k2=P1^5; sbit add=P1^4;

sbit sub=P1^3; uchar code smgw[]={0,1,2,3,4,5,6,7}; uchar code smgd[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //uchar code tab[]={0x077,0x12,0x0c7,0x0d3,0x0b2,0x0f1,0x0f4,0x13,0x0f7,0x0b3,0x00}; uchar temperature[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code xingqi[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f}; uchar tab1[9]; uchar tab2[9]; uchar nian,yue,ri,zhou,shi,fen,miao,a,shan,tt,shan; uchar knum; uchar q,j,tempp; void display(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=55;y>0;y--); } void delay1(int useconds) {int s; for(s=0;s

基于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对所选中

相关文档
最新文档