mcs-51基于单片机的万年历设计内容摘要:

164 中的串行输入、并行输出。 表 4 74LS164 特性表 操作模式 输 入 输 出 复位 MR A B Q0 Q1Q7 移位 L * * L Q0Q6 H L L L Q0Q6 H L H L Q0Q6 H H L L Q0Q6 H H H H Q0Q6 在 方式 0状态下,串行口为同步移位寄存器方式,其波特率是固定的,为fosc/12。 数据由 RXD( )端输入或输出,同步移位脉冲由 TXD( )端输出。 发送、接收数据时低位在先。 所以,在编写程序时,查共阳数码管的码段的二进制数据应给将正常的共阳数码管 09 的二进制值按位反序排序,就能使数码管正常显示,其动态扫描电路如图( 4)所示: 13 Q1855 0Q4855 0Q6855 0Q5855 0Q7855 0Q2855 0Q3855 0R1510R2510R7510R4510R6510R3510R5510123456V S S8910111213V C CDIP14U174L S 164123456V S S8910111213V C CDIP14U274L S 164123456V S S8910111213V C CDIP14U374L S 164V C C111213141516172122232425262731323334353637abfcgdeV C C1234567abcdefg8dpdp9QNA M B E R C A11121314151617abfcgdeV C C1234567abcdefg8dpdp9BNA M B E R C A11121314151617abfcgdeV C C1234567abcdefg8dpdp9SNA M B E R C A11121314151617abfcgdeV C C1234567abcdefg8dpdp9NA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9SYA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9YA M B E R C A111213141516171112131415161711121314151617abfcgdeV C C1234567abcdefg8dpdp9SSA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9SA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9SFA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9FA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9SMA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9MA M B E R C A212223242526272122232425262721222324252627212223242526272122232425262721222324252627abfcgdeV C C1234567abcdefg8dpdp9XQA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9Y L S YA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9Y L YA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9Y L S RA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9Y L RA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9SRA M B E R C AabfcgdeV C C1234567abcdefg8dpdp9RA M B E R C A31323334353637313233343536373132333435363731323334353637313233343536373132333435363731323334353637 图( 4) LED 动态扫描显示电路 3 系统的软件设计 程序流程框图 1.阳历程序设计 因为使用了时钟芯片 DS1302,阳历程序只需从 DS1302 各寄存器中读出年、周、 月、日、小时、分、秒等数据,再处理即可。 在首次对 DS1302 进行操作之前,必须对它进行初始化,然后从 DS1302 中读出数据,再经过处理后,送给显示缓冲单元。 阳历程序流程图见图( 5)所示。 14 开 始 初始化 1302 1302 开始振荡 从 1302 中读出年、周、月、日、小时、分、秒 读 出 的 数 据 都 为BCD 码,将其高低位分离,送显示缓冲单元 图( 5) 阳历程序流程图 2.时间调整程序设计 调整时间用 3 个调整按钮, 1 个作为移位、控制用,另外 2个作为家和减用,分别定义为控制按钮、加按钮、减按钮。 在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能,即调整的位一直在闪烁,直到调整下一位。 闪烁原理就是,让要调整的一 位每隔一定时间熄灭一次,比如说 50ms。 利用定时器计时,当达到 50ms 溢出时,就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束。 此时送正常显示值给该位,再进入下一位调整闪烁程序。 时间调整程序程序流程图如图 (6)所示。 15 图 (6) 时间调整程序程序流程图 16 3.阴历程序设计 阴历程序的实现是要靠阳历日期来推算的。 要根据阳历来推算阴历日期,首先要设计算法,推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。 阳历一个月不是 30 天就是 31 天( 2月除外,闰年 2 月为 29 天,平年 2 月 为 28天)。 阴历一年有 12 个月或 13 个月(含闰月),一个月为 30天或 29 天。 如果把一个只有 29 天的月称为小月,用 1为标志,把 30 天的月称为大月,用 0 为标志,那么 12 位二进制就能表示一年 12 个月的大小。 如果有闰月,则把闰月的月份作为一个字节的高四位,低四位表示闰月大小,大月为 0,小月为 1,这样一个字节就包含了所有闰月的信息。 阴历春节和阳历元旦相差的天数也用一个字节表示。 总共用 4字节就可以存储一年中的任何一天阳历和阴历的对应关系的有关数据,例如 2020 年的阴历和阳历对应关系如表 5所示。 表 5 2020 年的阴历 和阳历对应关系表 月份 1 2 3 4 5 6 7 8 9 10 11 12 闰 2 月 大小 小 大 大 大 小 大 小 大 小 大 小 大 小 天数 1 0 0 0 1 0 1 0 1 0 1 0 1 二进制 29 30 30 30 29 30 29 30 29 30 29 30 十六进制 4 2 5 2 21 2020 年的春节和元旦差 21 天,这样 2020 年的信息表示为: 21, 42H, 52H,21H。 其中表示 12个月大小信息的字节,第四位和第七位不同。 第一 个字节为十进制,其他的都为十六进制。 按此方法, 50年的阳历和阴历对应关系表共使用200 字节。 20202050 年的关系表: 35,15H,51H,00H(2020) 23,11H,52H,41H(2020) 42,12H,65H,00H(2020) 31,11H,32H,00H(2020) 21,42H,52H,21H(2020) 39,52H,25H,00H(2020) 28,25H,04H,71H(2020) 48,66H,42H,00H(2020) 37,33H,22H,00H(2020) 25,15H,24H,51H(2020) 44,05H,52H,00H(2020) 33,22H,65H,00H(2020) 22,21H,25H,41H(2020) 40,24H,52H,00H(2020) 30,52H,42H,91H(2020) 49,55H,05H,00H(2020) 38,26H,44H,00H(2020) 27,53H,50H,60H(2017) 46,53H,24H,00H(2018) 35,25H,54H,00H(2019) 24,41H,52H,41H(2020) 17 42,45H,25H,00H(2021) 31,24H,52H,00H(2022) 21,51H,12H,21H(2023) 40,55H,11H,00H(2024) 28,26H,21H,61H(2025) 47,26H,61H,00H(2026) 36,13H,31H,00H(2027) 25,05H,31H,51H(2028) 43,12H,54H,00H(2029) 33,51H,25H,00H(2030) 22,42H,25H,31H(2031) 41,32H,22H,00H(2032) 30,55H,02H,71H(2033。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。