MCS-51单片机实验源程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MCS-51单片机实验源程序

MCS-51单片机实验源程序 仅供参考。没有最好,只有更好!希望大家设计出更好的程序来。 软件实验一 求一组数据的最大(小)值 /*软件实验的目的:熟悉单片机常用的基本程序(算法),调试时观察变量(含数组)值的变化,从而理解程序的功能,了解变量(含数组)在单片机存储器中的具体位置。*/ int a[]={-1,2,-30,40,-500,600,-7000,8000,-32750,32765}; //任意给出10个int型数(范围:-32768~+32767),放在数组a中 void main() { unsigned char i; int max,min; max=min=a[0]; //max,min先取该组数据的第一个 for(i=1;i10;i++) { if(a[i]max) max=a[i]; if(a[i]min) min=a[i]; } while(1); //没有什么要做了,则用该语句作为main函数的结尾,无限循环 } 附调试截图: 注意:由于是纯软件实验(单片机没有进行实际的输入与输出),有些变量要声明为全局变量(如上面的数组a),否则可能会被Keil软件编译时优化掉(即:一些语句没有真正生成执行代码),导致无法观察到正确结果。 软件实验二 二进制(十六进制)数转换为BCD数 //按流程图,编写程序如下: #define uchar unsigned char void main() { uchar x=0xA5; //设二进制数为1010 0101,在Keil中只能用十六进制0xA5或十进制165(不能直接用二进制形式) uchar a[3]; a[2]=x/100; x=x%100; a[1]=x/10; x=x%10; a[0]=x; while(1); } //或者用for循环语句,先取出个位 #define uchar unsigned char void main() { uchar x=0xA5; uchar i,a[3]; for(i=0;i3;i++) { a[i]=x%10; x=x/10; } while(1); } 软件实验三 二进制(十六进制)数转换为ASCII码 //将0-9、A-F的ASCII码做成表格(数组)放到程序存储器ROM中 #define uchar unsigned char uchar code ascii[]={0123456789ABCDEF}; //ASCII码表放ROM中 /*上句赋值也可写成{0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39, 0x41,0x42,0x43,0x44,0x45,0x46} */ /* 还可写成{48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70} */ /* 还可写成{0,1,2,3,4,5,6,7,8,9,A,B,C,D, E,F} */ void main() { uchar x=0x5A; //设二进制数为0101 1010,在Keil中只能用十六进制0x5A或十进制90(不能直接用二进制形式) uchar cc,a[2]; cc=x 0x0f; //取x的低4位1010(即A) a[0]=ascii[cc]; //查表,a[0]存x低4位对应十六进制数(即A)的ASCII码 cc=(x4) 0x0f; //取x的高4位0101(即5) a[1]=ascii[cc]; //查表,a[1]存x高4位对应十六进制数(即5)的ASCII码 while(1); } 硬件实验一 并行口输入、输出 //P2做输出口,接8只LED,编写程序,使LED循环点亮(流水灯) #includereg51.h #includeintrins.h //内部函数_crol_,_cror_等的头文件 void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms {unsigned char i; while(x--) for(i=0;i123;i++); } void main() { char a=0xfe; while(1) { P2=a; Delay(500); //在12MHz晶振下,延时约500ms a=_crol_(a,1); //循环左移,_cror_为循环右移 } } //P3.2和P3.3做输入口,分别接两个拨动开关到GND;P2.7~P2.4做输出口,接4只LED,用来指示两个开

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档