您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 西安交通大学电子系统设计c51单片机数字钟实验
n单片机数字钟实验报告姓名:高航班级:信息43学号:2140502058PART1实验目的在单片机c51实验板上编程实现2017年日历和实时时钟:1.时-分-秒(2位-2位-2位)显示;2.可通过按键置入时间值(参照电子表设置时间工作模式);3.可通过按键控制在LED上从右向左滚动显示年_月_日3次,如:2013_01_20空空2013_01_20;4.实现每日闹铃提醒功能,闹铃时间可用按键设置。闹铃采用提示音表示;5.实现秒表功能;6.实现定时器功能(预置定时时间,按键启动,倒计时,计到0响提示音;7.设计实现音乐提示音;8.能够在短时间按要求修改。PART2实验流程图1.总流程图2.设置时间/日期/闹钟模块dis()3.音乐模块music()PART3实验代码代码使用资源:ProgramSize:data=102.0xdata=0code=2420#includereg51.h#includeabsacc.h#defineuintunsignedint#defineucharunsignedcharuchart0h,t0l,timeaaa;ucharcodeFREQH[]={0x01,//0的时候没有音符0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,//低音12345670xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//高音2345670xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};//超高音1234567ucharcodeFREQL[]={0x01,//0的时候没有音符0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,//低音12345670x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//高音2345670x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};//超高音1234567ucharcodetiger[]={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};sbitaa=P1^6;unsignedchartime[]={0,0,0x08,0,0,0x08,0,0};//时间显示数组unsignedchartimeZ[]={0,0,0x08,0,0,0x08,0,0};//闹钟显示数组unsignedchartimeD[]={0,0,0x08,0,0,0x08,0,0};//倒计时显示数组unsignedchartimeN[]={0,0,0x08,0,0,0x08,0,0};//秒表显示数组unsignedchardateset[]={0,0,0x08,0,0,0x08,0,0};//riqishezhi显示数组unsignedcharcodenum[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数字unsignedchardate[]={0,0,0,0,0,0,0,0,0,0,0,0,0x08,0,0,0x08,0,0,0,0,0,0,0,0};//日期显示unsignedcharsec=0,min=0,hour=0,day=24,mon=10,j,t,a,p;intyear=2017;unsignedcharsecZ=0,minZ=1,hourZ=0;unsignedcharsecD,minD,hourD;unsignedchartsec,secN,minN,tsecm;*****************************LED显示延时函数********************************voiddelay(unsignedcharp){unsignedchari,j;for(;p0;p--)for(i=5;i0;i--)for(j=120;j0;j--);}*******************************获取按键函数***********************************unsignedchargetkeycode(void){unsignedcharline=0x00;/*行码*/unsignedcharcol=0x00;/*列码*/unsignedcharscancode=0x01;/*行扫描码*/unsignedcharkeycode;/*键号*/XBYTE[0x8000]=0xff;col=XBYTE[0x8000]&0x0f;/*从列端口读入四位列码*/if(col==0x00)keycode=0x00;else{while((scancode&0x0f)!=0)/*取scancode的低四位,没变为全0,循环*/{line=scancode;/*行号*/XBYTE[0x8000]=scancode;/*给行赋扫描码,第一行为0x01*/if((XBYTE[0x8000]&0x0f)==col)/*检测按键所在的行跳出循环*/break;scancode=scancode1;/*行扫描码左移一位,转下一行*/}col=col4;/*把列码移到高四位*/keycode=col|line;}returnkeycode;}*******************************时间显示函数***********************************voidtimedis(){XBYTE[0X9000]=0;for(j=0;j8;j++){time[0]=num[sec%10];time[1]=num[sec/10];time[3]=num[min%10];time[4]=num[min/10];time[6]=num[hour%10];time[7]=num[hour/10];delay(1);XBYTE[0X8000]=0x01j;XBYTE[0X9000]=time[j];}}//timeshow*******************************闹钟显示函数***********************************voidtimedisZ(){XBYTE[0X9000]=0;for(j=0;j8;j++){timeZ[0]=num[secZ%10];timeZ[1]=num[secZ/10];timeZ[3]=num[minZ%10];timeZ[4]=num[minZ/10];timeZ[6]=num[hourZ%10];timeZ[7]=num[hourZ/10];delay(1);XBYTE[0X8000]=0x01j;XBYTE[0X9000]=timeZ[j];}}*******************************秒表显示函数***********************************voidtimedisN(){while(1){for(;tsec==20;){tsec=0;secN++;if(secN==60){minN++;secN=0;}}if(getkeycode()==0x84)break;XBYTE[0X9000]=0;for(j=0;j8;j++){timeN[0]=num[tsec%10];timeN[1]=num[tsec/10];timeN[3]=num[secN%10];timeN[4]=num[secN/10];timeN[6]=num[minN%10];timeN[7]=num[minN/10];delay(1);XBYTE[0X8000]=0x01j;XBYTE[0X9000]=timeN[j];//if(getkeycode()==0x84)break;}}}//秒表*****************************倒计时显示函数***********************************voidtimedisD(){while(1){if(minD==0&&secD==0)break;XBYTE[0X9000]=0;for(j=0;j8;j++){timeD[0]=num[secD%10];timeD[1]=num[secD/10];timeD[3]=num[minD%10];timeD[4]=num[minD/10];timeD[6]=num[hourD%10];timeD[7]=num[hourD/10];delay(1);XBYTE[0X8000]=0x01j;XBYTE[0X9000]=timeD[j];}}}*******************************日期显示函数***********************************voiddatedis(){unsignedchari,j,k;for(i=0;i17;i++){for(k=0;k20;k++)for(j=0;j8;j++){date[13]=num[day/10];date[14]=num[day%10];date[16]=num[mon/10];date[17]=num[mon%10];date[11]=num[year%10];date[10]=num[(year%100)/10];date[9]=num[(year%1000)/100];date[8]=num[year/1000];XBYTE[0X8000]=0x80j;XBYTE[0X9000]=date[i+j];delay(1);}}}//dateshow//downtozerobibii****************************年月日设置显示函数*******************************voiddatedis1(){XBYTE[0X9000]=0;for(j=0;j8;j++){dateset[6]=num[year%10];dateset[7]=num[(year%100)/10];dateset[3]=num[mon%10];dateset[4]=num[mon/10];dateset[0]=num[day%10];dateset[1]=num[day/10];delay(1);XBYTE[0X8000]=0x01j;XBYTE[0X9000]=dateset[j];}}*******************************时间设置函数***********************************voidset(){unsignedchari=0;{for(i=0;i3;){timedis();if(getkeycode()==0x11){delay(100);i++;}if(getkeycode()==0x21){delay(100);switch(i){case0:sec++;if(sec==60){sec=0;}break;case1:min++;if(min==60){min=0;}break;case2:hour++;if(hour==24){hour=0;}break;default:break;}}}}}//时间设置//timeset**************************
本文标题:西安交通大学电子系统设计c51单片机数字钟实验
链接地址:https://www.777doc.com/doc-7413212 .html