好文档 - 专业文书写作范文服务资料分享网站

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;i<10;i++) {

if(a[i]>max) max=a[i]; if(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=x0; a[1]=x/10; x=x; a[0]=x; while(1); }

//或者用for循环语句,先取出个位

#define uchar unsigned char void main() {

uchar x=0xA5; uchar i,a[3]; for(i=0;i<3;i++) {

a[i]=x; x=x/10; }

while(1); }

软件实验三 二进制(十六进制)数转换为ASCII码

//将0-9、A-F的ASCII码做成表格(数组)放到程序存储器ROM中

#define uchar unsigned char

uchar code ascii[]={\ABCDEF\码表放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=(x>>4)& 0x0f; //取x的高4位0101(即5) a[1]=ascii[cc]; //查表,a[1]存x高4位对应十六进制数(即5)的ASCII码 while(1); }

硬件实验一 并行口输入、输出

//P2做输出口,接8只LED,编写程序,使LED循环点亮(流水灯)

#include

#include //内部函数_crol_,_cror_等的头文件

void Delay(unsigned int x) //延时函数,在12MHz晶振下,延时约x ms {unsigned char i; while(x--)

for(i=0;i<123;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,用来指示两个开关的闭合状态组合 #include void main() {

char a; while(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

#include sbit P1_0=P1^0;

char 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 ms {unsigned char i; while(x--)

for(i=0;i<123;i++); }

void main() { char j;

P1_0=0; //位选信号 while(1) {

for(j=0;j<16;j++) {

P0=TABLE[j]; Delay(500); } } }

硬件实验二 外部中断

MCS-51单片机实验源程序

MCS-51单片机实验源程序仅供参考。没有最好,只有更好!希望大家设计出更好的程序来。软件实验一求一组数据的最大(小)值/*软件实验的目的:熟悉单片机常用的基本程序(算法),调试时观察变量(含数组)值的变化,从而理解程序的功能,了解变量(含数组)在单片机存储器中的具体位置。*/inta[]=
推荐度:
点击下载文档文档为doc格式
75kzf4p0rr0a0pl1szsm0n19a8hrgx00gw5
领取福利

微信扫码领取福利

微信扫码分享