- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机课程设计
题目:多功能定时装置
日期: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所示:
图8 主程序流程图
2)秒表正计时子程序流程图如图9所示:
图9 秒表正计时流程图
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 iicstop(void);
void iicack(void);
bit iicreadack();
void iicnack();
void iicwriteda(unsigned char da);
unsigned char iicreadda();
void iicdelay(unsigned int t);
uchar dis_num_h; //显示记录数据的组别十位
uchar dis_num_l; //显示记录数据的组别个位
uchar dis_min_h; //要显示的分的十位;
uchar dis_min_l; //要显示的分的个位;
uchar dis_sec_h; //要显示的秒的十位;
uchar dis_sec_l; //要显示的秒的个位;
uchar dis_dsec; //要显示的0.1秒;
uchar min=0x00;
uchar sec=0x00;
uchar dsec=0x00;
uchar en,i,clocken1=0,clocken2=0;
main()
{
unsigned char quzhi,x
文档评论(0)