欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    万年历的单片机实现.docx

    • 资源ID:844823       资源大小:1.14MB        全文页数:34页
    • 资源格式: DOCX        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    万年历的单片机实现.docx

    1、万年历的单片机实现一、 实验内容用单片机实现万年历二、 实验要求(1) 平时显示实时时钟与日历(2) 输入任意日子可显示对应的星期和阴历(3) 可设置的闹钟功能三、 实验器件DP-51PRO.NET综合实验箱微机一台(Keil软件)四、 设计任务分析本实验是基于51单片机的电子万年历的设计,其中包括当前时间与日期的显示,当前时间与日期的调整,闹铃的设置,任意日期的阴历查询以及星期查询的功能。可以依据功能,将显示分为三个界面,分别为当前时间与日期显示界面,闹铃设置界面,综合查询界面,可通过三个按键进行切换,按键时需要软件“去抖”。显示器件为型号为LCM12864的LCD液晶显示屏。具体实现过程如

    2、下:五、 具体实现过程可以依据功能,将显示分为三个界面,分别为当前时间与日期显示与设置界面,闹铃设置界面,综合查询界面。由于LCM12864的配置文件中自带一个函数LCM_DispStr,可以直接将指定字符串显示于指定行列,故为了方便起见,也为了减少变量,将本实验中所需的时间与日期全部定义为字符串形式。事实证明,这样反而加大了程序代码的冗余。(一)、当前时间与日期显示与设置本界面中包含当前的时间与日期显示及设置功能,为主界面,即初始界面。1、当前时间与日期显示由于时间具有同步性,故时间应该是可以动态刷新的,又为了不被其它功能影响计时的准确性,可以用一个定时器中断予以实现。采用定时方式1,由于定

    3、时器无法计时1S,故可以设置一个变量从而使其为2ms*500,不太清楚具体晶振频率,取TH=-2000/256,TL=-2000%256,即作12MHz处理,经测试平均约每分钟2s的误差。之所以设置值不大,也是为了后期的闹铃部分的闹钟能稍微响亮一些。同时每次更新完时间后,若秒钟达到了60秒,则会引起相应的时间甚至日期的进位。同时在日期的进位中,需要注意的是平闰年的2月只有28/29天,以及大月31天与小月30天。2、当前时间与日期修改在此过程中,需要有按键可以进入修改界面,以及退出界面,同时,在修改时需要移位以及数字的加减功能,为了方便表明修改的哪位,设置了一个周期约为0.2s的闪烁功能。另在

    4、修改时,由于时间与日期有最大值限制,需要设置一个允许修改的范围。为了实用性,除年份可以4位都设置外,其它部分定义为只能设置个位,并因个位的变化而引起十位的进位或退位。调整时,不再计时。(二)、闹铃设置本界面包括闹铃的时间显示与设置,以及闹铃的开关,闹铃的执行。1、闹铃时间设置闹铃的时间设置类似于主界面中的时间设置功能,不同的是,增加了在每次时间更新后会与设定时间对比,若时间完全符合,且开关为On,即开启状态,会由定时器赋予蜂鸣器一个周期约为0.2s的方波,从而使其发出声音,闹铃执行过程中,其它功能正常进行,不影响计时,按下指定键后闹铃停止。2、闹铃开关闹铃的开关设置为仅可在设置闹铃时进行设置,

    5、其中闹铃的开关标识符为一个全局变量,可通过指定按键修改,显示界面中会根据全局变量的值显示闹铃的开关状态。(三)、综合查询1、输入查询日期输入查询日期的过程与主界面中设置日期的过程类似,只是输入后会使查询的星期与阴历动态变化,而不需要确定键。2、显示查询的星期与阴历在输入查询的日期后,需要获得查询的星期几可以通过在网上查询到的一个公式:W=(Y-1)+(Y-1)/4-(Y-1)/100+(Y-1)/400+D其中Y是年份,D为累计的天数,然后W Mod 7即是当前星期几,若为0,则为星期天,即Sunday。阴历换算我确实不太懂,但经过网上搜索资料后,可以找到一个关于从1901年到2099年每年各

    6、阴历月份的大小,春节所在的公历以及有无闰月等的表,则可以通过累计日期求出农历的日期,为了方便,未采用传统的天干地支计法,而直接采用了数字计法。六、 连线及实验配置准备1、软件设置:给出的拓展名.c的文件全部加入到Keil安装目录下的LIB文件夹里;给出的拓展名为.h的文件全部加入到INC文件夹里,并添加所有的c文件至工程中因为用到了外部I/O (RAM),所以调试时,要开放系统总线。点击工具栏的Project - Option for target target1 - debug - Settings,然后开放总线,即选择ALL BUS或者XBUS(推荐)。2、硬件连接a.将A2区J65的A0

    7、-A3分别连接到B3区J75的A0-A2及/CS。b.将A2区J56的/WR、/RD分别连接到B3区J75的WR,WD。c.将A2区J51的P1.0连接到B3区J75的RSTd.将P1.4,P3.5,P3.4,P3.0,P3.1分别连接至D1区的K1-K5,P1.7连接至D4区的蜂鸣器七、 实验总结此次实验目的为设计一个电子万年历,并要求有一些指定功能。经过了好几天的编程,最后能实现一个基本没BUG的作品,看见自己的万年历可以正常运行了,还是挺欣慰的。通过这次实验给我最大的感受就是,不要着急写程序,架构最重要。因为我图一时方便用了字符串存储日期与时间,致使后面的程序复杂了不少,虽然最后还是达到

    8、了一定的精确度,但是代码非常冗余。如果开始架构好,完全可以用单纯的数字存储,并通过编写通用的子函数来大大简化函数。如果在以后工作中,这点必须注意,不然代码维护性很差。另外,在实验过程中,有一个花了不少时间的在于,我不太懂LCM的内部连接,并且执意不采用周立功键盘而自行采用普通按键,致使花了很长时间才找出了可以正常用于与单片机交互可输入的I/O口。同时在实验中,我也学会了一些计算星期及阴历的算法,这样可以方便以后。另外,还有点很重要,只要自己愿意花时间去研究,在复杂的问题都可以解决。此次试验中,比较遗憾的一点,就是为图简单,未利用LCD的扫描函数,而使其完全为英文界面。八、 程序代码Code:#

    9、include LCM_config.h#include #define uchar unsigned char#define uint unsigned intvoid window_now();void window_alarm();void window_search();void Delayms(uint ms);void T_delay();void TimeUpdate();void TimeShow();void DateUpdate();void DateShow();void AlarmShow();void SearchShow();void AlarmChanged();

    10、void TimeDateChanged();void SearchDateChanged();void Sound();void LunarConversion(uchar Year);int JudgeRun(uchar Year);int JudgeWeek(uchar Year);int LunarBigOrSmall(uchar month_n, uint table_addr);uchar Date = 2014-07-10;uchar Time = 12:15:00;uchar Alarm = 13:27:40;uchar Input = 2014-07-09;uchar Lun

    11、ar = 2014-02-08;uchar code Week710=Monday ,Tuesday ,Wednesday,Thursday ,Friday ,Saturday ,Sunday ;uchar code year_code = / 1901 - 2099/ 第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,/ BIT3-0 对应农历第1-4 月的大小/ 第二字节BIT7-0 对应农历第5-12 月大小,/ 第三字节BIT7 表示农历第13 个月大小/ 月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天)/ BIT6-5 表示春节的公历月份,BIT4-0 表

    12、示春节的公历日期 0x04,0xAe,0x53, /1901 0 0x0A,0x57,0x48, /1902 3 0x55,0x26,0xBd, /1903 6 0x0d,0x26,0x50, /1904 9 0x0d,0x95,0x44, /1905 12 0x46,0xAA,0xB9, /1906 15 0x05,0x6A,0x4d, /1907 18 0x09,0xAd,0x42, /1908 21 0x24,0xAe,0xB6, /1909 0x04,0xAe,0x4A, /1910 0x6A,0x4d,0xBe, /1911 0x0A,0x4d,0x52, /1912 0x0d,0x

    13、25,0x46, /1913 0x5d,0x52,0xBA, /1914 0x0B,0x54,0x4e, /1915 0x0d,0x6A,0x43, /1916 0x29,0x6d,0x37, /1917 0x09,0x5B,0x4B, /1918 0x74,0x9B,0xC1, /1919 0x04,0x97,0x54, /1920 0x0A,0x4B,0x48, /1921 0x5B,0x25,0xBC, /1922 0x06,0xA5,0x50, /1923 0x06,0xd4,0x45, /1924 0x4A,0xdA,0xB8, /1925 0x02,0xB6,0x4d, /1926

    14、 0x09,0x57,0x42, /1927 0x24,0x97,0xB7, /1928 0x04,0x97,0x4A, /1929 0x66,0x4B,0x3e, /1930 0x0d,0x4A,0x51, /1931 0x0e,0xA5,0x46, /1932 0x56,0xd4,0xBA, /1933 0x05,0xAd,0x4e, /1934 0x02,0xB6,0x44, /1935 0x39,0x37,0x38, /1936 0x09,0x2e,0x4B, /1937 0x7C,0x96,0xBf, /1938 0x0C,0x95,0x53, /1939 0x0d,0x4A,0x4

    15、8, /1940 0x6d,0xA5,0x3B, /1941 0x0B,0x55,0x4f, /1942 0x05,0x6A,0x45, /1943 0x4A,0xAd,0xB9, /1944 0x02,0x5d,0x4d, /1945 0x09,0x2d,0x42, /1946 0x2C,0x95,0xB6, /1947 0x0A,0x95,0x4A, /1948 0x7B,0x4A,0xBd, /1949 0x06,0xCA,0x51, /1950 0x0B,0x55,0x46, /1951 0x55,0x5A,0xBB, /1952 0x04,0xdA,0x4e, /1953 0x0A,

    16、0x5B,0x43, /1954 0x35,0x2B,0xB8, /1955 0x05,0x2B,0x4C, /1956 0x8A,0x95,0x3f, /1957 0x0e,0x95,0x52, /1958 0x06,0xAA,0x48, /1959 0x7A,0xd5,0x3C, /1960 0x0A,0xB5,0x4f, /1961 0x04,0xB6,0x45, /1962 0x4A,0x57,0x39, /1963 0x0A,0x57,0x4d, /1964 0x05,0x26,0x42, /1965 0x3e,0x93,0x35, /1966 0x0d,0x95,0x49, /19

    17、67 0x75,0xAA,0xBe, /1968 0x05,0x6A,0x51, /1969 0x09,0x6d,0x46, /1970 0x54,0xAe,0xBB, /1971 0x04,0xAd,0x4f, /1972 0x0A,0x4d,0x43, /1973 0x4d,0x26,0xB7, /1974 0x0d,0x25,0x4B, /1975 0x8d,0x52,0xBf, /1976 0x0B,0x54,0x52, /1977 0x0B,0x6A,0x47, /1978 0x69,0x6d,0x3C, /1979 0x09,0x5B,0x50, /1980 0x04,0x9B,0

    18、x45, /1981 0x4A,0x4B,0xB9, /1982 0x0A,0x4B,0x4d, /1983 0xAB,0x25,0xC2, /1984 0x06,0xA5,0x54, /1985 0x06,0xd4,0x49, /1986 0x6A,0xdA,0x3d, /1987 0x0A,0xB6,0x51, /1988 0x09,0x37,0x46, /1989 0x54,0x97,0xBB, /1990 0x04,0x97,0x4f, /1991 0x06,0x4B,0x44, /1992 0x36,0xA5,0x37, /1993 0x0e,0xA5,0x4A, /1994 0x8

    19、6,0xB2,0xBf, /1995 0x05,0xAC,0x53, /1996 0x0A,0xB6,0x47, /1997 0x59,0x36,0xBC, /1998 0x09,0x2e,0x50, /1999 294 0x0C,0x96,0x45, /2000 297 0x4d,0x4A,0xB8, /2001 0x0d,0x4A,0x4C, /2002 0x0d,0xA5,0x41, /2003 0x25,0xAA,0xB6, /2004 0x05,0x6A,0x49, /2005 0x7A,0xAd,0xBd, /2006 0x02,0x5d,0x52, /2007 0x09,0x2d

    20、,0x47, /2008 0x5C,0x95,0xBA, /2009 0x0A,0x95,0x4e, /2010 0x0B,0x4A,0x43, /2011 0x4B,0x55,0x37, /2012 0x0A,0xd5,0x4A, /2013 0x95,0x5A,0xBf, /2014 0x04,0xBA,0x53, /2015 0x0A,0x5B,0x48, /2016 0x65,0x2B,0xBC, /2017 0x05,0x2B,0x50, /2018 0x0A,0x93,0x45, /2019 0x47,0x4A,0xB9, /2020 0x06,0xAA,0x4C, /2021 0

    21、x0A,0xd5,0x41, /2022 0x24,0xdA,0xB6, /2023 0x04,0xB6,0x4A, /2024 0x69,0x57,0x3d, /2025 0x0A,0x4e,0x51, /2026 0x0d,0x26,0x46, /2027 0x5e,0x93,0x3A, /2028 0x0d,0x53,0x4d, /2029 0x05,0xAA,0x43, /2030 0x36,0xB5,0x37, /2031 0x09,0x6d,0x4B, /2032 0xB4,0xAe,0xBf, /2033 0x04,0xAd,0x53, /2034 0x0A,0x4d,0x48,

    22、 /2035 0x6d,0x25,0xBC, /2036 0x0d,0x25,0x4f, /2037 0x0d,0x52,0x44, /2038 0x5d,0xAA,0x38, /2039 0x0B,0x5A,0x4C, /2040 0x05,0x6d,0x41, /2041 0x24,0xAd,0xB6, /2042 0x04,0x9B,0x4A, /2043 0x7A,0x4B,0xBe, /2044 0x0A,0x4B,0x51, /2045 0x0A,0xA5,0x46, /2046 0x5B,0x52,0xBA, /2047 0x06,0xd2,0x4e, /2048 0x0A,0x

    23、dA,0x42, /2049 0x35,0x5B,0x37, /2050 0x09,0x37,0x4B, /2051 0x84,0x97,0xC1, /2052 0x04,0x97,0x53, /2053 0x06,0x4B,0x48, /2054 0x66,0xA5,0x3C, /2055 0x0e,0xA5,0x4f, /2056 0x06,0xB2,0x44, /2057 0x4A,0xB6,0x38, /2058 0x0A,0xAe,0x4C, /2059 0x09,0x2e,0x42, /2060 0x3C,0x97,0x35, /2061 0x0C,0x96,0x49, /2062

    24、 0x7d,0x4A,0xBd, /2063 0x0d,0x4A,0x51, /2064 0x0d,0xA5,0x45, /2065 0x55,0xAA,0xBA, /2066 0x05,0x6A,0x4e, /2067 0x0A,0x6d,0x43, /2068 0x45,0x2e,0xB7, /2069 0x05,0x2d,0x4B, /2070 0x8A,0x95,0xBf, /2071 0x0A,0x95,0x53, /2072 0x0B,0x4A,0x47, /2073 0x6B,0x55,0x3B, /2074 0x0A,0xd5,0x4f, /2075 0x05,0x5A,0x4

    25、5, /2076 0x4A,0x5d,0x38, /2077 0x0A,0x5B,0x4C, /2078 0x05,0x2B,0x42, /2079 0x3A,0x93,0xB6, /2080 0x06,0x93,0x49, /2081 0x77,0x29,0xBd, /2082 0x06,0xAA,0x51, /2083 0x0A,0xd5,0x46, /2084 0x54,0xdA,0xBA, /2085 0x04,0xB6,0x4e, /2086 0x0A,0x57,0x43, /2087 0x45,0x27,0x38, /2088 0x0d,0x26,0x4A, /2089 0x8e,

    26、0x93,0x3e, /2090 0x0d,0x52,0x52, /2091 0x0d,0xAA,0x47, /2092 0x66,0xB5,0x3B, /2093 0x05,0x6d,0x4f, /2094 0x04,0xAe,0x45, /2095 0x4A,0x4e,0xB9, /2096 0x0A,0x4d,0x4C, /2097 0x0d,0x15,0x41, /2098 0x2d,0x92,0xB5, /2099;sbit RST=P10;sbit k1 = P14;sbit k2 = P35;sbit k3 = P34;sbit k4 = P30;sbit k5 = P31;sb

    27、it soundOn = P17;int timeCount = 0;int AlarmSwitch = 0;int flag = 0;int SoundFlag = 0;int TimeSwitch = 1;/ 月份数据表code uchar day_code19=0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3;code uint day_code23=0x111,0x130,0x14e;timer0() interrupt 1/ 定时器中断TH0 = -2000/256;TL0 = -2000%256;if(TimeSwitch)timeCount +;if(SoundFlag)soundOn = !soundOn;Delayms(1);if(timeCount=500)TimeUpdate();timeCount=0;Sound();/timer0void Sound()/ 判断是否到达所设置的闹钟时间if(!SoundFlag & AlarmSwitch=1 & Time0=Alarm0 & Time1=Alarm1& Time3=Alarm3 & Time4=Alarm4& Time6=Ala


    注意事项

    本文(万年历的单片机实现.docx)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922