毕业设计(论文)-基于MCU的多功能数字时钟设计.doc_第1页
毕业设计(论文)-基于MCU的多功能数字时钟设计.doc_第2页
毕业设计(论文)-基于MCU的多功能数字时钟设计.doc_第3页
毕业设计(论文)-基于MCU的多功能数字时钟设计.doc_第4页
毕业设计(论文)-基于MCU的多功能数字时钟设计.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于 mcu 的多功能数字时钟设计 based on mcu multi-function digital clock design 20122012 届届 电气工程电气工程 系系 专专 业业 电子信息工程电子信息工程 学学 号号 学生姓名学生姓名 指导教师指导教师 完成日期完成日期 20122012 年年 5 5 月月 2525 日日 毕业设计成绩单毕业设计成绩单 学生姓名学号班级专业电子信息工程 毕业设计题目基于 mcu 的多功能数字时钟设计 指导教师姓名李磊 指导教师职称助教 评 定 成 绩 指导教师 得分 评阅人得分 答辩小 组组长 得分 成绩: 院长(主任) 签字: 年 月 日 毕业设计任务书毕业设计任务书 题 目 基于 mcu 的多功能数字时钟设计 学生姓名学号班级专业电子信息工程 承担指导任务单位电气工程系 导师 姓名 李磊 导师 职称 助教 一、主要内容 单片机 stc89 系列实现时间钟表功能同时可指定多个闹钟点,驱动闹钟系统动作。 二、基本要求 1单片机完成可编程控制逻辑。驱动 lcd,可实现电子钟功能。 2、可实现调整钟表的功能。 3使用 keil c 编程。实现相关逻辑控制。 4. 电路原理图设计,protel 印刷电路图设计。 5. 提出系统设计框图,提出相应的解决方案。 6. 需单片机和芯片,开发电路板以相关传感器,价格 #include /#include #include“ds1302.h“ #include“18b20.h“ #include“lcd.h“ #define uchar unsigned char #define uint unsigned int bit playbit,recbit;/定义两个位变量,放音和录音位 sbit k4=p33; / “分钟“ 调整 sbit k5=p32; / “小时“ 调整“ sbit k6=p31; / “日“ 调整 sbit k7=p30; / “月“ 调整 sbit k8=p34; / “星期“ 调整 /定义放音命令,定义常量/ #define isdpowerup 0x20 /isd4004 上电 #define isdstop 0x10 /isd4004 下电 #define operstop 0x30 /isd4004 停止当前操作 #define playset 0xe0 /isd4004 从指定地址开始放音 #define playcur 0xf0 /isd4004 从当前地址开始放音 #define recset 0xa0 /isd4004 从指定地址开始录音 #define reccur 0xb0 /isd4004 从当前地址开始录音 sbit ss=p27; /low is actively sbit mosi=p26; sbit miso=p25; sbit sclk1=p14; sbit k1=p35; /放音 s17 sbit k2=p36; /录音 s18 石家庄铁道大学四方学院毕业设计 37 uchar playcout,reccout; /放音和录音次数。 uint counter=0; /计数用变量 uchar tem_set_time=0; /温度和时钟读取一次时间间隔 uchar clk_set_time=0; /温度和时钟读取一次时间间隔 uchar year=0,week=0,month=0, day=0, hour=0, min=0,sec=0; uchar year_h=0,month_h=0, day_h=0, hour_h=0, min_h=0,sec_h=0; /日期高位 uchar year_l=0,month_l=0, day_l=0, hour_l=0, min_l=0,sec_l=0; /日期低位 void delaymss(uchar ms); /*/ /函数名: timer0 中断处理函数 /函数功能: timer0 中断时间到将进入此函数 /参数: /*/ void delaymss(uchar ms) uchar j; while(ms-) for(j = 0; j y) else mosi=0; 石家庄铁道大学四方学院毕业设计 38 _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); /发送结束 ss=1;/上电结束 delaymss(50); ss=0; mosi=0;/发送地址 sclk1=0; for(y=0;yy) else mosi=0; _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); /发送地址结束 mosi=0;/放音 sclk1=0; for(y=0;yy) else mosi=0; 石家庄铁道大学四方学院毕业设计 39 _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); ss=1; ss=0; mosi=0;/放音 sclk1=0; for(y=0;yy) else mosi=0; _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); ss=1; /lu 音部分子程序,地址由 addr 决定/ void rec(addr) uint y; ss=0; mosi=0;/发送开始 sclk1=0; 石家庄铁道大学四方学院毕业设计 40 for(y=0;yy) else mosi=0; _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); /发送结束 ss=1;/上电结束 delaymss(50); ss=0; mosi=0;/发送开始 sclk1=0; for(y=0;yy) else mosi=0; _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); /发送结束 ss=1;/上电结束 delaymss(50); 石家庄铁道大学四方学院毕业设计 41 delaymss(50); ss=0; mosi=0;/发送地址 sclk1=0; for(y=0;yy) else mosi=0; _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); /发送地址结束 mosi=0; sclk1=0; for(y=0;yy) else mosi=0; _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); ss=1; 石家庄铁道大学四方学院毕业设计 42 ss=0; mosi=0; sclk1=0; for(y=0;yy) else mosi=0; _nop_(); _nop_(); _nop_(); sclk1=1; _nop_(); _nop_(); _nop_(); ss=1; / void timer0() interrupt 1 th0=0x1c; / tl0=0x1c; / counter+; if(counter4000) /计时 1 秒的时间 tem_set_time+; clk_set_time+; 石家庄铁道大学四方学院毕业设计 43 counter=0; if(hour=10 playcout=0x01; if(hour=11 playcout=0x01; /*/ /函数名: bcdtoint( uchar bcd ) /函数功能: 对从芯片中读取的时间数据由 bcd 码调整为正常的十进制 /参数: bcd:需要转化的 bcd 格式数; changed_data:转化完成的数值 /*/ uchar bcdtoint( uchar bcd ) uchar changed_data=0; if( bcd15 ) changed_data=bcd-(bcd/16)*6; return ( changed_data ); /*/ /函数名: timedatadispose( ) /函数功能: 对从芯片中读取的时间数据进行调整 /参数: /*/ void timedatadispose( ) 石家庄铁道大学四方学院毕业设计 44 year= bcdtoint(time_date_buf6); week=time_date_buf5; month=bcdtoint(time_date_buf4); day= bcdtoint(time_date_buf3); / 秒,分,时,日,月, 星期,年,控制 hour=bcdtoint(time_date_buf2); min= bcdtoint(time_date_buf1); / 取出对应的时间变量 sec= bcdtoint(time_date_buf0); year_h= year/10+0x30; year_l=year%10+0x30; month_h= month/10+0x30; month_l=month%10+0x30; day_h= day/10+0x30; day_l=day%10+0x30; hour_h=hour/10+0x30; hour_l=hour%10+0x30; min_h= min/10+0x30; min_l=min%10+0x30; sec_h= sec/10+0x30; sec_l=sec%10+0x30; playsound() /录放音子函数 if(playbit) playbit=0; switch(playcout) case 0x01:play(0x00);break; /此处第一段音乐的开始地址为 0x00,到 0x100 地址结束,约 为 51 秒。 if(recbit) recbit=0; switch(reccout) case 0x01:rec(0x00);break; 石家庄铁道大学四方学院毕业设计 45 /*/ /函数名: 主函数 /函数功能: 通过按键控制液晶屏显示内容 /参数: /*/ void main( void ) uchar hour1=0,min1=0; initlcd(); /液晶初始化 burstwrite1302( time_init_buf ); /时钟初始化芯片时间 tmod=0x02; / 定时器定时模式设为 1,自动重装模式 th0=0xff; / 定时器高位 tl0=0xf0; / 定时器低位 tr0=1; / 定时器 0 开始计时 et0=1; / 定时器 0 打开 ea=1; / 开总中断 while(1) hour1=hour; min1=min; if(!k1) delaymss(10); if(!k1) playbit=1; playcout+; if(playcout2) playcout=0; if(!k2) 石家庄铁道大学四方学院毕业设计 46 delaymss(100); if(!k2) recbit=1; reccout+; if(reccout2) reccout=0; if(k5=0) /“小时“ 调整 delayms( 20 ); if(k5=0) while( k5=0 ); time_init_buf2+; if( time_init_buf2 23 ) time_init_buf2=0x00; burstwrite1302( time_init_buf ); /初始化芯片时间 writeadressdata(0x80,0x04); /启动芯片,开始时间正常运行 if(k4=0) / “分钟“ 调整 delayms( 20 ); if(k4=0) while( k4=0 ); time_init_buf1+; if( time_init_buf159 ) time_init_buf1=0x00; burstwrite1302( time_init_buf ); /初始化芯片时间 writeadressdata(0x80,0x04); /启动芯片,开始时间正常运行 石家庄铁道大学四方学院毕业设计 47 if(k6=0) / “日“ 调整 delayms( 20 ); if(k6=0) while( k6=0 ); time_init_buf3+; if( time_init_buf331 ) time_init_buf3=0x01; burstwrite1302( time_init_buf ); /初始化芯片时间 writeadressdata(0x80,0x04); /启动芯片,开始时间正常运行 if(k7=0) / “月“ 调整 delayms( 20 ); if(k7=0) while( k7=0 ); time_init_buf4+; if( time_init_buf412 ) time_init_buf4=0x01; burstwrite1302( time_init_buf ); /初始化芯片时间 writeadressdata(0x80,0x04); /启动芯片,开始时间正常运行 if( (clk_set_time0) ) /设定时间到,进行一次时间的读取 ea=0; clk_set_time=0; /读取一次时间 burstread1302( time_date_buf ); /读取时间,存到 date_buf7 timedatadispose(); /对读取的时间数据进行处理 writecommandlcm(0x01,0); /清屏,准备显示新数值 ea=1; 石家庄铁道大学四方学院毕业设计 48 displayonechar( 11 , 0, 0x32 ); / “2“ displayonechar( 12 , 0, 0x30 ); / “0“ displayonechar( 13 , 0, year_h ); / “1“ displayonechar( 14 , 0, year_l ); / “2“ /displayonechar( 4 , 0, 0x20 ); / 空格 displayonechar( 0 , 1, month_h ); / 月的“

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论