单片机实验2.docx

上传人:b****6 文档编号:7768139 上传时间:2023-01-26 格式:DOCX 页数:27 大小:663.48KB
下载 相关 举报
单片机实验2.docx_第1页
第1页 / 共27页
单片机实验2.docx_第2页
第2页 / 共27页
单片机实验2.docx_第3页
第3页 / 共27页
单片机实验2.docx_第4页
第4页 / 共27页
单片机实验2.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

单片机实验2.docx

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

单片机实验2.docx

单片机实验2

 

《微机原理与应用》实验报告

 

姓名:

侯伟

学号:

2015012214

年级:

2015级

专业:

电气工程及其自动化

 

2017年秋季学期

 

实验一LCM控制实验

1、功能要求

1、掌握利用单片机控制字符型LCM1602的方法;

2、完成与LCM1602的接口,并尝试各种显示功能。

2、硬件原理

3、软件程序流程

4、程序清单

#include"reg52.h"

#defineucharunsignedchar

#defineuintunsignedint

uintq;

ucharstr1[]="wulixueyuan";

ucharstr2[]="houwei2015012214";

sbitE=P2^2;

sbitRW=P2^1;

sbitRS=P2^0;

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);

}

voidwrite_com(ucharcom)

{

RS=0;

RW=1;

H1:

P0=0xff;

E=1;

q=P0;

E=0;

if(q&0x80)

gotoH1;

RS=0;

RW=0;

P0=com;

E=1;

delay(5);

E=0;

}

voidwrite_data(ucharDATE)

{

RS=0;

RW=1;

H2:

P0=0xff;

E=1;

q=P0;

E=0;

if(q&0x80)

gotoH2;

RS=1;

RW=0;

P0=DATE;

delay(5);

E=1;

delay(5);

E=0;

}

voidinit()

{

E=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

}

voidmain()

{

uchari;

init();

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

{

write_data(str1[i]);

delay(100);

}

write_com(0x80+0x40);

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

{

write_data(str2[i]);

delay(100);

}

while

(1)

{

delay(200);

write_com(0x0f);

write_com(0x1e);

}

}

5、实验心得及建议

C语言编写函数不同于汇编语言,函数嵌套使得程序变得精炼,此外一定要读懂每个器件的硬件设计,做到软硬件结合

 

实验二基于I2C总线的EEPROM读写实验

1、功能要求

1熟悉24C02的芯片功能。

2掌握采用单片机和I2C芯片的硬件接口技术。

3掌握24C02的读写程序的设计和调试方法。

4向芯片中写入10个字节,然后再读出显示。

2、硬件原理

3、软件程序流程

总流程:

写n个字节流程:

 

读n个字节流程:

4、程序清单

#include"reg52.h"

#defineWriteDeviceAddress0xa0

#defineReadDeviceAddress0xa1

sbitSCL=P1^0;

sbitSDA=P1^1;

voidDelay(unsignedintn)

{

while(n!

=0)

n--;

}

voidStart()

{

SDA=1;

Delay(10);

SCL=1;

Delay(10);

SDA=0;

Delay(10);

SCL=0;

Delay(10);

}

voidStop()

{

SDA=0;

Delay(10);

SCL=1;

Delay(10);

SDA=1;

Delay(10);

}

voidAck()

{

inti;

SCL=1;

Delay(10);

while(SDA==1&&i<100)

i++;

SCL=0;

Delay(10);

}

voidNoAck()

{

SDA=1;

Delay(10);

SCL=1;

Delay(10);

SCL=0;

Delay(10);

}

voidWrite8bit(unsignedcharinput)

{

unsignedchartemp;

for(temp=8;temp!

=0;temp--)

{

SDA=(bit)(input&0x80);

Delay(10);

SCL=1;

Delay(10);

SCL=0;

input=input<<1;

}

}

voidWriteI2C(unsignedcharWdata,unsignedcharRomAddress)

{

Start();

Write8bit(WriteDeviceAddress);

Ack();

Write8bit(RomAddress);

Ack();

Write8bit(Wdata);

Ack();

Stop();

}

intRead8bit()

{

unsignedchartemp,rbyte=0;

for(temp=8;temp!

=0;temp--)

{

SCL=1;

Delay(10);

rbyte=rbyte<<1;

Delay(10);

rbyte=rbyte|SDA;

SCL=0;

Delay(10);

}

return(rbyte);

}

intReadI2C(unsignedcharRomAddress)

{

intData;

Start();

Write8bit(WriteDeviceAddress);

Ack();

Write8bit(RomAddress);

Ack();

Start();

Write8bit(ReadDeviceAddress);

Ack();

Data=Read8bit();

NoAck();

Stop();

returnData;

}

voidmain()

{

int

writeByte[]={1,2,3,4,5,6,7,8,9,10};

intreadByte[10];

inti;

P2=0x00;

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

{

WriteI2C(writeByte[i],0x00+i);

Delay(1000000);

}

i=0;

while

(1)

{

Delay(900000000);

readByte[i]=ReadI2C(i+0x00);

P2=readByte[i];

Delay(90000000);

i++;

if(i==10)

i=0;

}

}

5、实验心得及建议

I2C总线的协议比较多,程序编写起来比较困难,这要求我们对24C02芯片十分清楚,如果对它的协议不够清楚,读写函数很难实现

 

实验三A/D转换实验

1、功能要求

1掌握A/D转换芯片ADC0809转换性能及编程方法。

2掌握A/D转换芯片ADC0809与单片机的接口方法。

3通过实验了解单片机如何进行数据采集。

4.利用实验箱产生0-5V的模拟电压。

编写程序,采集该模拟电压并将转换的结果用发光二极管显示。

5.采集光敏电阻的亮度变化,设置门限值,实现超过门限值使蜂鸣器报警的功能。

2、硬件原理

3、软件程序流程

4、程序清单

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitADC_START=P2^0;

sbitADC_ALE=P2^1;

sbitADC_OE=P2^2;

sbitADC_EOC=P2^3;

sbitclk=P2^7;

sbitE=P2^6;

sbitR_W=P2^5;

sbitD_I=P2^4;

sbitD0=P0^0;

sbitD1=P0^1;

sbitD2=P0^2;

sbitD3=P0^3;

sbitD4=P0^4;

sbitD5=P0^5;

sbitD6=P0^6;

sbitD7=P0^7;

//unsigneddatai;

unsignedcharq;

voidWCOM(unsignedchard);

/*写指令函数*/

voidDat(unsignedchard);

/*写数据函数*/

voidImim();

/*初始化*/

voidClearcld();

/*清屏*/

voidDelay()

{

intd;

for(d=0;d<30000;d++)

{

_nop_();

}

}

 

voidTimer0Init()

{

TMOD|=0X01;

TH0=0XFC;

TL0=0XFF;

ET0=1;

EA=1;

TR0=1;

}

voidinit0809()

{

ADC_START=0;

ADC_OE=0;

ADC_ALE=0;

_nop_();

_nop_();

ADC_ALE=1;//ALE=1时地址进入锁存器

_nop_();

P3=0x07;

_nop_();

ADC_ALE=0;//ALE=0时地址被锁存住

}

voidADC_0809()

{

ADC_START=0;

_nop_();

_nop_();

_nop_();

ADC_START=1;//上升沿复位

_nop_();

_nop_();

_nop_();

ADC_START=0;//下降沿开始

_nop_();

_nop_();

_nop_();

while(!

ADC_EOC);//等待转换结束

ADC_OE=1;

_nop_();

_nop_();

_nop_();

Dat(0x30+(uchar)D0);

Dat(0x30+(uchar)D1);

Dat(0x30+(uchar)D2);

Dat(0x30+(uchar)D3);

Dat(0x30+(uchar)D4);

Dat(0x30+(uchar)D5);

Dat(0x30+(uchar)D6);

Dat(0x30+(uchar)D7);

Delay();

ADC_OE=0;

}

voidWCOM(unsignedchard)

{

R_W=1;

D_I=0;

LOOP:

P1=0xFF;

E=1;

q=P1;

E=0;

if(q&0x80)

{

gotoLOOP;

}

R_W=0;

D_I=0;

P1=d;

E=1;

E=0;

}

voidDat(unsignedchard)

{

R_W=1;

D_I=0;

LOOP:

P1=0xFF;

E=1;

q=P1;

E=0;

if(q&0x80)

{

gotoLOOP;

}

D_I=1;

R_W=0;

P1=d;

E=1;

E=0;

}

voidImim()

{

P1=0xFF;

E=0;

WCOM(0x38);

WCOM(0x08);

WCOM(0x06);

Clearcld();

WCOM(0x0c);

}

voidClearcld()

{

D_I=0;

R_W=0;

//P0=0x01;

WCOM(0x01);

}

voidmain()

{

inti;

init0809();

Imim();

Clearcld();

WCOM(0x02);

Timer0Init();

Delay();

while

(1)

{

WCOM(0x80);

ADC_0809();

WCOM(0X88);

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

Dat('');

WCOM(0X80+0x40);

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

Dat('');

}

}

voidTimer0()interrupt1

{

staticuinti;

TH0=0XFC;

TL0=0xFF;

i++;

if(i==1)

{

i=0;

clk=~clk;

}

}

5、实验心得及建议

该实验硬件电路出错次数较多,需要锻炼排错的能力,结合软件程序,一步一步检查,这样每一部分都十分清楚

 

实验四D/A转换实验

1、功能要求

1.了解D/A(DAC0832)的基本原理和功能。

2.掌握D/A(DAC0832)和单片机的硬件接口以及软件设计方法。

3.软件编程使DAC0832转换模块循环输出锯齿波。

4.软件编程使DAC0832转换模块循环输出正弦波。

2、硬件原理

3、软件程序流程

4、程序清单

#include

#defineucharunsignedchar

sbitkey=P2^2;

uchari;

ucharcodesin_tab[]=

{

0x80,0x83,0x85,0x88,0x8a,0x8d,0x8f,0x92,0x94,0x97,

0x99,0x9b,0x9e,0xa0,0xa3,0xa5,0xa7,0xaa,0xac,0xae,

0xb1,0xb3,0xb5,0xb7,0xb9,0xbb,0xbd,0xbf,0xc1,0xc3,

0xc5,0xc7,0xc9,0xcb,0xcc,0xce,0xd0,0xd1,0xd3,0xd4,

0xd6,0xd7,0xd8,0xda,0xdb,0xdc,0xdd,0xde,0xdf,0xe0,

0xe1,0xe2,0xe3,0xe3,0xe4,0xe4,0xe5,0xe5,0xe6,0xe6,

0xe7,0xe7,0xe7,0xe7,//输出电压从0到最大值,正弦波1/4部分

0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,0xe5,0xe5,0xe4,0xe4,

0xe3,0xe3,0xe2,0xe1,0xe0,0xdf,0xde,0xdd,0xdc,0xdb,

0xda,0xd8,0xd7,0xd6,0xd4,0xd3,0xd1,0xd0,0xce,0xcc,

0xcb,0xc9,0xc7,0xc5,0xc3,0xc1,0xbf,0xbd,0xbb,0xb9,

0xb7,0xb5,0xb3,0xb1,0xae,0xac,0xaa,0xa7,0xa5,0xa3,

0xa0,0x9e,0x9b,0x99,0x97,0x94,0x92,0x8f,0x8d,0x8a,

0x88,0x85,0x83,0x80,//输出电压从最大值到0,正弦波1/2部分

0x7d,0x7b,0x78,0x76,0x73,0x71,0x6e,0x6c,0x69,0x67,

0x65,0x62,0x60,0x5d,0x5b,0x59,0x56,0x54,0x52,0x4f,

0x4d,0x4b,0x49,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3b,

0x39,0x37,0x35,0x34,0x32,0x30,0x2f,0x2d,0x2c,0x2a,

0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,

0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,

0x19,0x19,0x19,0x19,//输出电压从0到最小值,正弦波3/4部分

0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,

0x1c,0x1d,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,

0x25,0x26,0x28,0x29,0x2a,0x2c,0x2d,0x2f,0x30,0x32,

0x34,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x43,0x45,

0x47,0x49,0x4b,0x4d,0x4f,0x52,0x54,0x56,0x59,0x5b,

0x5d,0x60,0x62,0x65,0x67,0x69,0x6c,0x6e,0x71,0x73,

0x76,0x78,0x7b,0x7d

};

voiddelay()

{

ucharj;

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

}

voidjuchibo()

{

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

P1=(uchar)i;

}

voidmain()

{

while

(1)

{

if(key)

{

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

{

{

P1=sin_tab[i];

delay();

}

if(i==255)

i=0;

}

}

else

{

juchibo();

}

}

}

5、实验心得及建议

锯齿波循环部分没彻底明白,导致锯齿波和三角波不能切换。

另外硬件电路搭建时也要认真

 

实验五基于MAX232的单片机与微机串行通信实验

1、功能要求

学习使用MAX232实现单片机与微机的串行通讯。

使用串口调试助手软件正确接收发送数据。

2、硬件原理

3、软件程序流程

4、程序清单

#include"reg51.h"

voidmain()

{

unsignedchara;

SCON=0X50;//串行口方式1

PCON=0X80;

TMOD=0X20;

TH1=0XFD;//设定波特率为19.2k

TL1=0XFD;

TR1=1;

ES=0;

while

(1)

{

while(!

RI);

RI=0;

a=SBUF;

SBUF=a;

while(!

TI);

TI=0;

}

}

 

5、实验心得及建议

该实验软件部分和硬件部分都比较简单,关键是弄懂单片机的PC机谁发送谁接收

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

当前位置:首页 > PPT模板 > 简洁抽象

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

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