MCS-51单片机实验源程序.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《MCS-51单片机实验源程序.doc》由会员分享,可在线阅读,更多相关《MCS-51单片机实验源程序.doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、- -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=a0; /max,min先取该组数据的第一个for(i=1;im
2、ax) max=ai; if(aimin) min=ai; while(1); /没有什么要做了,那么用该语句作为main函数的结尾,无限循环附调试截图:注意:由于是纯软件实验单片机没有进展实际的输入与输出,有些变量要声明为全局变量如上面的数组a,否那么可能会被Keil软件编译时优化掉即:一些语句没有真正生成执行代码,导致无法观察到正确结果。软件实验二 二进制十六进制数转换为BCD数/按流程图,编写程序如下:#define uchar unsigned charvoid main()uchar x=0xA5; /设二进制数为1010 0101,在Keil中只能用十六进制0xA5或十进制165不
3、能直接用二进制形式uchar a3;a2=x/100;x=x%100;a1=x/10;x=x%10;a0=x;while(1);/或者用for循环语句,先取出个位#define uchar unsigned charvoid main()uchar x=0xA5;uchar i,a3;for(i=0;i4)& 0x0f; /取x的高4位0101即5a1=asciicc; /查表,a1存x高4位对应十六进制数即5的ASCII码while(1);硬件实验一 并行口输入、输出/P2做输出口,接8只LED,编写程序,使LED循环点亮流水灯#include#include /部函数_crol_,_cro
4、r_等的头文件void Delay(unsigned int x) /延时函数,在12MHz晶振下,延时约x msunsigned 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.7P2.4做输出口,接4只LED,用来指示两个开关的闭合状态组合#includevoid main() char a; wh
5、ile(1) a=P3; /读入P3口状态 a=a&0x0C; /a中只保存P3.3、P3.2的值,其余位清零if(a=0x0C) P2=0x7F; /P3.3=1开,P3.2=1开,那么P2.7=0亮 if(a=0x08) P2=0xbF; /P3.3=1开,P3.2=0合,那么P2.6=0亮 if(a=0x04) P2=0xdF; /P3.3=0合,P3.2=1开,那么P2.5=0亮 if(a=0x00) P2=0xEF; /P3.3=0合,P3.2=0合,那么P2.4=0亮 /用一个共阳七段数码管循环显示0-9和A-F,每个数显示0.5s#includesbit P1_0=P10;cha
6、r code TABLE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; /共阳数码管段码放在程序存储器ROM中void Delay(unsigned int x) /延时函数,在12MHz晶振下,延时约x msunsigned char i; while(x-) for(i=0;i123;i+);void main() char j; P1_0=0; /位选信号 while(1) for(j=0;j16;j+) P0=TABLEj; Delay(500); 硬件实验二 外部中断
7、/通过外部中断0(下降沿触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0P3.2引脚的按钮,流水灯开启,再按一次,灯熄灭#include#include /部函数_crol_,_cror_等的头文件bit LED=0; /位变量LED用于记录流水灯的状态,0为关闭,1为开启void Delay(unsigned int x) /延时函数,在12MHz晶振下,延时约x msunsigned char i; while(x-) for(i=0;i123;i+);void INT0_srv(void) interrupt 0 /INT0中断号为0 Delay(10); /延时10ms,去抖
8、动 if(INT0=0) LED=!LED; /每次中断时切换LED开启或关闭void main() char a=0xfe;IT0=1; /下降沿触发 EX0=1; /允许INT0中断 EA=1; while(1) if(LED) /开启 P2=a; Delay(500); /在12MHz晶振下,延时约500ms a=_crol_(a,1); /循环左移,_cror_为循环右移 else /关闭 P2=0xff; /通过外部中断0(低电平触发),启动或关闭流水灯,即上电复位时不亮,按一次INT0P3.2引脚的按钮,流水灯开启,再按一次,灯熄灭#include#include /部函数_cro
9、l_,_cror_等的头文件bit LED=0; /位变量LED用于记录流水灯的状态,0为关闭,1为开启void Delay(unsigned int x) /延时函数,在12MHz晶振下,延时约x msunsigned char i; while(x-) for(i=0;i123;i+);void INT0_srv(void) interrupt 0 /INT0中断号为0 Delay(10); /延时10ms,去抖动 if(INT0=0) LED=!LED; /每次中断时切换LED开启或关闭 while(INT0=0); /如P3.2(INT0)还是0,那么等待,变为1后才从中断返回void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 单片机 实验 源程序
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内