- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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,用来指示两个开
您可能关注的文档
最近下载
- 数码摄像机-松下-AJ-D965MC说明书.pdf VIP
- 2024年巡察整改专题民主生活会个人“聚焦四个方面”对照检查材料范文2篇.docx VIP
- 人工智能对文化产业的推动.pptx VIP
- 人教版(2024)七年级上册英语教学计划(含教学进度表).docx
- 软件的项目可行性的研究的报告编写.ppt VIP
- 一种用于处理高硫高砷金矿的提金剂及其制备方法.pdf VIP
- 中国甲状腺疾病诊治指南ppt.pptx VIP
- 《中国抗癌协会甲状腺癌整合诊治指南(2022精简版)》解读PPT课件.pptx VIP
- 一种澳洲坚果种质热敏感等级的精准诊断及其缓解新梢叶片热伤害的方法.pdf VIP
- 全球常见传染病防控概述.pptx VIP
文档评论(0)