您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于简单IO口的8LED显示电子码表设计
基于简单IO口的8LED显示电子码表设计实验目的掌握Proteus对MCS51单片机的仿真学习汇编语言以及C语言在51编程上的使用掌握使用Keil软件对51单片机编程实验设备硬件:微机(WindowsXP)软件:Proteus7.4sp3,KeiluVersion3实验内容基本要求:1设计秒表功能,精度为0。01秒。2可同时记录和存储10个秒表数据。(连续记录并显示已存储记录数)3秒表记录数据查询和清除功能。发挥部分:1可根据速度误差用D/A转换器输出DC信号。2可设定速度偏差范围,当超范围时通过蜂鸣器能发出提示音。3有静音功能动态显示格式:自定实验设计系统主程序流程图实验原理图记一个数可以让其暂停!第一次记数读取第二次记数读取第三次记数读取第四次记数读取第五次记数读取第六次记数读取第七次记数读取第八次记数读取第九次记数读取实验步骤:有PROTEUS参与的单片机系统开发过程一般分为四步:1)在PROTEUS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。2)进行单片机系统源程序设计、编辑、汇编编译、调试,最后生成目标代码文件。3)在PROTEUS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。4)仿真正确后,制作实际单片机系统电路,并将目标代码文件下载到实际单片机中运行、调试,直至运行成功。实验代码:#includeAT89X51.h#defineucharunsignedchar#defineuintunsignedintunsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};uchara,tt,key1n,key3n,key2n,tt1,tt2,tt3,tt4,tt5,tt6,tt7,tt8,q,key5n;charcodetab1[4][4]={{1,4,7,10},{2,5,8,0},{3,6,9,11},{12,13,14,15}};charshu1[8]={0,0,0,1,0,0,0,0};charshu[10][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};voiddelay(intz)//显示延时{uchark,j;for(k=z;k0;k--)for(j=125;j0;j--);}display()//显示函数{unsignedchari;P0=0;P1=tab[key5n];delay(11);P1=0xff;P0=P0+1;for(i=1;i8;i++)//显示时间{P1=tab[shu[key3n][i]];delay(11);P1=0xff;P0=P0+1;}}keys(){unsignedcharhang,lie,key;if(P3!=0x0f)delay(5);if(P3!=0x0f){switch(P3&0x0f){case0x0e:lie=0;break;case0x0d:lie=1;break;case0x0b:lie=2;break;case7:lie=3;break;}P3=0xf0;P3=0xf0;switch(P3&0xf0){case0xe0:hang=0;break;case0xd0:hang=1;break;case0xb0:hang=2;break;case0x70:hang=3;break;}P3=0x0f;while(P3!=0x0f){P2_1=1;if(key1n==0&key2n==0&key3n==0)display();}P2_1=0;key=tab1[hang][lie];}elsekey=20;return(key);}charkbscan()//键盘扫描{intkey;key=keys();if(key==15){key3n++;if(key3n==10){key3n=0;TR1=0;}}if(key==11){TR1=~TR1;}if(TR1==0)if(key10)key3n=key;}zhuanhuan(){shu1[7]=tt;shu1[6]=tt1;shu1[5]=tt2;shu1[4]=tt3;shu1[3]=tt4;shu1[2]=tt5;shu1[0]=key3n;shu1[1]=key3n;if(key5nkey3n)key5n=key3n;if(TR1==1)for(q=0;q8;q++)//显示时间{shu[key3n][q]=shu1[q];}}main(){TMOD=0x10;TH1=0xFF;TL1=0x0E0;EA=1;ET1=1;TR1=0;P1=0Xff;P3=0X0F;while(1){kbscan();display();zhuanhuan();}}voidtimer1()interrupt3{TH1=0x0D8;TL1=0x0F0;tt++;if(tt==10){tt=0;tt1++;}if(tt1==10){tt1=0;tt2++;}if(tt2==10){tt2=0;tt3++;}if(tt3==10){tt3=0;tt4++;}if(tt4==10){tt4=0;tt5++;}if(tt5==10){tt5=0;}P2_7=0;}实验小结:通过这次为期2个星期的课程设计,我大致掌握了51单片机的编程,学会了使用Proteus和Keil软件实现对51单片机的仿真操作。同时我还学会了独立查找学习新知识,大大锻炼了自己的学习能力。在实验过程中主要遇到过如下问题:1)芯片hex文件路径设置不对导致软件运行错误。2)电路中总线两端所接线的标号不一致导致仿真不出结果。3)单片机工作效率应该双击芯片设定,是指外部电路中晶体振荡器的频率是无效的。4)程序中循环较多,还涉及到不能由用户任意调用的中断服务程序,所以要非常注意程序运行时的流程。同时也总结了很多问题:1)在设计程序之前,务必要对所有单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源。2)设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路和一个完整的软件流程图。3)在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改进”时程序设计的必经之路。4)要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。5)在设计程序过程中,遇到问题是很正常的。但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。总之,通过本次课程设计,我感觉收获很多,完成了实验目的和要求。
本文标题:基于简单IO口的8LED显示电子码表设计
链接地址:https://www.777doc.com/doc-2576201 .html