1、基于单片机的万年历设计论文 1.引言1.1背景1946年2月15日,第一台电子数字计算机ENIAC问世,这标志着计算机时代的到来。计算机的发展,经历了电子计算机、晶体管计算机、集成电路计算机、大规模集成电路计算机和超大规模集成电路计算机五个时代。微处理器、存储器和I/O接口电路构成微型计算机,从应用形态上,微型计算机可以分为三种:多板机(系统机)、单板机和单片机。在一片集成电路芯片上集成微处理器、存储器和I/O接口电路,从而构成了单芯片微型计算机,即单片机。单片机体积小、控制功能强,其非凡的嵌入式应用形态对于满足嵌入式应用需求具有独特的优势!单片机技术发展十分迅速,产品种类以琳琅满目,其发展经
2、过三个阶段:其一:单片机形成阶段。1976年,Intel公司提出了MCS-48系列单片机。主要特点:在单个芯片内完成了CPU、存储器和I/O接口等部件的集成;但存储器容量较小,寻址范围小(不大于4K),无串行接口,指令系统功能不强。其二:单片机结构成熟阶段。1980年,1976年,Intel公司提出MCS-51系列单片机。主要特点:存储器容量增加,寻址范围扩大(64K),结构体系成熟。其三:性能提高阶段。近年来,个半导体厂商不断推出新型单片机芯片,典型的产品如Atmel公司的AT89C51RD2单片机。主要特点:控制性能优异、种类繁多。现在,单片机芯片市场已经呈现出百发齐放、欣欣向荣的局面!单
3、片机应用技术已经成为电子应用系统设计中最为常用的技术手段,学习和掌握单片机应用技术具有极其重要的现实意义。1.2应用价值 由于单片机具有良好地控制性能和灵活的潜入品质,其在各种领域都获得了极为广泛的应用。单片机用于各种仪器仪表,一方面提高了仪器仪表的使用功能和精度,是仪器仪表智能化,同时还简化了仪器仪表的硬件结构,从而可以方便地完成与企业把产品的升级换代。机电一体化产品是集机械技术、微电子技术、自动控制技术和计算机技术与一体,具有智能化特征的各种机电产品。单片机还可以用于各种物理量的采集与控制,电流、电压、温度、液压、流量等物理参数的采集和控制均可以利用单片机方便地实现。在较复杂的工业系统中,
4、经常采用分布式测控系统完成大量的分布参数的采集。在这一系统中,采用单片机作为分布式系统的前端采集模块,系统具有运行可靠,数据采集方便灵活,成本低廉这一系列优点。家用电器是单片机的又一重要领域,前景十分广,另外,在交通领域中,汽车、火车、飞机、航天器等均有单片机的广泛应用。1.3设计目的利用单片机,时钟芯片、温度传感器、数码管等实现日期、时间、温度的显示即一个简单的万年历。将我所学的单片机汇编语言应用及对所学知识的了解熟练运用!加强对51系列单片机的构造了解及应用,熟悉汇编语言或C语言编程,综合掌握和理解设计各部分的工作原理、设计过程、芯片器件的选择方法、模块化编程等多项知识。(1)通过万年历的
5、设计掌握好对PROTEUS仿真设计的熟练使用;(2)通过万年历的设计熟练掌握单片机的各个功能,并且对单片机有一个总体的把握,设计中对单片机各功能的了解,达到理想设计效果;(3)设计中使用了时钟芯片DS1302、温度传感器DS18B20、LCD显示等,通过设计对他们熟练掌握;(4)用PROTEUS仿真模拟实现具体应用使个人设计系统能够真正使用运行,遇到问题在解决问题;(5)把理论知识与实践知识相结合,充分发挥个人能力,并在实践中得到锻炼,合作解决问题,直到弄透弄懂;(6)提高利用已学的知识分析和解决问题的能力,加深自己对所学知识的理解运用。2.设计方案2.1设计任务通过对所学知识,及对单片机的认
6、识理解,完成一个带有温度测量功能的万年历的软件、硬件设计。(1)万年历设计系统硬件(2)万年历设计系统软件2.2设计内容(1)设计前进行总体规划,设计步骤;(2)对各个元件的了解,画出设计原理电路图;(3)用PROTEUS软件画出设计电路图;(4)用KEIL软件编写程序;(5)把C语言编写的程序转化成单片机可以识别的程序;(6)在PROTEUS里模拟并调试程序,使其达到理想效果;(7)填写设计任务书、说明书。3.总体设计及核心部件简介3.1总体设计框图 主程序流程图 万年历设计包括三大模块:LCD显示(AMPIRE128x64)、DS1302时钟芯片与单片机时钟模块和DS18B20温度传感器与
7、单片机温度模块。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(1
8、9脚):接外部晶体的一端。在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。XTAL2(18脚):接外部晶体的另一端。在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。(4) RST(9脚): 单片机刚接上电源时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)(5)PSEN(29脚): 在访问片外程序存储器时,此端输出负脉冲作为存储器读选通
9、信号。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输出端是否有信号输出,可以判
10、别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 #include #include zimo.h #include ds1302.
11、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 InitTi
12、mer0(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 0x0
13、d,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,
14、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, /19
15、31 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,0
16、x4d, /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 0x0
17、6,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, /
18、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
19、,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 2
20、94 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,0x
21、d5,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
22、 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,0x4
23、C, /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,
24、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, /20
25、67 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,0
26、x49, /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 0x0
27、4,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,为小返回0*/bit GetMoonDay(unsigned
28、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(year_codetable_addr+1&0x20)=0) return(0); else return(1); case 8: if(year_codetable_addr+1&0x10)=0) return(0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1