嵌入式 LED 万年历

本文介绍了使用STM32主控芯片设计的嵌入式LED万年历项目,通过RTC定时器更新时间,LCD12864显示,并实现了按键设置和中断功能。详细讲解了代码实现,包括主函数、RTC时间配置、LCD显示、键盘扫描和延时模块等。项目中使用了12864 LCD显示当前时间值,并进行了农历转换和属相显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嵌入式作业

20130080476 孙飞

软件工程 1班

2016-1-7


目录

一作业介绍:... 1

1.1主控单元和按键部分设计... 3

1.2部分引脚设计... 3

二项目实现:... 4

2.1 主函数... 4

2.2 函数RTC_SetTIMEConfig. 7

2.2.1定义属性... 7

2.2.2函数... 8

2.3 RCC_Configuration()10

2.4万年历数据的处理和显示函数... 13

2.4.1函数原型:wanchuliday();13

2.4.2 函数原型:wanxians();14

2.4.3 在LCD12864显示当前时间值... 15

2.4.4显示当前时间值... 16

2.5配置行列式键盘串口引脚... 18

2.5.1 GPIO_Config_key(void)18

2.5.2 keyscan()19

2.6 delay延时模块化程序设计... 21

2.6.1  delay(uint32_t time,uint8_t tm)22

三 项目截图及连线:... 26

 

 

一作业介绍:

作业要求:

  通过一学期的学习,总结设计出万年历,能在屏幕上显示万年历并进行设置。实现时必须使用到考试用到的中断和定时器。

概要:

本作业使用的12864,通过中断实现设置时间,定时器定时进行更新时间,组成一个万年历,在主板显示屏上显示出来万年历,当前时间。

 

采用12864作为主控芯片,利用它定期的读取时钟芯片中的时间并显示在LCD上;通过算法得出阴历日期并显示在LCD。

 

定时单元:使用TIM3定时器,向上技术模式。计数5000次即500MS.通过一个全局变量作为分频后得到一秒的定时中断。

 

显示单元:采用LCD12864点阵显示,操作简单,成本低廉。这个实例采用了串口的方式实现显示,接口定义为:PB7—RST///PSB—PA4通过程序中的KEY.C文件中修改,更改接口后记得打开时钟。

 

选择LCD1602液晶显示模块。LCD1602是字符点阵系列液晶模块。它是一类专门用于显示字母、数字、符号等的点阵型液晶显示模块,

分为四位和八位数据传输方式,提供5*7点阵+光标和5*10点阵+

光标的显示模式。

 

对于程序的解释我在第二部分的代码都做了重要的注释,看起来应该比较简单。

 

项目的截图以及连线的部分在第三部分。

由于在平时实验以及最后考试中我们全都用过中断和定时器,就不详细介绍,全部通过代码和注释就能明白。

1.1主控单元和按键部分设计

1.2部分引脚设计

输入/输出引脚 P0.0~ P0.7、P1.0~P1.7、P2.0~ P2.7 和P3.0~P3.7     

①  P0端口(P0.0~ P0.7) P0是一个8位漏极开路型双向I/O端口。作为输出口用时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。 

②P1端口(P1.0~ P1.7) P1是一个带有内部上拉电阻的8位双向I/O端口。P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。作输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 

 ③P2端口 (P2.0~P2.7) P2是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。 ④P3端口(P3.0~P3.7)  P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流

 

二项目实现:

2.1 主函数

/***********************************************************头文件名:main.c

201300800476 孙飞                                               

使用说明:

将LCD12864的PSB与GND短接,RE--PB.12,RW--PB.13,E--PB.15;

   将行列式键盘S1-S8依次与PD.00-PD.07连接好(S1-S4控制行,S5-S8控制列)

***********************************************************/

 

#include "stm32f10x.h"

#include "delay.h"

#include "rcc.h"

#include "stdio.h"

 

 

/*时间结构体*/

struct rtc_time systmtime;

/**

 * @brief  主函数

 * @param  无 

 * @retval 无

 */

 

/*主函数*/

int main(void)

{

   lcd12864_init();/*初始化lcd,同中断中的初始化一样,不做详细解释。*/

 

     delay(50,ms);//延时50毫秒

LED点阵单片机万年历 ---- snallie@tom.com 2013.01 ---- 特点: 0. 电路简洁,并口直接驱动,51最小系统+74hc259 0.0 采用单片机芯片定时器计时,无需RTC芯片(预留RTC芯片代码). 1. 阳历:年、月、日、时、分、秒、星期,阳历年限任意长 2. 农历:月日,天干地支,属相,24节气,农历年限范围2010年~2050年 3. 12/24时制显示。 4. 生日问候流动显示 5. 早晚安问候,励志名言显示,农历春节问候。 6. 误差微调/粗调 7. 声控/按键触发流动显示。在MCU的PIN12的下降沿触发。 8. 3键调整:按键M:菜单;按键+:上调;按键-:下调 9. 菜单列表: 1. 调整阳历年份 (00~99) 2. 调整阳历月份 (1~12) 3. 调整阳历日期 (1~31) 4. 调整小时 (0~23) 5. 调整分钟 (0~59) 6. 调整秒数 (0~59) 7. 调整阳历世纪(即年份高2位) (00~99) 8. 调整流动显示的分钟间隔(默认为10,即每隔10分钟流动显示一次全部时间及日历信息)(1~59) 9. 调整12/24时制(默认24时制) 10. 调整生日月份 (1~12) 11. 调整生日日期 (1~31) 12. 调整主屏秒点跳动的关闭或开启 13 调整主屏"星期点"跳动的关闭或开启,("星期点":用主屏的小时分钟的分隔点的二进制点表示星期) 14. 调整休眠模式的关闭或开启 15. 误差粗调 16. 误差微调,精度10ms,范围-1280ms~+1280ms 17. 版本号 10. 农历信息为自动计算得到,无需手工调整,星期信息同此。 11. 加入DS1302 RTC芯片时候,可掉电走时。 12. 一组闹时 13. 声控唤醒休眠模式或通过声控触发流动显示日历信息 14. 可在proteus下进行模拟测试(用MCU并口直接驱动时候,用51test2.DSN文件模拟)
LED点阵单片机万年历 ---- snallie@tom.com 2013.12 ---- 特点: 0. 电路简洁,并口直接驱动,51最小系统+74hc259 0.0 采用单片机芯片定时器计时,无需RTC芯片(预留RTC芯片代码). 1. 阳历:年、月、日、时、分、秒、星期,阳历年限任意长 2. 农历:月日,天干地支,属相,24节气,农历年限范围2010年~2099年 3. 12/24时制显示。 4. 生日问候流动显示 5. 早晚安问候,励志名言显示,农历春节问候。 6. 误差微调/粗调 7. 声控/按键触发流动显示。在MCU的PIN12的下降沿触发。 8. 3键调整:按键M:菜单;按键+:上调;按键-:下调 9. 菜单列表: 1. 调整阳历年份 (00~99) 2. 调整阳历月份 (1~12) 3. 调整阳历日期 (1~31) 4. 调整小时 (0~23) 5. 调整分钟 (0~59) 6. 调整秒数 (0~59) 7. 调整阳历世纪(即年份高2位) (00~99) 8. 调整流动显示的分钟间隔(默认为10,即每隔10分钟流动显示一次全部时间及日历信息)(1~59) 9. 调整12/24时制(默认24时制) 10. 调整生日月份 (1~12) 11. 调整生日日期 (1~31) 12. 调整主屏秒点跳动的关闭或开启 13 调整主屏"星期点"跳动的关闭或开启,("星期点":用主屏的小时分钟的分隔点的二进制点表示星期) 14. 调整休眠模式的关闭或开启 15. 闹钟小时设置(0~24,设为24时为关闭闹钟) 16. 闹钟分钟设置(0~60,设为60分为关闭闹钟) 17. 整点报时开关(报时为"嘟"的一声) 18. 误差粗调 19. 误差微调,精度10ms,范围-1280ms~+1280ms 20. 版本号(16进制形式) 21. 汉字形式显示的版本信息。 10. 农历信息为自动计算得到,无需手工调整,星期信息同此。 11. 加入DS1302 RTC芯片时候,可掉电走时。 12. 一组闹时 13. 声控唤醒休眠模式或通过声控触发流动显示日历信息 14. 可在proteus下进行模拟测试(用MCU并口直接驱动时候,用51test2.DSN文件模拟) 15. 改进扫描方式为隔行逐点扫描,比release1版本的屏幕显示亮度均匀。 16. 整点报时:在P3.3加入一个PNP的三极管驱动蜂鸣器发声。整点报时可通过菜单设置开启或者关闭合。 17. 农历传统节日的问候显示,共13个农历传统节日:春节, 元宵节, 春龙节, 浴佛节, 龙舟节, 七夕节, 中元节, 中秋节, 重阳节, 寒衣节, 腊八节, 小年, 除夕。 18. 显示农历大小月的信息。显示农历闰月的信息。 19. 在菜单的最后一项流动显示汉字形式的版本信息。 20. 流动显示时的时分秒数字改为大字体。 21. 并口列驱动的2个条件编译(二者只选其一):在进行开发时候采用 #define DEVELOPMENT 在直接生产产品使用 #define PRODUCTION 采用74hc595列驱动时的2个条件编译(二者只选其一):在进行开发时候采用 #define COLUMN_DRIVEN_BY_595_DEVELOPMENT 在直接生产产品使用 #define COLUMN_DRIVEN_BY_595_PRODUCTION 并口列驱动与采用74hc595列驱动只能二者只选其一,采用 #define COLUMN_DRIVEN_BY_595 进行条件编译控制,定义了COLUMN_DRIVEN_BY_595即为采用74hc595列驱动, 否则为并口列驱动。默认为并口列驱动。 22. 为了适应不同的proteus模拟测试环境,可采用不同的测试文件: 1. 51test2_no_buzzer.DSN 为并口列驱动且无蜂鸣器的测试文件。(若proteus不支持声卡,采用该文件) 2. 51test2.DSN 为并口列驱动且有蜂鸣器的测试文件。(若proteus支持声卡,采用该文件) 3. 51test2-259-595.DSN 为采用74hc595列驱动的测试文件,未提供蜂鸣器,可仿照1,2中的电路自行添加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值