89c51单片机教学实验内容与答案.docx

上传人:b****6 文档编号:3860699 上传时间:2022-11-25 格式:DOCX 页数:10 大小:84.04KB
下载 相关 举报
89c51单片机教学实验内容与答案.docx_第1页
第1页 / 共10页
89c51单片机教学实验内容与答案.docx_第2页
第2页 / 共10页
89c51单片机教学实验内容与答案.docx_第3页
第3页 / 共10页
89c51单片机教学实验内容与答案.docx_第4页
第4页 / 共10页
89c51单片机教学实验内容与答案.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

89c51单片机教学实验内容与答案.docx

《89c51单片机教学实验内容与答案.docx》由会员分享,可在线阅读,更多相关《89c51单片机教学实验内容与答案.docx(10页珍藏版)》请在冰豆网上搜索。

89c51单片机教学实验内容与答案.docx

89c51单片机教学实验内容与答案

1.数据传送实验

要求:

将片内从30H开始连续7个单元的内容送入从40H开始的地址单元中。

(先在30H~36H中送初值)

#include

voidmain()

{

unsignedchardatai,*d1,*d2;

d1=0x30;

d2=0x40;

{

*d1=0x10;

*(d1+1)=0x11;

*(d1+2)=0x22;

*(d1+3)=0x45;

*(d1+4)=0x30;

*(d1+5)=0x32;

*(d1+6)=0x21;

}

for(i=0;i<7;i++)

{

*(d2+i)=*(d1+i);

}

}

 

2.排序实验

要求:

将片内从30H单元开始的10个无符号数,按由小到大的顺序排列。

(先在30H~39H中送排序初值)

#include

voidmain()

{

unsignedchardata*p,i,j,d;

p=0x30;

*(p+0)=0x21;

*(p+1)=0x11;

*(p+2)=0x31;

*(p+3)=0x02;

*(p+4)=0x22;

*(p+5)=0x42;

*(p+6)=0x32;

*(p+7)=0x41;

*(p+8)=0x05;

*(p+9)=0x22;

for(i=0;i<9;i++)

for(j=0;j<9-i;j++)

if(*(p+j)>*(p+j+1))

{d=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=d;

}

}

3.并行接口实验

要求:

使用P1口控制LED1~LED8进行花样显示。

显示顺序规律为:

(1)8个LED依次左移单个点亮。

(2)8个LED依次左移逐个点亮。

(3)8个LED依次左移逐个熄灭,然后再从

(1)进行循环,中间延迟时间1s。

#include

#defineucharunsignedchar//在程序中用uchar替代unsignedchar

//目的在于减少代码输入量

#defineuintunsignedint

voiddelay(uint);//定义延时函数

voidLeftMovLED(void);//定义向左移运点亮LED的函数

//*******主函数********

voidmain(void)

{

while

(1)//死循环

{

LeftMovLED();//调用LeftMovLED实现左移点亮LED功能

}

}

voidLeftMovLED(void)

{

uchari,temp;//定义两个变量

temp=0x01;//temp赋初值

for(i=0;i<8;i++)//下面的代码循环8次

{

P1=temp;//将temp内的值赋给PORTD点亮LED

temp=temp<<1&0xfe;//将temp左移一位后将最后一位清零。

delay(1000);//调用延时函数,延时时间大约1S

}

temp=0x01;//temp赋初值

for(i=0;i<8;i++)//下面的代码循环8次

{

P1=temp;//将temp内的值赋给PORTD点亮LED

temp=temp<<1&0xfe;//将temp左移一位后将最后一位清零。

temp++;

delay(1000);//调用延时函数,延时时间大约1S

}

for(i=0;i<8;i++)//下面的代码循环8次

{

P1=temp;//将temp内的值赋给PORTD点亮LED

temp=temp<<1&0xfe;//将temp左移一位后将最后一位清零。

delay(1000);//调用延时函数,延时时间大约1S

}

}

//*******延时函数*******

voiddelay(uintx)

{

uchari;//定义一个循环变量

while(x--)//循环执行在下代码x次,x在呼叫此函数处赋值。

for(i=0;i<165;i++)//循环执行以下代码165次(大约1ms)

continue;

}

4.定时器/计数器实验

要求:

使用定时/计数器作为延时控制,在两灯P0.0和P0.1之间按1s互相闪烁。

#include

#defineucharunsignedchar

sbitLED=P0^0;

sbitLED1=P0^1;

uchartime;

voidInitTimer0(void)

{

LED=1;

LED1=0;

TMOD=0x01;//定时器0,工作方式1

TH0=0x3c;

TL0=0xb0;//50ms中断一次

EA=1;

ET0=1;

TR0=1;

}

voidmain(void)

{

InitTimer0();

while

(1);//分号,表示在此一直循环执行,等待中断。

相当于汇编的AJMP$

}

voidTimer0Interrupt(void)interrupt1

{

TH0=0x3c;

TL0=0xb0;

time++;

if(time==20)//中断20次,1s

{

time=0;

LED=!

LED;//P1.0上的LED1s亮灭一次

LED1=!

LED1;

}

}

6.LED显示器

要求:

设计一个59秒计时器,使用两位共阳极LED数码管将其显示出来。

实验电路图要求自己设计,可参考书上例子或上网查询。

#include

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,};

 

voiddelay(uintxms)//延时函数

{

uinti,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

 

voidmain()

{

ucharkey,a;

a=0;

while(a<5)

{

key=0;

while(key<10)

{

delay(1000);

switch(key)

{

case0:

P2=table[0];break;//0按下相应的键显示相对应的码值

case1:

P2=table[1];break;//1

case2:

P2=table[2];break;//2

case3:

P2=table[3];break;//3

case4:

P2=table[4];break;//4

case5:

P2=table[5];break;//5

case6:

P2=table[6];break;//6

case7:

P2=table[7];break;//7

case8:

P2=table[8];break;//8

case9:

P2=table[9];break;//9

}

switch(a)

{

case0:

P1=table[0];break;//0按下相应的键显示相对应的码值

case1:

P1=table[1];break;//1

case2:

P1=table[2];break;//2

case3:

P1=table[3];break;//3

case4:

P1=table[4];break;//4

case5:

P1=table[5];break;//5

}

if(key==9)

{

a++;

}

key++;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1