LCD显示电子万年历

合集下载

基于单片机控制的LCD显示万年历制作

基于单片机控制的LCD显示万年历制作

据传 送到 总线 的器 件作 为发 送器 。任 何从 总 线接 收数 据 的器 件 为接 收器 。数据 传送 是 由产生 串行 时钟和
[ 收稿 日期]2 0 1 3一O 5 —1 2 [ 作者简介]苏畅 ( 1 9 7 7一 ) ,女 ,硕士 ,讲师 ,现主要从事计算机硬件方面的教学与研究工作。
2 系统硬 件 设计
在控 制 系统硬 件 电路设 计 中还要 注 意环境 因素对 系 统 的干扰情 况 ,系统抗 干扰 的措施 主要 有 以下几 种 :① 电源干 扰 的抑 制 。直流 电源滤 波效 果不 好将 引起 电源波 动 ,直接 造成对 单 片机不稳 定 的影 响 ,应 该 选用各 种参 数较 好 的电源 以及隔 离性 能较好 的设 备来 屏蔽 电缆 、高压 泄放元 件等 ,防止干 扰信号 的传 送 。② 变压器 干扰 的抑制 。可 以使 用一 些隔离 物来 对变 压器产 生 的干扰 进行屏 蔽 ,例如 使用 滤波器 ,就
机 兼 容 ,具 有抗 干 扰 能 力 强 、操 作 简 单 等 优 点 ;万 年 历 数 据 由最 常 用 的 D S 1 3 0 2提 供 , 它 是 一 种 高 性 能 、
低 功 耗 、 带有 片 内 RA M 的 实 时 万 年 历 电 路 , 可 分 别 对 年 、月 、 日、周 、时 、 分 、秒 进 行 计 时 ,还 具 有

7 8・
理 工 上 旬 刊 *计 算 机 科 学 与 电 子 信 息 工 程
2 0 1 3年 8月
所有起 始停 止信号 的 主器件控 制 的 。主器件 和从器 件都 可 以作 为 发送器 或 接 收器 ,但 由主器件 控制传 送
数据 ( 发送或接 收) 的模 式 ,由 于 A0 、A1和 A 2可 以组 成 0 0 0 1 1 1 八 种 情况 ,即通过 器 件地 址输 人 端 A 0 、A1 和 A 2可 以实 现将 最多 8个 A T2 4 C 0 2 器件连 接到总线上 ,通过进行不 同的配 置进行选择器件 。

万年历与LCD时间显示

万年历与LCD时间显示

> ds1302+LCD1602.rar > 万年历.C/******************************************************************** * 标题: xl 系列单片机实验仪1602 液晶万年历演示程序** 文件: XLLCDWNL.c ** 日期: 2006-1-5 ** 版本: 3.0 (试验通过版)可用xl600-xl1000 单片机综合试验仪试验** 作者: 部分程序参考网上修改而成,本站最终改编测试,特别对原作致敬!* * 邮箱: sxj1974@ ** 网站: ********************************************************************** *日历时钟**按K1,进入设置状态**按k2, 停止闹钟声音**按k3, 依次进入闹钟功能是否启用,闹钟时,分秒,年,月,日及时间时,分,秒的设置,**直到退出设置状态**按k4, 调整是否起用闹钟和调节闹钟时,分,秒,年,月,日,时间的时,分,秒的数字**LCD 第二排中间显示小喇叭,表示启用闹钟功能,无则禁止闹钟功能* 8888*(可在调整状态进行设置)**正常状态,LCD 上排最前面显示自定义字符,LCD 下排最前面闪动"XUELIN" * *设置状态,LCD 上排最前面显示"P", 下排最前面在设置闹钟时间时显示"alarm:", **其它状态显示"time" **年代变化2000--2099, 星期自动转换**程序中有自定义字符写入********************************************************************** * 【版权】Copyright(C) 深圳市学林电子有限公司 ** 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! ** 【技术支持】请访问/bbs/index.asp 官方论坛********************************************************************** #include <reg51.h>#include <intrins.h>unsigned char code dis_week[]={"SUN,MON,TUE,WED,THU,FRI,SAT"}; unsigned char code para_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5}; // 星期月参变数unsigned char data dis_buf1[16]; //lcd 上排显示缓冲区unsigned char data dis_buf2[16]; //lcd 下排显示缓冲区unsigned char data year,month,date,week;// 年、月、日、星期unsigned char data armhour,armmin,armsec;// 闹钟时、分、秒unsigned char data hour,min,sec,sec100;// 时、分、秒、百分之一秒unsigned char data flag,vkey,skey;// 设置状态计数标志、按键先前值、按键当前值bit alarm; //标识是否启用闹钟,1--启用,0--关闭sbit rs = P2^0; //LCD 数据/命令选择端(H/L)sbit rw = P2^1; //LCD 读/写选择端(H/L)sbit ep = P2^2; //LCD 使能控制sbit PRE = P1^0; //调整键(k3)sbit SET = P1^1; //调整键(k4)sbit SPK = P2^3;void delayms(unsigned char ms); // 延时程序bit lcd_busy(); //测试LCD 忙碌状态程序void lcd_wcmd(char cmd); //写入指令到LCD 程序void lcd_wdat(char dat); //写入数据到LCD 程序void lcd_pos(char pos); //LCD 数据指针位置程序void lcd_init(); //LCD 初始化设定程序void pro_timedate(); //时间日期处理程序void pro_display(); //显示处理程序void pro_key(); //按键处理程序void time_alarm(); //定时报警功能(闹钟)unsigned char scan_key(); //按键扫描程序unsigned char week_proc(); //星期自动计算与显示函数bit leap_year(); //判断是否为闰年void lcd_sef_chr(); //LCD 自定义字符程序void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s); //更新显示缓冲区函数// 延时程序void delay(unsigned char ms){ while(ms--){ unsigned char i;for(i = 0; i< 250; i++){_nop_(); //执行一条_nop_() 指令为一个机器周期_nop_();_nop_();_nop_();}}}//测试LCD 忙碌状态bit lcd_busy(){bit result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result =(bit)(P0&amt;0x80); //LCD 的D0--D7 中,D7=1 为忙碌,D7=0 为空闲ep = 0;return result;}//写入指令到LCDvoid lcd_wcmd(char cmd)while(lcd_busy()); //当lcd_busy 为1 时,再次检测LCD 忙碌状态,lcd-busy 为0 时,开始写指令rs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;}//写入数据到LCDvoid lcd_wdat(char dat){while(lcd_busy()); //当lcd_busy 为1 时,再次检测LCD 忙碌状态,lcd-busy 为0 时,开始写数据rs = 1;rw = 0;ep = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;}//LCD 数据指针位置程序void lcd_pos(char pos){lcd_wcmd(pos|0x80); // 数据指针=80+ 地址码(00H~27H,40H~67H)}//设定二个自定义字符,(注意:LCD1602 中自定义字符的地址为0x00--0x07, 即可定义8 个字符)//这里我们设定把一个自定义字符放在0x00 位置(000),另一个放在0x01 位子(001)void lcd_sef_chr(){ //第一个自定义字符lcd_wcmd(0x40);lcd_wdat(0x1f);lcd_wcmd(0x41); //"01 000 001" 第2 行地址lcd_wdat(0x11); //"XXX 10001" 第2 行数据lcd_wcmd(0x42); //"01 000 010" 第3 行地址lcd_wdat(0x15); //"XXX 10101" 第3 行数据lcd_wcmd(0x43); //"01 000 011" 第4 行地址lcd_wdat(0x11); //"XXX 10001" 第4 行数据lcd_wcmd(0x44); //"01 000 100" 第5 行地址lcd_wdat(0x1f); //"XXX 11111" 第5 行数据lcd_wcmd(0x45); //"01 000 101" 第6 行地址lcd_wdat(0x0a); //"XXX 01010" 第6 行数据lcd_wcmd(0x46); //"01 000 110" 第7 行地址lcd_wdat(0x1f); //"XXX 11111" 第7 行数据lcd_wcmd(0x47); //"01 000 111" 第8 行地址lcd_wdat(0x00); //"XXX 00000" 第8 行数据//第二个自定义字符lcd_wcmd(0x48); //"01 001 000" 第1 行地址lcd_wdat(0x01); //"XXX 00001" 第1 行数据lcd_wcmd(0x49); //"01 001 001" 第2 行地址lcd_wdat(0x1b); //"XXX 11011" 第2 行数据lcd_wcmd(0x4a); //"01 001 010" 第3 行地址lcd_wdat(0x1d); //"XXX 11101" 第3 行数据lcd_wcmd(0x4b); //"01 001 011" 第4 行地址lcd_wdat(0x19); //"XXX 11001" 第4 行数据lcd_wcmd(0x4c); //"01 001 100" 第5 行地址lcd_wdat(0x1d); //"XXX 11101" 第5 行数据lcd_wcmd(0x4d); //"01 001 101" 第6 行地址lcd_wdat(0x1b); //"XXX 11011" 第6 行数据lcd_wcmd(0x4e); //"01 001 110" 第7 行地址lcd_wdat(0x01); //"XXX 00001" 第7 行数据lcd_wcmd(0x4f);//"01 001 111" 第8 行地址lcd_wdat(0x00); //"XXX 00000" 第8 行数据}//LCD 初始化设定void lcd_init(){lcd_wcmd(0x38); //设置LCD 为16X2 显示,5X7 点阵,八位数据借口delay(1);lcd_wcmd(0x0c); //LCD 开显示及光标设置(光标不闪烁,不显示"-")delay(1);lcd_wcmd(0x06); //LCD 显示光标移动设置(光标地址指针加1,整屏显示不移动) delay(1);lcd_wcmd(0x01); //清除LCD 的显示内容delay(1);}//闰年的计算bit leap_year(){bit leap;if((year>4==0&amt;&amt;year>100!=0)||year>400==0)// 闰年的条件leap=1;elseleap=0;return leap;}//星期的自动运算和处理unsigned char week_proc(){ unsigned char num_leap;unsigned char c;num_leap=year/4-year/100+year/400;// 自00 年起到year 所经历的闰年数if( leap_year()&amt;&amt; month<=2 ) //既是闰年且是1 月和2 月c=5;elsec=6;week=(year+para_month[month]+date+num_leap+c)>7;// 计算对应的星期return week;}//更新显示缓冲区void update_disbuf(unsigned char t1,unsigned char t2[],unsigned char dis_h,unsigned char dis_m,unsigned char dis_s){ dis_buf1[0]=t1; //dis_buf1[1]=0x20; //空格dis_buf1[2]=50; //'2'dis_buf1[3]=48; //'0'dis_buf1[4]=year/10+48;dis_buf1[5]=year>10+48;dis_buf1[6]=0x2d;dis_buf1[7]=month/10+48;dis_buf1[8]=month>10+48;dis_buf1[9]=0x2d; //'-'dis_buf1[10]=date/10+48;dis_buf1[11]=date>10+48;dis_buf1[12]=0x20;dis_buf1[13]=dis_week[4*week];dis_buf1[14]=dis_week[4*week+1];dis_buf1[15]=dis_week[4*week+2];dis_buf2[0]=t2[0];dis_buf2[1]=t2[1];dis_buf2[2]=t2[2];dis_buf2[3]=t2[3];dis_buf2[4]=t2[4];dis_buf2[5]=t2[5];dis_buf2[6]=0x20; //空格if (alarm)dis_buf2[7]=0x01; //alarm=1,显示闹钟启用标致(第二个自定义字符)elsedis_buf2[7]=0x20; //alarm=0,不显示闹钟启用标致dis_buf2[8]=dis_h/10+48;dis_buf2[9]=dis_h>10+48;dis_buf2[10]=0x3a; //':'dis_buf2[11]=dis_m/10+48;dis_buf2[12]=dis_m>10+48;dis_buf2[13]=0x3a;dis_buf2[14]=dis_s/10+48;dis_buf2[15]=dis_s>10+48;}//时间和日期处理程序void pro_timedate(){sec++;if(sec > 59){sec = 0;min++;if(min>59){min=0;hour++;if(hour>23){hour=0;date++;if(month==1||month==3||month==5||month==7||month==8||month==10||month== 12)if (date>31) {date=1;month++;} //大月31 天if (month==4||month==6||month==9||month==11)if (date>30) {date=1;month++;} //小月30 天if (month==2){if( leap_year()) //闰年的条件{if (date>29) {date=1;month++;}} //闰年2 月为29 天else{if (date>28) {date=1;month++;}} //平年2 月为28 天}if (month>12) {month=1;year++;}if (year>99) year=0;}}}week_proc();if (sec==armsec &amt;&amt; min==armmin &amt;&amt; hour==armhour) {if (alarm)TR1=1; //闹钟启用时,报警时间到,启动Timer1}}//显示处理程序void pro_display(){ unsigned char i;lcd_pos(0x00);for (i=0;i<=15;i++){lcd_wdat(dis_buf1[i]);}lcd_pos(0x40);for (i=0;i<=15;i++){lcd_wdat(dis_buf2[i]);}}//Timer0 中断处理程序,秒的产生void timer0() interrupt 1{TH0=0xdc; //Timer0 置10ms 定时初值dc00H(2^16=65536D,dc00H=56320D)TL0=0x00; //定时时间=(65536-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz) sec100++;if(sec100 >= 100) //1 秒时间(100*10ms=1000ms=1s){sec100 = 0;pro_timedate();// 调用时间和日期处理程序}if (sec&amt;0x01) //"XUELIN" 闪一秒,停一秒update_disbuf(0x00," ",hour,min,sec); //0x00 表示显示00 位置的自定义字符elseupdate_disbuf(0x00,"XUELIN",hour,min,sec);pro_display(); //调用显示处理函数}//按键扫描程序unsigned char scan_key(){skey=0x00; //给变量vkey 置初值skey|=PRE; //读取PRE 键的状态skey=skey<<1; //将PRE 键的状态存于skey 的B1 位skey|=SET; //读取SET 键的状态,并存于skey 的B0 位return skey; //返回skey 的键值(即PRE,SET 的状态)}//外部中断INT0 中断处理程序void int0() interrupt 0{TR0=0; //禁止Timer0IE=0; //禁止中断lcd_wcmd(0x0e); //显示光标"_", 整个光标不闪烁alarm=1;update_disbuf(0x50,"alarm:",armhour,armmin,armsec); // 更新显示数据,0x50 表示要显示"P"pro_display(); //调用显示处理程序lcd_pos(0x47); //使光标位于第一个调整项下flag=0;vkey=0x03;while(flag^0x0a){skey = scan_key(); //扫描按键状态if (skey^vkey) //若skey 与vkey 相同,跳出循环,相异执行循环体{ delay(10); //去按键抖动skey = scan_key(); //转回扫描按键状态if (skey^vkey) //若skey 与vkey 相同,跳出循环,相异执行循环体{ vkey=skey; //将skey 的值付给vkeyif (skey==0x01) //PRE 键按下{ flag++; //调整标志位加1switch (flag) //将光标置于相应调整位置{case 1: lcd_pos(0x49);break; //光标置小时报警设置位置case 2: lcd_pos(0x4c);break; // 光标置分钟报警设置位置case 3: lcd_pos(0x4f);break; // 光标置秒时报警设置位置case 4: update_disbuf(0x50,"time: ",hour,min,sec);pro_display();lcd_pos(0x05);break; // 光标置年调整位置case 5: lcd_pos(0x08);break; // 光标置月调整位置case 6: lcd_pos(0x0b);break; // 光标置日调整位置case 7: lcd_pos(0x49);break; //光标置时调整位置case 8: lcd_pos(0x4c);break; // 光标置分调整位置case 9: lcd_pos(0x4f);break; // 光标置秒调整位置default:break;}}if (skey==0x02) //SET 键按下{ pro_key(); //转设置按键处理程序}}} }lcd_wcmd(0x0c); //设置LCD 开显示及光标不闪烁,不显示"-"lcd_wcmd(0x01);IE=0x8f;TR0=1;//清除LCD 的显示内容//CPU 开中断,INT0,INT1, 开中断//Timer0 启动}//主程序,初始化及初值设定void main(){lcd_init(); //初始化LCDlcd_sef_chr(); //写入自定义字符号hour=0;min=0;sec=0; //开机时的时,分,秒显示armhour=0;armmin=0;armsec=0; //开机时的时,分,秒报警初值year= 5; month=1;date=1; //开机时的年,月,日,星期显示week_proc();alarm=1; //初始开机,启用闹钟IE = 0x8f; //CPU 开中断,INT0,INT1,Timer0,Timer1 开中断IP = 0x04; //设置INT0 为中断最高优先级IT0=0;IT1=0; //外部INT0,INT1 设置为电平触发方式(注意,触发不要选边沿方式,)TMOD = 0x11; //Timer0,Timer1 工作于模式1, 16 位定时方式TH0 = 0xdc;TL0 = 0x00; //Timer0 置10ms 定时初值TH1 = 0xff;TL1 = 0x00; //Timer1 置初值TR0 = 1; //Timer0 启动TR1 = 0;while(1);}//设置按键处理程序void pro_key(){switch (flag){case 0:alarm=!alarm; //启用或关闭闹钟(alarm=1: 启用,alarm=0: 关闭)update_disbuf(0x50,"alarm:",armhour,armmin,armsec); // 更新显示数据pro_display(); //调用显示处理lcd_pos(0x47);break; //光标回到原调整位置case 1:armhour++;if (armhour>23) armhour=0;update_disbuf(0x50,"alarm:",armhour,armmin,armsec); // 更新显示数据pro_display(); //调用显示处理lcd_pos(0x49);break; //光标回到原调整位置if (armmin>59) armmin=0;update_disbuf(0x50,"alarm:",armhour,armmin,armsec);pro_display();lcd_pos(0x4c);break;case 3:armsec++;if (armsec>59) armsec=0;update_disbuf(0x50,"alarm:",armhour,armmin,armsec);pro_display();lcd_pos(0x4f);break;case 4:year++;if (year> 99) year= 0;week_proc(); //星期自动运算update_disbuf(0x50,"time: ",hour,min,sec);pro_display();lcd_pos(0x05);break;case 5:month++;if (month>12) month=1;week_proc(); //星期自动运算update_disbuf(0x50,"time: ",hour,min,sec);pro_display();lcd_pos(0x08);break;case 6:date++;if(month==1||month==3||month==5||month==7||month==8||month==10||month== 12)if (date>31) date=1; //大月31 天if (month==4||month==6||month==9||month==11)if (date>30) date=1; //小月30 天if (month==2){if(leap_year()) //闰年的条件{if (date>29) date=1;} //闰年2 月为29 天else{if (date>28) date=1;}} //平年2 月为28 天week_proc(); //星期自动运算update_disbuf(0x50,"time: ",hour,min,sec);pro_display();lcd_pos(0x0b);break;if (hour>23) hour=0;update_disbuf(0x50,"time: ",hour,min,sec); pro_display();lcd_pos(0x49);break;case 8:min++;if (min>59) min=0;update_disbuf(0x50,"time: ",hour,min,sec); pro_display();lcd_pos(0x4c);break;case 9:sec++;if (sec>59) sec=0;update_disbuf(0x50,"time: ",hour,min,sec); pro_display();lcd_pos(0x4f);break;default: break ;}}//Timer1 中断处理程序,产生报警的声音void timer1() interrupt 3{TH1=0xff;TL1=0x00;SPK=~SPK;}//外部中断INT1 中断处理程序,停止报警声音void int1() interrupt 2{if(TR1)TR1=0;}。

基于stc51单片机的LCD1602显示时间的电子万年历(显示

基于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中。

使用独立的Keil仿真器时,注意事项:* 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

lcd万年历显示及数字温度计

lcd万年历显示及数字温度计

绵阳职业技术信息工程系课程实训报告课程名称:《单片机应用技术》实训题目:lcd万年历显示及数字温度计起止时间: 2010-12-5---2010-12-15 专业班级:学生姓名:小组成员:学号:指导教师:绵阳职业技术学院信息工程系2010年12月15日摘要电子万年历是实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人家庭,车站,码头,办公室,银行大厅等场所,成为人们日常生活中的必需品。

数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。

钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的万年历精度高,功能易于扩展。

可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等电路。

所有这些,都是以钟表数字化为基础的。

因此,研究数字时钟及扩大其应用有着非常现实的意义。

本设计就是数字时钟简单的扩展应用并且在现实万年历的同时采用8 个数字温度传感器DS18B20 采集温度信息,通过AT89S52单片机统一发送初始化、写命令等控制信号来操作传感器,并逐一从传感器中读取温度,最后,在LCD 中循环显示温度信息;该系统还可通过键盘来设定温度的限定参数和选定特殊的显示方式,具有良好的人机界面。

实验证明,该温度检测系统具有结构简单、稳定性好、精度高等优点,值得推广。

关键词: AT89S52 单片机;万年历;蜂鸣器;数字温度检测系统;DS18B20 数字温度传感器目录第1章绪论 (3)1.1课题背景及研究意义 (3)1.2国内外现状 (3)1.3课题的设计目的 (4)1.4课题的主要工作 (4)1.5本文研究内容 (4)第二章设计要求和方案论证 (6)2.1 设计要求 (6)2.2 单片机芯片的选择方案和论证 (6)2.3 显示模块选择方案和论证 (6)2.4时钟的选择方案和论证 (7)2.5温度传感器的选择方案与论证 (7)2.6 DS18B20温度传感器与单片机的接口电路 (8)2.7 电路设计最终方案决定 (9)第三章系统的硬件设计与实现 (10)3.1 电路设计框图 (10)3.2 系统硬件概述 (10)3.3 主要单元电路的设计 (10)3.3.1 AT89S52单片机简介 (10)3.3.2 单片机主控制模块的设计 (11)3.3.4温度传感器电路设计 (13)3.3.5独立式键盘设计 (16)3.3.6液晶模块简介 (17)3.3.7液晶显示部分与AT89s52的接口 (19)3.3.8本章小结 (20)第四章系统的软件设计与实现 (28)4.1.1 系统总流程图 (21)4.1.2 温度程序流程图 (22)4.1.3 LCD显示程序流程图 (24)4.2.液晶显示程序 (28)4.3本章小结 (29)第五章仿真与调试 (30)51软件简介 (30)5.1.1 Keil软件简介 (30)5.1.2 Proteus ISIS简介 (31)5.2 Keil软件调试流程 (32)5.3 Proteus软件运行流程 (35)5.4 万年历的功能仿真 (36)5.5 硬件调试结果 (39)5.6本章小结 (40)附录 (41)附录一: (41)源程序代码: (41)附录二: (55)任务书一、设计目的、步骤及要求1、设计目的以单片机为核心,设计单片机最小系统,构成数字式温度计,能够实现实时温度的显示巩固所学知识、加强综合能力、提高软、硬件设计调试方面的能力、启发创新思维,使将相关专业课程知识综合起来,融会贯通,形成系统的概念,从而实现理论与实践相结合提高设计能力、电子线路的组装调试能力和创新能力,通过查阅资料、选定方案、设计电路、调试软件并下载到芯片中、写出完整的报告等过程,2、设计步骤内容:设计一个具有温度实时检测和动态显示功能的温度检测系统,和led动态显示图文字符的系统电路:1.LCD用于实时时钟(时、分、秒)等广告标语的显示;并能用按键进行实时调试2、利用数字温度传感器DS18B20测量温度信号,计算后在LCD上显示相应的温度值。

lcd数显温度万年历电波钟

lcd数显温度万年历电波钟

外观尺寸:29cm(宽)*18.5cm(高)可挂可摆,背面有挂孔,可挂在墙上,也可以安装随机配送的支架摆放在台面上。

电子说明书地址:/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’键确认。

在正常的时钟显示模式,短按‘-’键可以开启和关闭闹铃功能,当闹铃响时,按任意键都可以关闭闹铃。

基于液晶显示的万年历

基于液晶显示的万年历

毕业设计(论文)报告题目基于液晶显示的万年历系别专业班级学生姓名学号指导教师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)4.1主程序设计 (17)4.2实时时钟日历子程序设计 (17)4.3环境温度采集子程序设计 (18)4.4按键子程序设计 (20)第五章测试结果分析与结果 (21)5.1 测试结果分析 (21)5.2 测试总结 (21)结束语 (22)致谢 (23)参考文献 (24)附录一:原理图 (25)附录二:源程序 (26)前言万年历,就是记录一定时间范围内(比如100年或更多)的具体阳历与阴历的日期的年历, 方便有需要的人查询使用.万年只是一种象征,表示时间跨度大.这次设计通过对万年历系统的设计, 详细介绍AT89S52单片机应用中的按键处理,数码管显示原理,动态和静态显示原理,定时中断,A/D转换等原理.该系统能够显示年,月,日,小时,分钟,秒,星期,农历,温度,通过按键可以修改时间等功能.此系统结构简单,功能齐全,具有一定的推广价值。

电子时钟+万年历(LCD1602)

电子时钟+万年历(LCD1602)

基于AT89S52的lcd1602显示电子时钟+万年历/**********************************************名称:基于AT89S52的lcd1602显示电子时钟+万年历编写:李松泽时间:2013.07.30**********************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]=" 2013-07-30 WED ";uchar code table1[]=" 21:14:55";uchar code table2[]=" 579259 ";uchar code table3[]="Made by Lisongze";uchar code table4[]="MONTUEWEDTHUFRISATSUN"; uchar count,s1num;char miao,fen,shi,ri,yue;uint nian;sbit lcd_rs = P0^5;sbit lcd_rw = P0^6;sbit lcd_en = P0^7;sbit s1=P3^7;sbit s2=P3^6;sbit s3=P3^5;sbit g=P3^0;void delay(uint z)//延时子函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com)//写命令函数{lcd_rs = 0;P2= com;delay(5);lcd_en=1;delay(5);lcd_en=0;}void write_date(uchar date)//写数据函数{lcd_rs = 1;P2= date;delay(5);lcd_en=1;delay(5);lcd_en=0;}void init()//初始化函数{int num;shi=21;fen=14;miao=55;ri=30;yue=7;nian=2013;lcd_en=0;lcd_rw=0;write_com(0x38);//显示设置模式write_com(0x0c);//00001100开显示,不显示光标,光标不闪烁write_com(0x06);//00000110地址指针加一,整屏不移动write_com(0x01);//清屏write_com(0x80);for(num=0;num<16;num++)//显示数字579259{write_date(table2[num]);delay(300);}write_com(0x80+0x40);for(num=0;num<16;num++)//显示made by lisongze{write_date(table3[num]);delay(300);}delay(5000);write_com(0x01);write_com(0x80);for(num=0;num<16;num++)//显示日期{write_date(table[num]);delay(5);}write_com(0x80+0x40);for(num=0;num<12;num++)//显示时间{write_date(table1[num]);delay(5);}TMOD=0x01;//启动定时器中断TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;//打开定时器}void write_sfm(uchar add,uchar date)//写时分秒函数{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void write_nyr(uint add,uint date)//写年月日函数,此处若用uchar范围只有0-255 { //不够,改用uint(0-65535) uint qian,bai,shi,ge;qian=date/1000;bai=date%1000/100;shi=date%100/10;ge=date%10;write_com(0x80+add);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);}void write_yr(uchar add,uchar date)//写月日函数{uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan()//按键扫描函数{int m,n;g=0;//将矩阵键盘当做独立键盘使用if(s1==0){delay(5);if(s1==0)//按键1光标移位扫描{s1num++;if(s1num==1){ while(!s1);//等待按键松手write_com(0x80+0x40+10);TR0=0;//关闭定时器write_com(0x0f);}if(s1num==2){while(!s1);write_com(0x80+0x40+7);}if(s1num==3){while(!s1);write_com(0x80+0x40+4);}if(s1num==4){while(!s1);write_com(0x80+3);}if(s1num==5){while(!s1);write_com(0x80+6);}if(s1num==6){while(!s1);write_com(0x80+9);}if(s1num==7){while(!s1)write_com(0x80+13);}if(s1num==8){while(!s1);s1num=0;write_com(0x0c);TR0=1;//开定时器}}}if(s1num!=0){if(s2==0)//按键2加功能{delay(5);if(s2==0){while(!s2);if(s1num==1)//秒加{miao++;if(miao==60){miao=0;}write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2)//分加{fen++;if(fen==60){fen=0;}write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3)//时加{shi++;if(shi==24){shi=0;}write_sfm(4,shi);write_com(0x80+0x40+4);}if(s1num==4)//年加{nian++;if(nian==10000){nian=2000;}write_nyr(1,nian);write_com(0x80+3);}if(s1num==5)//月份加{yue++;if(yue==13){yue=1;}write_yr(6,yue);write_com(0x80+6);}if(s1num==6)//日期加{ri++;if(ri==29&&yue==2&&!((nian%4==0&&nian%100!=0)||nian%400==0)){ri=1;//平年}if(ri==30&&yue==2&&((nian%4==0&&nian%100!=0||nian%400==0))){ri=1;//闰年}if(ri==31&&(yue==4||yue==6||yue==9||yue==11)){ri=1;}if(ri==32){ri=1;}write_yr(9,ri);write_com(0x80+9);}if(s1num==7)//星期加{m=m+3;if(m==21)m=0;write_com(0x80+12);for(n=m;n<m+3;n++){write_date(table4[n]);delay(5);}write_com(0x80+13);}}}if(s3==0)//按键3减功能{delay(5);if(s3==0){while(!s3);if(s1num==1)//秒减{miao--;if(miao==-1){miao=59;}write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num==2)//分减{fen--;if(fen==-1)fen=59;write_sfm(7,fen);write_com(0x80+0x40+7);}if(s1num==3)//时减{shi--;if(shi==-1)shi=23;write_sfm(4,shi);write_com(0x80+0x40+4);}if(s1num==4)//年减{nian--;if(nian==1999)nian=2000;write_nyr(1,nian);write_com(0x80+3);if(s1num==5)//月份减{yue--;if(yue==0)yue=12;write_yr(6,yue);write_com(0x80+6);}if(s1num==6)//日减{ri--;if(ri==0){if(yue==2&&!((nian%4==0&&nian%100!=0)||nian%400==0)){ri=28;//平年}if(yue==2&&((nian%4==0&&nian%100!=0||nian%400==0))){ri=29;//闰年}if(yue==4||yue==6||yue==9||yue==11){ri=30;}if(yue==1||yue==3||yue==5||yue==7||yue==9||yue==11)ri=31;}write_yr(9,ri);write_com(0x80+9);}if(s1num==7)//星期减{m=m-3;if(m==0)m=21;write_com(0x80+12);for(n=m;n-3<m;n++){write_date(table4[n-3]);delay(5);}write_com(0x80+13);}}}}void main(){int i,j;init();while(1){keyscan();if(count==18){count=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;ri++;j=j+3;if(j==21)j=0;write_com(0x80+12);for(i=j;i<j+3;i++){write_date(table4[i]);delay(5);}if(ri==29&&yue==2&&!((nian%4==0&&nian%100!=0)||nian%400==0)){ri=1;yue++;//平年}if(ri==30&&yue==2&&((nian%4==0&&nian%100!=0||nian%400==0))){ri=1;yue++;//闰年}if(ri==31&&(yue==4||yue==6||yue==9||yue==11)){ri=1;yue++;}if(ri==32){ri=1;yue++;}if(yue==13){yue=1;nian++;if(nian==10000){nian=2000;}write_nyr(1,nian);}write_yr(6,yue);}write_yr(9,ri);write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);}}}void timer() interrupt 1{TH0=(65535-50000)/256;TL0=(65535-50000)%256;count++;}说明:单片机最小系统在这里就不用给图了,对于单片机学习者就不用提了,仅仅给个lcd1602连接图就够了,对了,要说明一点,笔者的最小系统上独立键盘不够,所以就暂且用矩阵键盘代替独立键盘,程序更要说明是在郭天祥视频讲解的基础上加上自己的思想(实现万年历的功能),程序基本上没有问题,就是偶尔调时完,走时有点迟钝,希望能够和大家共同交流!QQ:782373034电子群:257584167。

液晶万年历

液晶万年历

液晶万年历作品简介本款作品基于AT89S51主控芯片和DS18B20时钟芯片,采用液晶显示屏1602显示,使用温度传感器采集周围环境温度实现功能:显示年月日时分秒温度准确显示可通过按键进行校时操作定时响铃作品特点:采用双电源供电,停电时可自动切换到电池供电:工作稳定,低功耗,寿命长,外形简洁大方,方便携带、摆放。

1.本设计的主要设计思想是两方面:1、通过设计硬件控制电路和软件控制程序,从而实现能够正确地显示某年某月某日某时某分某秒,万年历应具有校时功能、定时功能、报时功能。

可能除了上边的功能还有其他的功能,如果需要还可以不断的向上加功能。

在万年历电子表的上面还有调整时间和定时用的几个功能键(复位键、选择位键、各个位数值的增大和减小两个键等)硬件控制电路主要用了AT89S51芯片处理器、LCD1602液晶显示器、DS1302时钟芯片等。

根据各自芯片的功能互相连接成万年历电子表的控制电路。

2、软件控制程序主要有主控程序、万年历电子表的时间控制程序。

主控程序中对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是万年历电子表中比较重要的部分。

时间控制程序体现了年、月、日、小时、分钟、秒及星期的计算方法。

设计中使用的时钟芯片是美国DALLAS公司推出的与MC146818兼容,寄存器存取速度快,在主机掉电时可用来保存重要数据的实时时钟芯片DS1302,采用DS1302作为主要计时芯片,可做到计时准确。

对它的控制,主要是对其的初始化和对其数据的读取。

采用连续工作制,一般无需每次都初始化,即使系统复位也是如此。

但初始化时,首先应禁止芯片内部的更新周期操作。

所以,应先将它状态寄存器B中的SET位置1,然后初始化。

DS1302处于正常工作状态时,每秒即产生一个更新周期。

在该周期内,微处理器不能读时标寄存器中的内容,否则将得不到确定数据。

为了采样时标寄存器中的数据,采用两种避开在更新周期内访问时标寄存器的方法。

LCD显示的电子万年历的设计

LCD显示的电子万年历的设计

LCD显示的电子万年历的设计摘要:电子万年历是一种非常广泛的日常计时工具,它不仅能够对时间计数,还能够对日期,温度,阴历等进行计数,所以在现代社会中受到了广泛推行。

本设计的硬件设计是以STC89C52单片机为核心,构成了整个系统的控制电路,STC89C52单片机性能卓越,保密性好,烧写方便,烧写速度快,可重复烧写10万次!是普通51单片机的100倍。

它结合DS1302时钟芯片和DS18B20芯片完成时间的自动调整、掉电保护以及温度的采集,可计算到2100年前的秒、分、小时、星期、日、月、年七种日历信息并带闰年补偿,断电后能运行10年之久不丢失数据,DS18B20是数字式温度传感器,具有测量精度高,电路连接简单特点。

设计的输出系统采用LCD数码液晶显示屏显示,简单、明朗。

时间、日期调整由3个按键来实现。

最终达到显示年、月、日以及星期、时、分、秒。

关键词:电子万年历;DS1302;DS18B20;STC89C52LCD shows the design of the electronic calendarAbstract:Electronic calendar is a very wide range of daily timing tool, it can not only count on the time, but also on the date, temperature, etc. to count the lunar calendar, so in modern society has been widely implemented.The design of the hardware design is based on STC89C52 microcontroller as the core, constitute the entire system, the control circuit, STC89C52 MCU performance, security and good, easy programming, the programming speed and programming can be repeated 10 million times! An ordinary 51 MCU SCM is 100 times the normal 51. It combines the DS1302 clock chip and chip DS18B20 completion time of the automatic adjustment, power-down protection, and the temperature of the collection, calculated to 2100 seconds, minutes, hours, weeks, days, months and years seven and calendar information with leap year compensation. Power to run 10 years after the loss of long-suppressed data, DS18B20 a digital temperature sensor with high accuracy, a simple electrical connection characteristics.Ultimately show year, month, day and week, hours, minutes, seconds.Keywords:E-calendar;DS1302;DS18B20;STC89C52目 录第1章 概 述 (1)1.1电子万年历的设计背景 (1)1.2电子万年历的设计意义 (2)1.3电子万年历的应用 (2)第2章 系统总体方案设计 (3)2.1设计要求 (3)2.2系统硬件总体分析 (3)2.2.1时钟电路的方案论证 (3)2.2.2显示电路的方案论证 (4)2.2.3单片机电路的方案论证 (4)2.2.4温度采集电路的方案论证 (5)2.2.5键盘电路的方案论证 (5)2.2.6电路设计最终决定方案 (6)第3章 系统的硬件设计 (7)3.1单片机模块的设计 (7)3.1.1单片机原理 (7)3.1.2单片机主控制模块 (7)3.2时钟电路模块的设计 (10)3.3液晶显示电路模块的设计 (12)3.3.1 LCD1602引脚功能说明 (12)3.3.2 LCD1602的指令说明及时序 (14)3.3.3 LCD1602的介绍 (16)3.4温度采集电路模块的设计 (17)3.5复位电路模块的设计 (24)3.6蜂鸣器报警电路 (25)3.6.1蜂鸣器的介绍 (25)3.6.2蜂鸣器的结构原理 (25)第4章 系统的软件设计 (27)4.1主程序流程图 (28)4.2温度采集程序显示流程图 (30)4.3阴历显示流程图 (30)4.4液晶显示流程图 (31)第5章 系统调试 (34)5.2软件调试 (35)5.3综合调试 (35)5.4测试结果分析 (35)第6章 结论 (37)参考文献 (38)致 谢 (40)附 录 (41)附录一:电子万年历原理图 (41)附录二:电子万年历实物图 (42)附录三:程序清单 (43)附录四:中英文资料 (61)第1章概述随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。

LCD万年历任务书

LCD万年历任务书

毕业设计任务书学生姓名:班级:学号:题目:液晶显示万年历设计一、设计任务:本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。

系统以AT89S52单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。

温度采集选用DS18B20芯片,万年历采用直观的数字显示,数据显示采用1602A液晶显示模块,可以在LCD上同时显示年、月、日、星期、时、分、秒,还具有时间校准等功能。

此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。

图1 硬件电路框图二、设计要求:(1)用3个按键实现所有功能,计时准确。

(2)可以有节日提醒功能。

(3准确无误,掉电保持。

(4)液晶能显示年、月、日、星期、时、分、秒、温度。

三、参考文献:[1]陈明荧. 8051单片机课程设计实训教程[M].北京:清华大学出版社[2]苏平.单片机的原理与接口技术[M].北京:电子工业出版社,2006:1-113.[3]王忠民.微型计算机原理[M].西安:西安科技大学出版社,2003:15-55.[4]何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2003年[5]纪宗南.单片机外围器件使用手册[M].北京:北京航空航天大学出版社,622-655.[6]周雪.模拟电子技术[M]西安: 西安电子科技大学出版社,2005:81-95.[7]左金生.电子与模拟电子技术[M].北京:电子工业出版社,2004:105-131.[8]尹勇.单片机开发环境μVision2的开发指南[M]. 北京:北京航空航天大学出版社,2004:173-199.[9]马忠梅,籍顺心等.单片机的C语言应用程序设计[M].北京航空航天大学出版社, 2001年[10]新编单片机原理与应用(第二版).西安电子科技大学出版社,2007.2[11]张萌.单片机应用系统开发综合实例[M]. 北京:清华大学出版社,2007.7[12]楼然苗.单片机课程设计指导[M]. 北京:北京航空航天大学出版社,2007.7[13]朱思荣.51单片机实现公历与农历、星期的转换[Z].当当电子网[14]李广弟. 单片机原理及应用[M] 北京航空航天大学出版社,2004年[15]王越明.电子万年历的设计[J].黑龙江科技信息,2004年指导教师签名:年月日教研室主任:年月日。

电子万年历(DS1302)(LCD1602显示)程序

电子万年历(DS1302)(LCD1602显示)程序
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
LCD1602_DATAPINS = com;//由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
//Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; //发送低四位
* 函数功能: 主函数
* 输入 : 无
* 输出: 无
*******************************************************************************/
void main()
{
unsigned char i;
Int0Configuration();
LcdWriteData('-');
LcdWriteData('0'+TIME[4]/16);//月
LcdWriteData('0'+(TIME[4]&0x0f));
LcdWriteData('-');
LcdWriteData('0'+TIME[3]/16);//日

基于LCD1602液晶显示屏的电子万年历设计【两个C程序】

基于LCD1602液晶显示屏的电子万年历设计【两个C程序】
图2-8 ISD1420P 引脚图
二,ISD1420P与单片机的连接
ISD1420P的电路图如图 2-9所示,图中LED用做录音和放音的指示灯;R8、R10和C6起到上拉的作用;通过R14和C11的时间常数来决定自动增益控制的释放时间,470KΩ和 的标称值在绝对大多数场合下可获得满意的效果;C7为电源和地之间的去耦电容;C9和C10为话筒的耦合电容.
市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂,不便于调试制作!但是考虑到用单片机配合时钟芯片,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。所以本系统采用了以广泛使用的单片机AT89C51技术为核心,配合时钟芯片DS1302。软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路。本方案设计出的数字钟可以显示时间、设置闹铃功能之外。
本设计中我重点研究实现了单片机+时钟芯片这种模式的万年历,从原理上对单片机和时钟芯片有了深一步的认识,这些基本功能完成后,在软件基础上实现世界时,农历功能。
本设计在很多场合都能用到,可以把此万年历装在镜框中或其它工艺品中,以便更加实用。
第一章 概论 系统总体框图
本设计的核心部分为单片机控制器,系统的各项功能由其它各部分单元电路来完成,单元电路主要包括:时钟电路部分、显示部分、语音部分、人机交互控制接口部分等,单片机通过程序来控制其它各部分统一协调地来完成系统的各项功能,本设计硬件电路较简单,但软件部分较复杂,所有功能都要通过软件来实现,系统总体设计如图1-1所示。
采用AT89C55,它是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含20kbytes 的可反复擦写的Flash只读程序存储器(ROM)和256*8bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8 位中央处理器(CPU)和Flash存储单元,功能强大AT89C55单片机适合于许多较为复杂控制应用场合。

毕业设计--基于液晶显示的智能万年历的设计

毕业设计--基于液晶显示的智能万年历的设计

毕业设计课题名称:基于液晶显示的智能万年历的设计设计时间: 2011 年09月—2011年12月系部:电子信息工程系总目录第一部分任务书第二部分开题报告第三部分毕业设计正文第一部分任务书扬州工业职业技术学院毕业设计任务书第二部分开题报告扬州工业职业技术学院电子信息工程系12届毕业设计(论文)开题报告书(表1)第三部分毕业设计正文基于液晶显示的智能万年历的设计蒋冬冬0901应用电子[摘要]本设计以数字集成电路技术为基础,单片机技术为核心。

软件设计采用模块化结构、C语言编程。

系统通过LCD1602显示数据,可以显示年、月、日、时、分、秒、星期、温度。

硬件由主控器、时钟电路、温度检测电路、显示电路、按键电路、蜂鸣器6个模块组成。

主控模块用AT89C51、时钟电路用时钟芯片DS1302、显示模块用LCD1602、温度检测采用DS18B20温度传感器、按键电路用普通按键接上拉电阻完成。

[关键词] 单片机AT89C51 DS1302 DS18B20 液晶显示LCD-based design of intelligent calendarJiangdong Dong0901 Applied ElectronicsAbstract:The design of digital integrated circuit technology, chip technology as the core. Modular structure of software design, C programming language.System through the LCD1602 display data, you can display year, month, day,hour, minute, second, week, temperature. Hardware by the master, the clockcircuit, the temperature detection circuit, display circuit, key circuit,buzzer 6 modules. Control module with the AT89C51, clock circuit with aclock chip DS1302, display module with the LCD1602, the temperaturedetected by temperature sensor DS18B20, key circuit with pull-up resistorconnected to an ordinary button to complete.Key words: MCUA T89C51 DS1302 DS18B20 LCDdisplay目录第一章前言 (1)1.1本课题研究的背景以及现实意义 (1)1.2 本课题对于专业知识的综合应用情况 (1)第二章智能万年历的工作概述以及原理分析 (2)2.1智能万年历的工作概述 (2)2.2各单元电路模块介绍 (3)2.2.1 单片机最小系统模块 (3)2.2.2 1602液晶显示模块 (3)2.2.3 DS18B20温度传感器模快 (4)2.2.4 DS1302时间检测模块 (5)2.2.5蜂鸣器模块 (7)2.2.6按键控制模块 (7)2.3 应用Protel绘制系统总原理图 (8)2.3.1 Protel简介 (8)2.3.2万年历电路总原理图 (9)第三章应用KEIL编程以及Proteus仿真 (10)3.1 KEIL软件的介绍 (10)3.2 Proteus软件的介绍 (10)3.3 KEIL的模块化编程 (10)3.4 万年历系统的软件程序调试 (11)3.5 液晶显示程序及仿真 (13)3.5.1 1602液晶显示程序 (13)3.5.2 液晶的仿真效果 (15)3.6 温度传感器程序及仿真 (15)3.6.1 温度传感器程序 (15)3.6.2温度传感器仿真 (18)3.7 时钟芯片程序及仿真 (18)3.7.1时钟芯片程序 (18)3.7.2 时钟芯片仿真 (25)3.8 蜂鸣器程序及仿真 (25)3.8.1蜂鸣器程序 (25)3.8.2蜂鸣器仿真 (26)3.9 按键程序及仿真 (26)3.9.1按键程序 (26)3.9.2 按键仿真 (37)3.10 主程序 (38)3.11万年历系统总体仿真效果 (40)小结 (41)致谢 (42)参考文献 (43)第一章前言1.1本课题研究的背景以及现实意义随着微电子技术和超大规模集成电路技术的不断发展,家用电子产品不但种类日益丰富,而且变得更加经济实用,单片微型计算机体积小、性价比高、功能强、可靠性高等独有的特点,在各个领域得到了广泛的应用。

单片机液晶显示“万年历”-单片机课程设计报告

单片机液晶显示“万年历”-单片机课程设计报告

AM/PM的12小时格式。采用三线接口与CPU进行同步通信,并可采用 突发方式一次传送多字节的时钟信号或RAM数据。
DS1302有主电源/后备电源双电源引脚:VCC1在单电源与电池供电 的系统中提供低电源,并提供低功率的电磁备份;VCC1在双电池系统 中提供主电源。在这种运行方式中,VCC1里连接到后备电源,以便在 没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或 VCC2中较大者供电。当VCC2>(VCC1+0.2V)时,VCC2给DS1302 供电;当VCC2<VCC1时,DS1302由VCC1供电。如图2-4为DS1302的 引脚图。
图2-4 DS1302的引脚图
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然 后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问 到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟 周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单 字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。 如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O 引脚变为高阻态。上电运行时,在VCC≥2.5V之前,RST脚必须保持低 电平。只有在SCLK为低电平时,才能将RST置为高电平。
和比较) ● 全静态工作方式:0~24MHZ
2.2.2 时钟电路DS1302
DS1302的性能特性:
● 实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年 进行比较;
● 用于高速数据暂存的31*8位RAM; ● 最少引脚的串行I/O; ● 2.5~5.5V电压工作范围; ● 2.5V时电流小于300nA; ● 用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数

LCD电子万年历设计

LCD电子万年历设计

1 任务和目标1.1设计的内容和要求电子万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

本课题研究的目的就是设计出一种基于单片机的LCD电子万年历。

功能要求:(1)显示公历年、月、日、星期、小时、分钟和秒;(2)可随时可以调校年、月、日或时、分、秒;(3)能显示农历时间,并能体现是否是闰年;(4)具有时间提醒功能;(5)附带秒表功能;(6)可动态完整显示年份,实现真正的万年历;(7)能够显示温度。

1.2设计的目的、意义在当代繁忙的工作与生活中,时间与每一个人都有非常密切的关系,每个人都受到时间的影响。

时间对于每个人来说都很重要,为了更好地利用时间,就必须对时间有一个度量,因此产生了电子万年历。

阴历对于农业的耕作也很重要,本设计以此为出发点,集年、月、日、星期、时间、阴历、准点闹铃和温度显示各种功能为一体,根据AT89S52单片机固有的机器周期和强大的可编程和处理能力,同时利用温度传感器采集温度,从而实现各种功能。

万年历是采用数字电路实现对时、分、秒等信息进行数字显示的计时装置。

广泛用于个人、家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。

因此,研究万年历及扩大其应用,有着非常现实的意义。

1.3国内外现状、发展随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。

尤其是单片机技术的应用产品已经走进了千家万户。

电子万年历的出现给人们的生活带来的诸多方便。

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

基于某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中。

使用独立的Keil仿真器时,注意事项:* 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

基于stc51单片机的LCD1602显示时间的电子万年历(显示

基于stc51单片机的LCD1602显示时间的电子万年历(显示

1 课设所需软件简介1.1 Keil uVision4的简要介绍2009年2月发布KeilμVision4,KeilμVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。

新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。

新版本支持更多最新的ARM芯片,还添加了一些其他新功能。

2011年3月ARM公司发布最新集成开发环境RealViewMD K开发工具中集成了最新版本的KeiluVision4,其编译器、调试工具实现与ARM器件的最完美匹配。

KeilC51开发系统基本知识KeilC51开发系统基本知识1. 系统概述KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

下面详细介绍KeilC51开发系统各部分功能和使用。

2. Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,uVision与Ishell分别是C51for Windo ws和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51及C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

使用独立的Keil仿真器时,注意事项:* 仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

单片机课程设计lcd显示万年历eprom存储

单片机课程设计lcd显示万年历eprom存储

单片机课程设计LCD显示万年历EPROM存储单片机课程设计报告题目: 基于单片机的LCM1602液晶控制——万年历显示设计所在系部:信息与电气工程所在专业:通信本所在班级: 1001姓名:曹怀宝学号: 3615276指导教师:陈勇完成时间: 7月 3日基于单片机的LCM1602液晶控制——万年历显示设计1.设计目的该设计是基于AT89C52单片机的电子万年历系统,采用LCD1602液晶屏实现显示。

显示年月日星期温度等,双行显示,。

显示年、月、日、星期、时间,可设置,设置功能。

综上所述此时钟具有读取方便、显示直观、功能多样、电路简洁、等优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

2.设计原理及相关说明设计原理:利用DS1302读取系统中的日期以及时间信息,并分别利用P1.1端口和P3.3端口将相关信息传送至STC12C5A60S2主芯片之中,利用P0端口使之显示于LCD1602液晶显示屏上,四个按键分别置于P1口的5、6、7端口能够对时间进行控制修改。

详细请参阅第三节的芯片介绍。

2.2总体设计框图日历时钟系统设计框图如图1所示:键扫描电DS1302蜂鸣器At89C52LCD 1602DS18B2图1 电子万年历系统设计框图3 各芯片的设计及其调用3.1 STC12C5A60S2单片机主控模块STC12C5A60S2简介STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。

内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换1、增强型8051CPU,1T(1024G),单时钟机器周期2、工作电压5.5-3.5V3、1280字节RAM4、通用I/O口,复位后为:准双向口/弱上拉可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA5、有EEPROM功能6、看门狗7、内部集成MAX810专用复位电路8、外部掉电检测电路9、时钟源:外部高精度晶体/时钟,内部R/C振荡器常温下内部R/C振荡器频率为: 5.0V单片机为:11~17MHz 3.3V单片机为:8~12MHz 针对电机控制,强干扰场合。

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

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

单片机液晶显示“万年历”一、设计任务利用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的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

工作电压与单片机的输入电压比较适合。

上面是它的一些基本的应用介绍。

下面是它的引脚的描述:图5 DS1302引脚下面是DS1302的时钟寄存器。

我们要读取的时间数据就是从下面这些数据寄存器中读取出来的。

当我们要想调整时间时,可以把时间数据写入到相应的寄存器中就可以了。

LCD带温度显示万年历

LCD带温度显示万年历

LCD带温度显示万年历.txt都是一个山的狐狸,你跟我讲什么聊斋,站在离你最近的地方,眺望你对别人的微笑,即使心是百般的疼痛只为把你的一举一动尽收眼底.刺眼的白色,让我明白什么是纯粹的伤害。

LCD带温度显示万年历(2009-4-5 15:02:00>【收藏】【评论】【打印】【关闭】标签:1#include <reg52.h>#include <intrins.h>#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脚b5E2RGbCAPsbit SDA2=P1^1。

//SDA2定义为P1口的第4位脚,连接DS1302SCL和ADC0831SDA脚p1EanqFDPwsbit 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。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DS18B20温度检测流程图
时间调整部分程序设计
液晶LCD1602显示部分程序设计流程图
实物照片
总结
此次毕业设计的制作,让我明白了:知识无 止境,在做东西的过程中我们会不断补充自 己的知识,让自己受益良多。 我的经验和知识有限,在开发中存在许多不 足之处,请各位老师批评指正.
致谢
此次毕业设计的制作,凝聚了我的心血,也注入了 老师和同学的无私帮助和热情奉献。在此,我要特 别感谢我的指导老师—何培忠老师,感谢老师给予 我的大力支持。从毕业设计的选题、资料的收集、 参考书目的推荐到实物的调试和完成直到最后的论 文定稿,何老师总是循循善诱的给我指出不足并给 出中肯改善的意见;在我进行程序编写的时候,何 老师耐心的帮助我调试程序,所以我要特别的感谢 他对我的帮助。同时,还有那些在我毕业设计制作 过程中帮助和关心过我的同学,他们也倾注了很多 的精力给予我真诚的帮助,在此,我对所有关心和 帮助过我的家人、同学、老师们表示衷心感谢!
DS1302日期时间数据读取显示 流程图
对于时钟芯片DS1302, 对于时钟芯片DS1302, DS1302 公历日期时间显示只需从 DS1302各寄存器读出年 各寄存器读出年、 DS1302各寄存器读出年、月、 星期, 日、时、分、秒、星期,再 加处理即可。 加处理即可。在首次对 DS1302进行操作之前 进行操作之前, DS1302进行操作之前,必须 进行初始化, 进行初始化,然后从中读出 数据,经过处理后, 数据,经过处理后,送给显 示缓冲单元。 示缓冲单元。
系统进行过相关的初始化指 令之后即开始执行万年历部 分的程序:读取DS1302的 分的程序:读取 的 日期时间数据信息、 日期时间数据信息、根据现 时日期进行农历更新、 时日期进行农历更新、查询 有无功能键按下。若有, 有无功能键按下。若有,则 根据相应的按键进行对应的 处理;若无,则显示。 处理;若无,则显示。
系统构成框图
整个系统由主控模块和 显示模块两大模块组成, 显示模块两大模块组成, 主控模块包括主控芯片、 主控模块包括主控芯片、 温度检测、 温度检测、实时时钟电路 及键盘接口电路, 及键盘接口电路,系统构 成框图如左图所示。 成框图如左图所示。
本设计所用主要芯片
主控模块硬件电路
主程序流程图
基于单片机的LCD显示电子万年历 显示电子万年历 基于单片机的
物理与电子工程学院 04物41 物 顾法令 钟芯片DS1302, , 本文设计了一种基于实时时钟芯片 单片机为核心、 以AT89S52单片机为核心、LCD显示的电子万年 单片机为核心 显示的电子万年 并加入了温度实时显示功能,温度误差 温度误差<0.5摄 历,并加入了温度实时显示功能 温度误差 摄 氏度.主要介绍温度传感器 主要介绍温度传感器DS18B20的时序读写 氏度 主要介绍温度传感器 的时序读写 的数据操作原理, 和时钟芯片 DS1302的数据操作原理,通过万年 的数据操作原理 历硬件和软件的设计,实现了公历年、 历硬件和软件的设计,实现了公历年、月、日、 时、分、秒、星期的调整功能 ,温度为实时显示 温度为实时显示 (不可调 不可调). 不可调
相关文档
最新文档