- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE
PAGE27 / NUMPAGES27
单片机课程设计
题目:多功能定时装置
日期:2011年6月
设计要求:
1)选择LED或LCD显示,可显示年、月、日、时、分、秒、星期、农历日期、节日、节气等
(根据实际情况,选择部分或全部功能实现)
2)会使用实时钟芯片
3)选择蜂鸣器电路,实现闹钟设置和报警功能
4)选择按键功能,设计实现时钟校正功能
5)整点报时功能
6)上电或RESET后能自动显示当前时间(时:分:秒):首次上电复位显示0时0分0秒,以后每次RESET均显示正确的当前时间
附加实现功能:
1)可以显示0.1—100s的秒表,最小单位为0.1秒
2)通过按键控制秒表清零、暂停、继续、退出等功能
3)秒表可以分组存储(最多10组),批量显示
4)具有倒计时功能
所使用的硬件
ADUC848管脚图
ADUC848管脚图如图1所示。
图1 ADUC848管脚
2. 电源模块
电源模块原理图如图2所示。
图2 电源模块
3. 数码管
该模块原理如图3所示。
图3 数码管驱动电路
4. RS232串口
串口连接原理图如图4所示。
图4 RS232串口模块
5. 蜂鸣器
该模块原理图如图5所示。
图5 蜂鸣器
6. 按键输入
该模块原理如图6所示。
图6 按键模块
程序流程图
1)主流程图如图8所示:
当前时间是否等于闹钟设置时间
en=0x55?(无键)或en=0x80?(无效键)
开始
读取当前时间
读取键值,键值为en
开启闹钟
Y
N
Y
en=1?
en=2?
en=3?
en=4?
en=8?
en=9?
en=13?
en=14?
显示年月日星期
显示时分秒
秒表正计时子程序
秒表倒计时子程序
显示正计时的记录值
设置北京时间
关闹钟1
设置闹钟1
en=0?
设置闹钟2
继续当前显示
闹钟1开?
开闹钟1
en=13?
关闹钟2
闹钟2开?
开闹钟2
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
N
N
N
N
N
N
N
N
N
N
N
图8 主程序流程图
2)秒表正计时子程序流程图如图9所示:
正计时子程序
启动定时器
扫描键值,键值等于5?
扫描键值,键值等于6?
扫描键值,键值等于7?
返回
是否记录了十组值?
记录当前时间
显示当前时间
Y
N
Y
Y
Y
N
N
N
Y
图9 秒表正计时流程图
秒表倒计时子程序
输入时间初值
启动定时器
蜂鸣报警,关定时器
返回
扫描键值,键值等于5?
当前时间等于0?
Y
N
Y
N
显示当前时间
3)秒表倒计时子程序流程图如图10所示
图10 秒表倒计时流程图
程序
1. 主程序(miao_biao.c)如下:
#includeaduc848.h
#includekeypp.h
#includeiic.h
#define uchar unsigned char
#define uint unsigned int
unsigned char b[7]={45,59,11,2,7,6,11},clock1[2]={12,0},clock2[2]={12,1};
code unsigned char tab[]= {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x19,0x00};
//共阴数码管 0-9 显示
code unsignedchar tab2[]={0x39,0xff}; // 、全灭
void delay(unsigned int cnt); //延时子程序
unsigned char getkey1();
unsigned char getkey2(); //读键盘
void tim(void); //中断
void KeyDelay(unsigned int KeyJsTime); //键盘扫描延时
void display(uchar bit7,uchar bit6,uchar bit5,uchar bit4,
uchar bit3,uchar bit2,uchar bit1,uchar bit0); //显示子程序
void ReadTime(unsigned char TIME[7]); //DS1307读时间
void SetTime(unsigned char TIME[7]); //设置时间初值
void SwitchRTC(unsigned char SWITCH);
void iicdelay(unsigned int times);
void iicstart(void);
void ii
文档评论(0)