89c51单片机教学实验内容与答案Word文档下载推荐.docx
《89c51单片机教学实验内容与答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《89c51单片机教学实验内容与答案Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
i<
7;
i++)
*(d2+i)=*(d1+i);
2.排序实验
将片内从30H单元开始的10个无符号数,按由小到大的顺序排列。
(先在30H~39H中送排序初值)
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;
9;
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。
reg51.h>
#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;
8;
i++)//下面的代码循环8次
P1=temp;
//将temp内的值赋给PORTD点亮LED
temp=temp<
<
1&
0xfe;
//将temp左移一位后将最后一位清零。
delay(1000);
//调用延时函数,延时时间大约1S
temp++;
//*******延时函数*******
voiddelay(uintx)
uchari;
//定义一个循环变量
while(x--)//循环执行在下代码x次,x在呼叫此函数处赋值。
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;
InitTimer0();
while
(1);
//分号,表示在此一直循环执行,等待中断。
相当于汇编的AJMP$
voidTimer0Interrupt(void)interrupt1
time++;
if(time==20)//中断20次,1s
time=0;
LED=!
LED;
//P1.0上的LED1s亮灭一次
LED1=!
LED1;
6.LED显示器
设计一个59秒计时器,使用两位共阳极LED数码管将其显示出来。
实验电路图要求自己设计,可参考书上例子或上网查询。
Forpersonaluseonlyinstudyandresearch;
notforcommercialuse
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>
j--);
{
ucharkey,a;
a=0;
while(a<
5)
key=0;
while(key<
10)
switch(key)
case0:
P2=table[0];
break;
//0按下相应的键显示相对应的码值
case1:
P2=table[1];
//1
case2:
P2=table[2];
//2
case3:
P2=table[3];
//3
case4:
P2=table[4];
//4
case5:
P2=table[5];
//5
case6:
P2=table[6];
//6
case7:
P2=table[7];
//7
case8:
P2=table[8];
//8
case9:
P2=table[9];
//9
switch(a)
P1=table[0];
P1=table[1];
P1=table[2];
P1=table[3];
P1=table[4];
P1=table[5];
//5
if(key==9)
a++;
key++;
仅供个人用于学习、研究;
不得用于商业用途。
notforcommercialuse.
Nurfü
rdenpersö
nlichenfü
rStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'
é
tudeetlarechercheuniquementà
desfinspersonnelles;
pasà
desfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文