




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
n单片机数字钟实验报告姓名:高航班级:信息43学号:PART 1 实验目的在单片机c51实验板上编程实现2017年日历和实时时钟: 1.时-分-秒(2位-2位-2位)显示; 2.可通过按键置入时间值(参照电子表设置时间工作模式);3.可通过按键控制在LED上从右向左滚动显示年_月_ 日3次,如:2013_01_20空空2013_01_20 ;4.实现每日闹铃提醒功能,闹铃时间可用按键设置。闹铃采用提示音表示; 5.实现秒表功能; 6.实现定时器功能(预置定时时间,按键启动,倒计时,计到0响提示音; 7.设计实现音乐提示音; 8.能够在短时间按要求修改。PART 2 实验流程图1. 总流程图 2. 设置时间/日期/闹钟模块dis()3. 音乐模块music()PART 3 实验代码代码使用资源:Program Size: data=102.0 xdata=0 code=2420#include#include#define uint unsigned int#define uchar unsigned charuchar t0h,t0l,timeaaa;uchar code FREQH = 0x01, /0的时候没有音符 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8, /低音 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,/1,2,3,4,5,6,7,i 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, /高音 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF; /超高音 uchar code FREQL = 0x01, /0的时候没有音符 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6, /低音 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, /1,2,3,4,5,6,7,i 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, /高音 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16; /超高音 uchar code tiger= 3,2,2, 6,2,2, 7,2,2, 5,2,2, 3,2,2, 6,2,2, 7,2,2, 5,2,2, 7,2,2, 1,3,2, 2,3,4, 7,2,2, 1,3,2, 2,3,4, 2,3,1, 3,3,1, 2,3,1, 1,3,1, 7,2,2, 5,2,2, 2,3,1, 3,3,1, 2,3,1, 1,3,1, 7,2,2, 5,2,2, 6,2,2, 2,2,2, 5,2,4, 6,2,2, 2,2,2, 5,2,4, 0,0,0; sbit aa=P16;unsigned char time=0,0,0x08,0,0,0x08,0,0 ;/时间显示数组unsigned char timeZ=0,0,0x08,0,0,0x08,0,0 ;/闹钟显示数组unsigned char timeD=0,0,0x08,0,0,0x08,0,0 ;/倒计时显示数组unsigned char timeN=0,0,0x08,0,0,0x08,0,0 ;/秒表显示数组unsigned char dateset=0,0,0x08,0,0,0x08,0,0 ;/riqishezhi显示数组unsigned char code num=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/数字unsigned char date=0,0,0,0,0,0,0,0,0,0,0,0,0x08,0,0,0x08,0,0,0,0,0,0,0,0;/日期显示unsigned char sec=0,min=0,hour=0,day=24,mon=10,j,t,a,p;int year=2017;unsigned char secZ=0,minZ=1,hourZ=0;unsigned char secD,minD,hourD;unsigned char tsec,secN,minN,tsecm;*LED显示延时函数*void delay(unsigned char p)unsigned char i,j; for(;p0;p-) for(i=5;i0;i-) for(j=120;j0;j-);*获取按键函数*unsigned char getkeycode(void) unsigned char line=0x00; /*行码*/ unsigned char col=0x00; /*列码*/ unsigned char scancode=0x01; /*行扫描码*/ unsigned char keycode; /*键号*/ XBYTE0x8000=0xff; col=XBYTE0x8000&0x0f; /*从列端口读入四位列码*/ if (col=0x00) keycode=0x00; else while(scancode&0x0f)!=0) /*取scancode的低四位,没变为全0,循环*/ line=scancode; /*行号*/ XBYTE0x8000=scancode; /*给行赋扫描码,第一行为0x01*/ if(XBYTE0x8000&0x0f)=col) /*检测按键所在的行跳出循环*/break; scancode=scancode1; /*行扫描码左移一位,转下一行*/ col=col4; /*把列码移到高四位*/ keycode=col|line; return keycode;*时间显示函数*void timedis() XBYTE0X9000=0; for (j=0;j8;j+)time0=numsec%10; time1=numsec/10; time3=nummin%10; time4=nummin/10; time6=numhour%10; time7=numhour/10;delay(1);XBYTE0X8000 =0x01j; XBYTE0X9000 =timej; /time show *闹钟显示函数*void timedisZ() XBYTE0X9000=0; for (j=0;j8;j+)timeZ0=numsecZ%10; timeZ1=numsecZ/10; timeZ3=numminZ%10; timeZ4=numminZ/10; timeZ6=numhourZ%10; timeZ7=numhourZ/10;delay(1);XBYTE0X8000 =0x01j; XBYTE0X9000 =timeZj; *秒表显示函数*void timedisN() while(1) for(;tsec=20;)tsec=0;secN+; if(secN=60)minN+;secN=0; if(getkeycode()=0x84)break; XBYTE0X9000=0; for (j=0;j8;j+)timeN0=numtsec%10;timeN1=numtsec/10;timeN3=numsecN%10;timeN4=numsecN/10; timeN6=numminN%10; timeN7=numminN/10;delay(1);XBYTE0X8000 =0x01j; XBYTE0X9000 =timeNj;/if(getkeycode()=0x84)break; /秒表*倒计时显示函数*void timedisD()while(1) if(minD=0&secD=0)break; XBYTE0X9000=0; for (j=0;j8;j+)timeD0=numsecD%10; timeD1=numsecD/10; timeD3=numminD%10; timeD4=numminD/10; timeD6=numhourD%10; timeD7=numhourD/10;delay(1);XBYTE0X8000 =0x01j; XBYTE0X9000 =timeDj; *日期显示函数*void datedis()unsigned char i,j,k;for (i=0;i17;i+) for(k=0;k20;k+)for (j=0;jj;XBYTE0X9000 = datei+j;delay(1); /date show/downto zero bibii*年月日设置显示函数*void datedis1() XBYTE0X9000=0; for (j=0;j8;j+)dateset6=numyear%10; dateset7=num(year%100)/10; dateset3=nummon%10; dateset4=nummon/10; dateset0=numday%10; dateset1=numday/10;delay(1);XBYTE0X8000 =0x01j; XBYTE0X9000 =datesetj; *时间设置函数*void set()unsigned char i=0; for(i=0;i3;)timedis(); if (getkeycode()=0x11) delay(100);i+; if (getkeycode()=0x21) delay(100); switch (i) case 0: sec+;if(sec=60)sec=0;break; case 1: min+;if(min=60)min=0;break; case 2: hour+;if(hour=24)hour=0;break; default: break; /时间设置 /timeset*闹钟设置函数*void setZ()unsigned char i=0; for(i=0;i3;) timedisZ(); if (getkeycode()=0x11) delay(100);i+;if (getkeycode()=0x21) delay(100);switch (i)case 0: secZ+;if(secZ=60)secZ=0;break;case 1: minZ+;if(minZ=60)minZ=0;break; case 2: hourZ+;if(hourZ=24)hourZ=0;break; default: break; /alarm set*日期设置函数*void setdate()unsigned char i=0; for(i=0;i=30)day=1;mon+;if(year%4!=0&mon=2&day=29) day=1;mon+; void reset (void) t=0; TMOD=0x01;/模式选择 TL0=0xb0; TH0=0x3c;/ TH1=(65536-9216)/256; TL1=(65536-9216)%256; PT0=0; /定时器优先 ET0=1; /定时器中断允许 TR0=1;/开始定时 EA=1;/cpu允许stop /time go on*定时器1中断函数*void t0int() interrupt 3 TR1 = 0; /先关闭T0 aa = aa; /输出方波, 发音 TH1 = t0h; /下次的中断时间, 这个时间, 控制音调高低 TL1 = t0l; TR1 = 1; /启动T0void delayaaa(uchar t) uchar a; while(t-) /四重循环, 共延时t个1/4拍 /* for(c=193;c0;c-) for(b=114;b0;b-) /114*/ for(a=10;a0;a-)timedis(); /延时期间, 可进入T0中断去发音 /timedis(); 没用 TR1 = 0; /关闭T0, 停止发音void singachar() TR1=0; TH1 = t0h; /控制音调 TL1 = t0l; TR1 = 1; /启动T0, 由T0输出方波去发音 delayaaa(timeaaa);/控制时间长度即 节拍void song(uchar *str) uchar k,i; i = 0; timeaaa=1; while(timeaaa) k = stri + 7 * (stri + 1);/第i个是音符, 第i+1个是第几个八度 t0h = FREQHk; /从数据表中读出频率数值 t0l = FREQLk; /实际上, 是定时的时间长度 timeaaa = stri + 2; /读出时间长度数值 节拍时间 i+= 3; singachar();if(getkeycode()=0x22)break;/stop noise void music(void) TMOD = 0x01; /置T0定时工作方式1 ET1= 1; /开T0中断 EA = 1; /开CPU中断 while(1) song(tiger); aa=1; if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单神经病的临床护理
- 2025年商业写字楼租赁合同模板
- 浙江国企招聘2025台州市城市建设投资发展集团有限公司所属企业招聘13人笔试参考题库附带答案详解
- 陕西一年级上试卷及答案
- 肇庆市实验中学高中历史二:第课战后资本主义经济的调整高效课堂教学设计
- 2025年中国勾环市场调查研究报告
- 纺织品及针织品售后服务考核试卷
- 木材与竹材的干燥技术对制浆影响考核试卷
- 石油开采与全球能源供需考核试卷
- 腈纶纤维在风力发电叶片的应用考核试卷
- 专家授课合同协议
- 护理临床带教老师培训
- 艾滋病宣传员知识培训
- 2024-2025学年广东省深圳市南山区四年级(上)期末数学试卷
- 风电项目合作框架协议
- 2025-2030中国具身智能行业研发创新策略与未来前景展望研究报告
- 2025年小学科学教材教法考试模拟测试卷及答案
- 《论语》(子路篇第十三)原文及翻译
- 学前儿童情感教育的家庭实践策略
- 美好家园《8未来城市》课件 -2024-2025学年浙人美版(2024)初中美术七年级下册
- 解析:2024年广东省深圳市龙岗区中考二模物理试题(解析版)
评论
0/150
提交评论