单片机实验报告考试_第1页
单片机实验报告考试_第2页
单片机实验报告考试_第3页
单片机实验报告考试_第4页
单片机实验报告考试_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

实验题目:电子表程序的设计与仿真实验目的:学会掌握用C语言编写电子表程序和利用proteus软件画出硬件电路图进行程序仿真,培养独立的程序编写流程思路和程序调试能力。实验要求:利用C语言编写一个电子表程序,而且具有能设定时间的功能,用proteus软件将硬件电路图画出来,并仿真出来显示在LED显示屏上。实验原理:利用8251中的定时器/计数器定时50000us即50ms,每50ms计数一次,一共计二十次即1s,秒位往分位进一,秒位清零。当分位<59时,分位依次加一,加到59时往时位进一,分位清零。当时位<23时时位依次加一,再计一次时位清零,再从零开始计数。程序中加一中断服务程序,先对定时计数器关中断,设置定时初值65535-5000,然后开中断,计数定时器开始工作。当计到二十时,正好到一秒,秒位进位,依次循环,并显示出来。定义初始化送代码实验流程图:定义初始化送代码S清零S清零YNHour=0显示h,m,s延时返回取位送P3口P0口输出数据Hour+1Hour<23Y延时1000usTR0=0,s=0H=0Ym+1,s=0Ym=0M是否<59Y延时1000us禁止T0工作按键是否释放NYN延时1000us启动T0是否有键按下显示时,分,秒开总中断及T0中断对计数器定时器初始化YNHour=0显示h,m,s延时返回取位送P3口P0口输出数据Hour+1Hour<23Y延时1000usTR0=0,s=0H=0Ym+1,s=0Ym=0M是否<59Y延时1000us禁止T0工作按键是否释放NYN延时1000us启动T0是否有键按下显示时,分,秒开总中断及T0中断对计数器定时器初始化实验软件程序:#include<reg51.h>sbitkey_start=P1^0;sbitkey_m=P1^1;sbitkey_h=P1^2;codeunsignedcharsag[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};//0123456789codeunsignedcharbitcode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcount=20;unsignedcharhour=0,minute=0,second=0;unsignedintintdata=65536-50000;//定时常数(按50ms计算T=(65535-intdata)Tcy,Tcy=1uS)voiddisplay(unsignedcharh,unsignedcharm,unsignedchars);voiddelay(unsignedintn);voidmain(void){ bitk_s=1,k_m=1,k_h=1; TMOD=0x01; //定时器0工作在定时方式 TH0=intdata/256;//商3C(intdata=C3B0) TL0=intdata%256;//余数B0 IE=0x82; //开中断(总中断及T0中断) TR0=1; //启动T0 while(1) { display(hour,minute,second); k_s=key_start; k_m=key_m; k_h=key_h; if(k_s==0||k_m==0||k_h==0)//判断按键是否按下 { if(k_s==0) { //delay(1000);//去抖 TR0=1;//启动T0 } do { display(hour,minute,second); } while(key_start==0);/判断按键是否释放 if(k_m==0) { //delay(1000); TR0=0; //禁止T0工作 second=0;//初始状态秒位为0 if(minute<59) minute=minute+1; else minute=0; } do { display(hour,minute,second); } while(key_m==0); if(k_h==0) { //delay(1000); TR0=0;//禁止TR0工作 second=0; if(hour<23) hour=hour+1; else hour=0; } do { display(hour,minute,second); } while(key_h==0); } }}voidt_0(void)interrupt1using2//1号中断(定时器0),使用2号寄存器组{ IE=0x00; //关中断 TH0=0x3c;//intdata/256; TL0=0xb0;//intdata%256,置定时初值 IE=0x82; //开中断 count=count-1; if(count==0)//1秒到后计时 { count=20; if(second<59) { second=second+1;//秒依次加一 } else if(minute<59) { second=0;//秒位清零,分位进位 minute=minute+1; } else if(hour<23) { minute=0; hour=hour+1;//分位清零,时位进位 } else hour=0; } }voiddisplay(unsignedcharh,unsignedcharm,unsignedchars) //显示{unsignedintoutdata[8];unsignedchari;outdata[0]=(h/10)%10;//取出高位(整形会将b/10的小数位丢掉)outdata[1]=h%10; //取出低位 outdata[2]=10; outdata[3]=(m/10)%10;//取出“m”的高位outdata[4]=m%10;//取出“m”的低位 outdata[5]=10; outdata[6]=(s/10)%10; outdata[7]=s%10; for(i=0;i<8;i++) { P3=bitcode[i];//P3口输出位地址 switch(outdata[i]){case0:P0=sag[0];break;//P0口输出显示数据case1:P0=sag[1];break;case2:P0=sag[2];break;case3:P0=sag[3];break;case4:P0=sag[4];break;case5:P0=sag[5];break;case6:P0=sag[6];break;case7:P0=sag[7];break;case8:P0=sag[8];break;case9:P0=sag[9];break; case10:P0=sag[10];break;} delay(50); }}voiddelay(unsignedintn)//延时{while(n--); }实验硬件电路原理图:实验调用结果:用keil软件编译修改程序,编译无误。用protues作出硬件电路图,将程序导入反正电路中进行仿真。点击播放,将开关start闭合,显示屏开始显示计数,每秒变化一次,当到59S时向分位进一,秒位变0.再将开关minute闭合,分位加一,闭合一次分为进一,秒位清零。然后将开关hour闭合,时位加一,闭合一次时位上加一,秒位也为0。实验总结:实验中用主要到的8251的定时器/计数器T0,一共用到十一个显示代码“0—9”和“—”还有八个数码管的位地址。用定时器定时50000us即50ms,计数20次,总共是一秒。计数从二十减到零,秒位加以,但秒位加到59后向分位进一。当时间到23:59:59秒时,分位变0,想上进一时位也变0,然后秒位进一变0,从0开始计数。在程序开始时为了去抖动要加一个延时判断,还要判断一下按键是否释放。试验中用P0口输出显示数

温馨提示

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

评论

0/150

提交评论