基于单片机的万年历设计_毕业设计论文(41页).doc
-基于单片机的万年历设计_毕业设计论文-第 38 页目录1.引言11.1背景11.2应用价值11.3设计目的22.设计方案32.1设计任务32.2设计内容33.总体设计及核心部件简介33.1总体设计框图33.2硬件设计53.3软件设计63.3.1主程序:63.3.2LCD12864显示273.3.3DS18B20程序段323.3.4DS1302程序段353.4时钟芯片DS1302403.4.1 DS1302芯片相关知识403.5温度传感器DS18B20433.5.1DS18B20芯片相关知识433.6显示LCD12864453.6.1LCD12864的基本知识454.仿真与调试486.参考文献50附录1.电路硬件仿真图50附录2.元器件清单501.引言1.1背景1946年2月15日,第一台电子数字计算机ENIAC问世,这标志着计算机时代的到来。计算机的发展,经历了电子计算机、晶体管计算机、集成电路计算机、大规模集成电路计算机和超大规模集成电路计算机五个时代。微处理器、存储器和I/O接口电路构成微型计算机,从应用形态上,微型计算机可以分为三种:多板机(系统机)、单板机和单片机。在一片集成电路芯片上集成微处理器、存储器和I/O接口电路,从而构成了单芯片微型计算机,即单片机。单片机体积小、控制功能强,其非凡的嵌入式应用形态对于满足嵌入式应用需求具有独特的优势!单片机技术发展十分迅速,产品种类以琳琅满目,其发展经过三个阶段:其一:单片机形成阶段。1976年,Intel公司提出了MCS-48系列单片机。主要特点:在单个芯片内完成了CPU、存储器和I/O接口等部件的集成;但存储器容量较小,寻址范围小(不大于4K),无串行接口,指令系统功能不强。其二:单片机结构成熟阶段。1980年,1976年,Intel公司提出MCS-51系列单片机。主要特点:存储器容量增加,寻址范围扩大(64K),结构体系成熟。其三:性能提高阶段。近年来,个半导体厂商不断推出新型单片机芯片,典型的产品如Atmel公司的AT89C51RD2单片机。主要特点:控制性能优异、种类繁多。现在,单片机芯片市场已经呈现出百发齐放、欣欣向荣的局面!单片机应用技术已经成为电子应用系统设计中最为常用的技术手段,学习和掌握单片机应用技术具有极其重要的现实意义。1.2应用价值 由于单片机具有良好地控制性能和灵活的潜入品质,其在各种领域都获得了极为广泛的应用。单片机用于各种仪器仪表,一方面提高了仪器仪表的使用功能和精度,是仪器仪表智能化,同时还简化了仪器仪表的硬件结构,从而可以方便地完成与企业把产品的升级换代。机电一体化产品是集机械技术、微电子技术、自动控制技术和计算机技术与一体,具有智能化特征的各种机电产品。单片机还可以用于各种物理量的采集与控制,电流、电压、温度、液压、流量等物理参数的采集和控制均可以利用单片机方便地实现。在较复杂的工业系统中,经常采用分布式测控系统完成大量的分布参数的采集。在这一系统中,采用单片机作为分布式系统的前端采集模块,系统具有运行可靠,数据采集方便灵活,成本低廉这一系列优点。家用电器是单片机的又一重要领域,前景十分广,另外,在交通领域中,汽车、火车、飞机、航天器等均有单片机的广泛应用。1.3设计目的利用单片机,时钟芯片、温度传感器、数码管等实现日期、时间、温度的显示即一个简单的万年历。将我所学的单片机汇编语言应用及对所学知识的了解熟练运用!加强对51系列单片机的构造了解及应用,熟悉汇编语言或C语言编程,综合掌握和理解设计各部分的工作原理、设计过程、芯片器件的选择方法、模块化编程等多项知识。(1) 通过万年历的设计掌握好对PROTEUS仿真设计的熟练使用;(2) 通过万年历的设计熟练掌握单片机的各个功能,并且对单片机有一个总体的把握,设计中对单片机各功能的了解,达到理想设计效果;(3) 设计中使用了时钟芯片DS1302、温度传感器DS18B20、LCD显示等,通过设计对他们熟练掌握;(4)用PROTEUS仿真模拟实现具体应用使个人设计系统能够真正使用运行,遇到问题在解决问题;(5)把理论知识与实践知识相结合,充分发挥个人能力,并在实践中得到锻炼,合作解决问题,直到弄透弄懂;(6)提高利用已学的知识分析和解决问题的能力,加深自己对所学知识的理解运用。2.设计方案2.1设计任务通过对所学知识,及对单片机的认识理解,完成一个带有温度测量功能的万年历的软件、硬件设计。(1)万年历设计系统硬件(2)万年历设计系统软件2.2设计内容(1) 设计前进行总体规划,设计步骤;(2) 对各个元件的了解,画出设计原理电路图;(3) 用PROTEUS软件画出设计电路图;(4) 用KEIL软件编写程序;(5) 把C语言编写的程序转化成单片机可以识别的程序;(6) 在PROTEUS里模拟并调试程序,使其达到理想效果;(7) 填写设计任务书、说明书。3.总体设计及核心部件简介3.1总体设计框图 开始 开中断:初始化显示开机图画调节标志调节值关中断读温度调节标志数据处理542137其它它6显示数据月年周日秒分时开中断 主程序流程图退出中断 万年历设计包括三大模块:LCD显示(AMPIRE128x64)、DS1302时钟芯片与单片机时钟模块和DS18B20温度传感器与单片机温度模块。3.2硬件设计主控制器选用AT89C51单片机,利用AT89C51单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其实现开始暂停的功能。P0口输出数据,P1.1-P1.4口接四个按钮开关,分别实现。电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。硬件电路图按照图3.1进行设计。 DS1302 AT89C51 LCD显示 单片机 控制器 控制开关 DS18B20图3.1 万年历硬件电路基本原理图AT89C51各引脚主要功能简介: (1)VSS(20脚):接地(2)VCC(40脚): 主电源+5V(3)XTAL1(19脚):接外部晶体的一端。在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。XTAL2(18脚):接外部晶体的另一端。在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。(4) RST(9脚): 单片机刚接上电源时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)(5)PSEN(29脚): 在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别AT89C51是否在工作。(6)ALE/PROG(30脚):在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。PSEN端同样可驱动8个LSTTL负载。我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别80C51是否在工作。(7)EA/VPP(31脚):当EA端输入高电平时,CPU从片内程序存储器地址0000单元开始执行程序。当地址超出4KB时,将自动执行片外程序存储器的程序。当EA输入低电平时,CPU仅访问片外程序存储器。在对87C51EPROM编程时,此引脚用于施加编程电压VPP。(8)输入/输出引脚:1)P0.0P0.7 (39脚32脚) 2)P1.0P1.7 (01脚08脚)3)P2.0P2.7 (26脚21脚)4)P3.0P3.7 (10脚17脚) 3.3软件设计3.3.1主程序:#include <reg51.h> #include <absacc.h> #include "zimo.h" #include "ds1302.h"#include "ds18b20.h"#include "lcd12864.h" /按键定义sbit KEY0 = P11;sbit KEY1 = P12;sbit KEY2 = P13;sbit KEY3 = P14;/键盘函数所要用到的变量unsigned char key_operate = 0;unsigned char timer =0;unsigned char key_flag;unsigned int counter=0;unsigned char Lcd_t = 0; /LCD刷新间隔unsigned char flicker = 0; /调时闪烁间隔void InitTimer0(void)/产生10ms时间间隔 TMOD = (TMOD & 0XF0) | 0X01; /定时器0工作在模式1,16Bit定时器模式 TH0 = (65536 - 8000)/256; TL0 = (65536 - 8000)%256; TR0 =1; ET0 =1;/开启定时器和中断 EA = 1;/*阳历转换阴历*/code unsigned char year_code597= 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,0x25,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 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,0x48, /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,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, /1967 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,0x45, /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 0x86,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,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 0x0A,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, /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,0xdA,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 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,0x45, /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,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/月份数据表code unsigned char day_code19=0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3;code unsigned int day_code23=0x111,0x130,0x14e;* 子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0bit GetMoonDay(unsigned char month_p,unsigned short table_addr)switch (month_p)case 1:if(year_codetable_addr&0x08)=0)return(0);else return(1); case 2:if(year_codetable_addr&0x04)=0)return(0);else return(1);case 3:if(year_codetable_addr&0x02)=0)return(0);else return(1);case 4:if(year_codetable_addr&0x01)=0)return(0);else return(1);case 5:if(year_codetable_addr+1&0x80)=0)return(0);else return(1);case 6:if(year_codetable_addr+1&0x40)=0)return(0);else return(1);case 7:if(