51单片机硬件实验.docx

上传人:b****3 文档编号:3856454 上传时间:2022-11-25 格式:DOCX 页数:16 大小:19.56KB
下载 相关 举报
51单片机硬件实验.docx_第1页
第1页 / 共16页
51单片机硬件实验.docx_第2页
第2页 / 共16页
51单片机硬件实验.docx_第3页
第3页 / 共16页
51单片机硬件实验.docx_第4页
第4页 / 共16页
51单片机硬件实验.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

51单片机硬件实验.docx

《51单片机硬件实验.docx》由会员分享,可在线阅读,更多相关《51单片机硬件实验.docx(16页珍藏版)》请在冰豆网上搜索。

51单片机硬件实验.docx

51单片机硬件实验

第一个:

串行口实验

1.实验目的

了解串口的工作原理和编程方式。

2,实验内容

串行口的自发自收。

3.,实验器材:

计算机一台

4,实验步骤:

程序如下:

#include

#defineucharunsignedchar

#defineuintunsignedint

voidmain()

{

uchari=0x55;

uintj=0;

TMOD=0x20;

TL1=TH1=0xF4;

PCON=0X00;

SCON=0X50;

TR1=1;

while

(1)

{

SBUF=i;

Do{}

while(!

RI)

RI=0;

TI=0;

i=SBUF;

P1=i;

i=~i;

for(j=0;j<12500;j++);

}

}

第二个:

二极管的闪烁延时

1.实验目的:

熟练掌握软件和硬件的延时操作。

2.实验要求:

利用实验仪提供的显示电路,动态显示一行数据.

3.实验器材:

(1)超想-3000TB综合实验仪1台

(2)超想3000仿真器1台

(3)计算机1台

4.实验说明:

(1)本实验仪提供了8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示

74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。

写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位置到74LS164中,并且实现移位。

向显示位选通地址输出高电平就可以点亮相应的显示位。

本实验仪中数据位输出地址为0e102H,时钟位输出地址为0e102H,位选通输出地址为0e101H。

本实验涉及到了8155I0/RAM扩展芯片的工作原理以及74LS164器件的工作原理。

软件延时程序:

#include

#include

voiddelay(unsignedintd){

while(--d>0);

}

main()

{

unsignedi,sel;

{

sel=0xfe;

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

{

P1=sel;

delay(500);

P1=0xfd;

}

}

}

硬件延时:

#include

sbitP1_1=P1^1;

unsignedchari;

voidmain()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

while

(1);

}

voidtime0_int(void)interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

P1_1=!

P1_1;

}

第三个:

八段数码管显示

1.实验目的:

(1)了解数码管动态显示的原理。

(2)了解74LS164扩展端口的方法。

2.实验要求:

利用实验仪提供的显示电路,动态显示一行数据.

3.实验器材:

(1)超想-3000TB综合实验仪1台

(2)超想3000仿真器1台

(3)计算机1台

4.实验说明:

(1)本实验仪提供了8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

示共有6位,用动态方式显示

74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控

制输出。

写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据

位置到74LS164中,并且实现移位。

向显示位选通地址输出高电平就可以点亮相应的显示位。

本实验仪中数据位输出地址为0e102H,时钟位输出地址为0e102H,位选通输出地址为0e101H。

本实验涉及到了8155I0/RAM扩展芯片的工作原理以及74LS164器件的工作原理。

2)七段数码管的字型代码表如下表:

显示字形   g   f   e   d   c   b   a   段码   

0   0   1   1   1   1   1   1   3fh   

1   0   0   0   0   1   1   0   06h   

2   1   0   1   1   0   1   1   5bh   

3   1   0   0   1   1   1   1   4fh   

4   1   1   0   0   1   1   0   66h   

5   1   1   0   1   1   0   1   6dh   

6   1   1   1   1   1   0   1   7dh   

7   0   0   0   0   1   1   1   07h   

8   1   1   1   1   1   1   1   7fh   

9   1   1   0   1   1   1   1   6fh   

A   1   1   1   0   1   1   1   77h   

b   1   1   1   1   1   0   0   7ch   

C   0   1   1   1   0   0   1   39h   

d   1   0   1   1   1   1   0   5eh   

E   1   1   1   1   0   0   1   79h   

F   1   1   1   0   0   0   1   71h   

#include

#defineLEDLen6

#definemode0x03;

#defineCAddrXBYTE[0xe100]/*控制字地址*/

#defineOUTBITXBYTE[0xe101]/*位控制口*/

#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位)*/

#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位)*/

#defineINXBYTE[0xe103]/*键盘读入口*/

unsignedcharLEDBuf[LEDLen];/*显示缓冲*/

codeunsignedcharLEDMAP[]={/*八段管显示码*/

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;/*从左边开始显示*/

for(i=0;i

OUTBIT=0;/*关所有八段管*/

LED=LEDBuf[i];

for(j=0;j<8;j++){/*送164*/

if(LED&0x80)DAT164=1;elseDAT164=0;

CLK164=CLK164|0x02;

CLK164=CLK164&0xfd;

LED<<=1;

}

OUTBIT=Pos;/*显示一位八段管*/

Delay

(1);

Pos>>=1;/*显示下一位*/

}

OUTBIT=0;/*关所有八段管*/

}

voidmain()

{

unsignedchari=0;

unsignedcharj;

CAddr=mode;

while

(1){

LEDBuf[0]=LEDMAP[(i+2)&0x0f];

LEDBuf[1]=LEDMAP[i&0x0f];

LEDBuf[2]=LEDMAP[(i+2)&0x0f];

LEDBuf[3]=LEDMAP[(i+1)&0x0f];

LEDBuf[4]=LEDMAP[(i+2)&0x0f];

LEDBuf[5]=LEDMAP[(i+8)&0x0f];

for(j=0;j<30;j++)

DisplayLED();/*延时*/

}

}

第四个键盘扫描显示实验

1.实验目的:

(1)掌握键盘和显示器的接口方法和编程方法。

(2)掌握键盘扫描和LED八段码显示器的工作原理。

2.实验内容:

在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。

3.实验器材:

(1)超想-3000TB综合实验仪1台

(2)超想3000仿真器1台

(3)计算机1台

4.实验说明:

本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址

(0e103H)读回.如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键.在判断有键按下后,要有一定的延时,防止键盘抖动.

列扫描码还可以分时用作LED的位选通信号.

#include

#defineLEDLen6

#definemode0x03;

#defineCAddrXBYTE[0xe100]/*控制字地址*/

#defineOUTBITXBYTE[0xe101]/*位控制口*/

#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位)*/

#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位)*/

#defineINXBYTE[0xe103]/*键盘读入口*/

unsignedcharLEDBuf[LEDLen];/*显示缓冲*/

codeunsignedcharLEDMAP[]={/*八段管显示码*/

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;/*从左边开始显示*/

for(i=0;i

OUTBIT=0;/*关所有八段管*/

LED=LEDBuf[i];

for(j=0;j<8;j++){/*送164*/

if(LED&0x80)DAT164=1;elseDAT164=0;

CLK164=CLK164|0x02;

CLK164=CLK164&0xfd;

LED<<=1;

}

OUTBIT=Pos;/*显示一位八段管*/

Delay

(1);

Pos>>=1;/*显示下一位*/

}

}

codeunsignedcharKeyTable[]={/*键码定义*/

0x00,0x01,0x04,0x07,

0x0f,0x02,0x05,0x08,

0x0e,0x03,0x06,0x09,

0x0d,0x0c,0x0b,0x0a,

0x10,0x11,0x12,0x13,0x14,

0x15,0x16,

};

unsignedcharTestKey()

{

OUTBIT=0;/*输出线置为0*/

return(~IN&0x0f);/*读入键状态(高四位不用)*/

}

unsignedcharGetKey()

{

unsignedcharPos;

unsignedchari;

unsignedchark;

i=6;

Pos=0x20;/*找出键所在列*/

do{

OUTBIT=~Pos;

Pos>>=1;

k=~IN&0x0f;

}while((--i!

=0)&&(k==0));

/*键值=列X4+行*/

if(k!

=0){

i*=4;

if(k&2)

i+=1;

elseif(k&4)

i+=2;

elseif(k&8)

i+=3;

OUTBIT=0;

doDelay(10);while(TestKey());/*等键释放*/

return(KeyTable[i]);/*取出键码*/

}elsereturn(0xff);

}

voidmain()

{

CAddr=mode;

LEDBuf[0]=0xff;

LEDBuf[1]=0xff;

LEDBuf[2]=0xff;

LEDBuf[3]=0xff;

LEDBuf[4]=0x00;

LEDBuf[5]=0x00;

while

(1){

DisplayLED();

if(TestKey())LEDBuf[5]=LEDMAP[GetKey()&0x0f];

}

第五个:

A/D转换实验

1.实验目的

掌握A/D转换与单片机接口的方法;了解A/D芯片0809转换性能及编程方法;

2.实验内容:

利用综合实验仪上的0809做A/D转换器,综合实验仪上的电位器提供模拟量输入,编制程序,将模拟量转换成数字量,通过8155键显区数码管显示出来。

3.实验器材:

(1)超想-3000TB综合实验仪1台

(2)超想3000仿真器1台

(3)连线若干根

(4)计算机1台

4.实验原理:

A/D转换器的功能主要是将输入的模拟信号转换成数字信号,如电压、电流、温度测量等都属于这种转换。

本实验中采用的转换器为ADC0809,它是一个8位逐次逼近型A/D转换器,可以对8个模拟量进行转换,转换时间为100μS。

其工作过程如下:

首先由地址锁存信号ALE的上升沿将引脚ADDA、ADDB和ADDC上的信号锁存到地址寄存器内,用以选择模拟量输入通道;START信号的下降沿启动A/D转换器开始工作;当转换结束时,AD0809使EOC引脚由低电平变成高电平,程序可以通过查询的方式读取转换结果,也可以通过中断方式读取结果。

CLOCK为转换时钟输入端,频率为100KHz-1.2MHz,推荐值为640KHz。

5.实验步骤:

(1)设定仿真模式为程序空间在仿真器上,数据空间在用户板上

(2)硬件诊断:

调整综合实验仪上模拟信号发生器的电位器,使输入到此AD0809的IN0上电压为一定值。

(3)编写程序,并编译通过。

本程序使用查询的方式读取转换结果。

在读取转换结果的指令后设置断点,运行程序,在断点处检查并读出A/D转换结果,数据是否与Vin0相对应。

修改程序中错误,使显示值随Vin0变化而变化。

6.实验思考:

1)试编写循环采集8路模拟量输入A/D转换程序;

(2)以十进制方式显示。

#include

#include

#defineLEDLen6

#defineMODE0x03

#defineCS0809XBYTE[0xa000]

#defineCAddrXBYTE[0xe100]/*控制字地址*/

#defineOUTBITXBYTE[0xe101]/*位控制口*/

#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位)*/

#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位)*/

#defineINXBYTE[0xe103]/*键盘读入口*/

 

unsignedcharLEDBuf[LEDLen];/*显示缓冲*/

codeunsignedcharLEDMAP[]={/*八段管显示码*/

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;/*从左边开始显示*/

for(i=0;i

OUTBIT=0;/*关所有八段管*/

LED=LEDBuf[i];

for(j=0;j<8;j++){/*送164*/

if(LED&0x80)DAT164=1;elseDAT164=0;

CLK164=CLK164|0X02;

CLK164=CLK164&0Xfd;

LED<<=1;

}

OUTBIT=Pos;/*显示一位八段管*/

Delay

(1);

Pos>>=1;/*显示下一位*/

}

OUTBIT=0;/*关所有八段管*/

}

unsignedcharRead0809()

{

unsignedchari;

CS0809=0;/*起动A/D*/

for(i=0;i<0x20;i++);/*延时>100us*/

return(CS0809);/*读入结果*/

}

voidmain()

{

unsignedcharj;

unsignedcharb;

CAddr=MODE;

while

(1){

LEDBuf[0]=0X3F;

LEDBuf[1]=0X7F;

LEDBuf[2]=0X3F;

LEDBuf[3]=0X6F;

LEDBuf[4]=0X00;

LEDBuf[5]=0X00;

//b=Read0809();

LEDBuf[5]=LEDMAP[Read0809()&0x0f];

LEDBuf[4]=LEDMAP[Read0809()>>4&0x0f];

for(j=0;j<5;j++)

DisplayLED();/*延时*/

}

}

第六个:

D/A0832转换实验

1.实验目的:

了解D/A转换与单片机的接口方法;了解D/A转换芯片DA0832的性能及编程方法。

2.实验内容:

利用0832输出一个从0V开始逐渐升至5V再降至0V的三角波电压,数码管显示数字量值。

3.实验器材:

(1)超想-3000TB综合实验仪1台

(2)超想3000仿真器1台

(3)连线若干根

(4)计算机1台

4.实验原理:

D/A转换器的功能主要是将输入的数字量转换成模拟量输出,在语音合成等方面得到了广泛的应用。

本实验中采用的转换器为DAC0832,该芯片为电流输出型8位D/A转换器,输入设有两级缓冲锁存器,因此可同时输出多路模拟量。

本实验中采用单级缓冲连接方式,用0832来产生三角波,具体线路如上图所示。

Vref引脚的电压极性和大小决定了输出电压的极性与幅度,超想-3000TB综合实验仪上的DA0832的第8引脚(Vref)的电压已接为-5V,所以输出电压值的幅度为0-5V。

5.实验步骤:

(1)设定仿真模式为程序空间在仿真器上,数据空间在用户板上

(2)硬件诊断:

(3)编写程序、编译程序,用单步、断点、连续方式调试程序,排除软件错误。

6.实验思考:

修改程序,使能产生锯齿波。

#include

#defineLEDLen6

#defineMODE0x03

#defineCS0832XBYTE[0xa000]

#defineCAddrXBYTE[0xe100]/*控制字地址*/

#defineOUTBITXBYTE[0xe101]/*位控制口*/

#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位)*/

#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位)*/

#defineINXBYTE[0xe103]/*键盘读入口*/

unsignedcharLEDBuf[LEDLen];/*显示缓冲*/

codeunsignedcharLEDMAP[]={/*八段管显示码*/

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari,j;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;/*从左边开始显示*/

for(i=0;i

OUTBIT=0;

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

当前位置:首页 > 工程科技 > 能源化工

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

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