单片机实习报告word格式模板.docx

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

单片机实习报告word格式模板.docx

《单片机实习报告word格式模板.docx》由会员分享,可在线阅读,更多相关《单片机实习报告word格式模板.docx(27页珍藏版)》请在冰豆网上搜索。

单片机实习报告word格式模板.docx

单片机实习报告word格式模板

 

单片机实习报告

 

课题名称:

数字直流电压表的设计

学院:

电气信息工程学院__

专业:

通信工程_______

学号:

XXXXXXXX_______

姓名:

________

指导教师:

________

日期:

2017.3.27-2017.3.31

 

摘要

作为嵌入式系统控制核心的单片机(又称为微控制器),以体积小、功能全、性价比高等诸多优点而独具特色。

51单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51单片机的发展又进入了一个新的阶段。

许多专用功能芯片的内核集成了51单片机,与51单片机兼容的微控制器以IP核的方式不断地出现在FPGA的片上系统中。

随着基于51单片机的嵌入式实时操作系统的出现与推广,在很长一段时间内,51单片机仍将占据嵌入式系统产品的中、低端市场。

51单片机是对所有兼容Intel8031指令系统的单片机的统称。

该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。

很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。

51单片机是基础入门的一个单片机,还是应用最广泛的一种。

由于单片机在工业控制领域的广泛应用,单片机由仅有CPU的专用处理器芯片发展而来。

最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成复杂的而对体积要求严格的控制设备当中。

尽管2000年以后ARM已经发展出了32位的、主频超过300M的高端单片机,但直到现在基于8051的单片机还在广泛的使用。

在很多方面单片机比专用处理器更适合应用于嵌入式系统,因此它得到了广泛的应用。

事实上单片机是世界上数量最多的处理器,随着单片机家族的发展壮大,单片机和专用处理器的发展便分道扬镳。

如今,单片机已经深入到人们生活的各个方面,几乎每件有电子器件的产品中都会集成有单片机。

例如手机、平板电脑、计算器、智能家居、电子玩具以及鼠标等电子产品中都含有单片机。

除此之外,汽车上一般配备40多片单片机,复杂的工业控制系统上甚至可能有数百片单片机在同时工作。

单片机的数量远超过PC机和其他计算机的总和。

本次实习就以52单片机为基础进行设计数字模拟电压表。

关键词:

52单片机TLC254374LS16474LS138

 

 

1.实习目的与任务

1.熟悉并掌握单片机外围芯片的应用方法;

2.掌握单片机应用系统一般的设计过程;

3.掌握52单片机扩展SPI接口芯片的方法。

2.实习内容与要求

根据实验箱上12864液晶及TLC2543的应用电路,设计一个数字直流电压表,要求能够对输入的0~5V的直流电压进行测量,并通过液晶显示,通过矩阵按键设置上下限。

单片机与液晶、TLC2543之间采用SPI数据传输方式。

当测量超出限定接线,单片机发送一个警告信号,由LED灯显示。

3.实验硬件

3.174LS138资料

3.1.174LS138简介

74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其工作原理如下:

当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。

利用G1、/(G2A)和/(G2B)可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。

若将选通5端中的一个作为数据输入端时,74LS138还可作数据分配器。

图3.1.1为74LS138的引脚简图。

图3.1.174LS138引脚图

3.1.274LS138功能表

74LS138功能表如表3.1.2所示。

表3.1.274LS138功能表

3.2TLC2543AD转换芯片

3.2.1TLC2543简介

TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。

由于是串行输入结构,能够节省51系列单片机I/O资源;且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。

TLC2543的特点:

(1)12位分辩率A/D转换器;

(2)在工作温度范围内10μs转换时间;

(3)11个模拟输入通道;

(4)3路内置自测试方式;

(5)采样率为66kbps;

(6)线性误差±1LSBmax;

(7)有转换结束输出EOC;

(8)具有单、双极性输出;

(9)可编程的MSB或LSB前导。

3.2.2TLC2543引脚功能

TCL2543引脚功能如表3.2.2所示。

 

引脚号

名称

I/O

说明

1~9、11、1、2

AIN0~AIN10

I

拟量输入端。

15

CS

I

片选段。

CS的下降沿使能DATAIN、DATAOUT和I/OCLOCK。

17

DATAINPUT

I

串行数据输入端。

数据在I/OCLOCK的上升沿串入。

前4位数据为模拟电压的通道号或片内自测电压通道号,高位在先。

16

DATAOUT

O

串行数据输出端。

数据在I/OCLOCK的下降沿写入。

在CS无效或进行A/D转换时,该脚保持高阻状态。

在数据输出时,由软件编程决定是高位在先还是低位在先。

19

EOC

O

转换结束标志。

在输入串行数据的最后一个时钟周期的下降沿,即开始A/D转换时,EOC脚变低,直到转换结束后变高。

此时数据准备完毕,可以输出。

10

GND

地,REF-接该脚。

18

I/OCLOCK

I

I/O时钟

14

REF+

I

正参考电压端,一般情况接VCC。

13

REF-

I

负参考电压端,一般情况接地。

20

VCC

正电源电压输入端。

电压为5V

0.5V。

表3.2.2TLC2543引脚功能表

3.2.3TLC时序图

TLC时序图如图3.2.3所示。

图3.2.3用CS进行12个时钟传送的工作时序图

(注:

在编程时一定要严格遵守时序。

3.2.4TLC指令功能

TLC指令功能如图3.2.4所示

图3.2.4TLC指令功能

(说明:

发送指令和接受数据可同时进行也可先发指令再接收数据,但是接收到的数据是上一次选通的通道转换的数据。

3.374LS164

3.3.174LS164简介

8位串行输入,并出移位寄存器

74ls164、74lsT164是高速硅门 COMS器件,与低功耗肖特基型TTL(LSTTL)器件的引脚兼容。

74HC164、74HCT164是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。

数据通过两个输入端(DSA或DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。

两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。

时钟(CP)每次由低变高时,数据右移一位,输入到Q0,Q0是两个数据输入端(DSA和DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。

主复位(MR)输入端上的一个低电平将使其它所有输入端都无效,非同步地清除寄存器,强制所有的输出为低电平。

74LS164引脚图

74LS164逻辑图

3.3.274LS164使用时序

H=HIGH(高)电平

h=先于低-至-高时钟跃变一个建立时间(set-uptime)的HIGH(高)电平

L=LOW(低)电平

l=先于低-至-高时钟跃变一个建立时间(set-uptime)的LOW(低)电平

q=小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入(referencedinput)的状态↑=低-至-高时钟跃变

 

4软件设计

4.1程序流程图

数字电压表的程序流程图如图5.1所示。

 

图5.1数字直流电压表程序流程图

 

4.2程序代码

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitdoult=P0^5;

sbitAA=P0^0;

sbitBB=P0^1;

sbitCC=P0^2;

sbitSDA=P0^3;//数据总线

sbitSCK=P0^4;//时钟

sbitkey0=P1^0;

sbitkey1=P1^1;

sbitkey2=P1^2;

sbitkey3=P1^3;

sbitLED=P2^6;

uintdis[10];

uintdis3[10];

uintdis4[10];

ucharyy=2,fz,di,yun,dt,n,shift;

uintsum1=0;

ucharkey=0,flag=0;

 

voidK_deal(ucharkey);

ucharcodestrint2[]={"当前电压:

"};

ucharcodestrint4[]={"电压上限:

"};

ucharcodestrint5[]={"电压下限:

"};

ucharcodestrint3[]={"ABCD963E852F7410"};

 

/**********AD转化函数********/

uintTLC2543(ucharport)

{

uintad=0;

uchari;

SCK=0;

AA=0;

BB=0;

port<<=4;

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

{

if(doult==1)ad|=0x01;

SDA=port&0x80;

SCK=1;

_nop_();

_nop_();

_nop_();

SCK=0;

_nop_();

_nop_();

_nop_();

port=port<<1;

ad=ad<<1;

}

AA=1;

BB=1;

ad=ad>>1;

returnad;

}

/**************延时**************/

voiddelayms(ucharx)

{

uchari,j;

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

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

}

voidSend_Byte(uchardat)

{

uchari;

SCK=0;

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

{SDA=dat&0x80;

SCK=1;

dat<<=1;

SCK=0;

}

}

//读一个字节

ucharRead_Byte(void)

{

uchari;

uintbyte=0;

SCK=0;

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

{byte<<=1;

SCK=1;

if(SDA)

byte|=0x0001;

SCK=0;

}

byte=((byte>>4)|(byte>>8))&0x00ff;

return((uchar)(byte));

}

//读忙标志

voidRead_Busy(void)

{

uchartemp;

//CS=1;

do

{

Send_Byte(0xfc);//

temp=Read_Byte();//

}

while(temp&0x80);

//CS=0;

}

//写字节命令

voidWrite_Cmd(ucharcmd)

{

uchartemph=0;

uchartempl=0;//

temph=cmd&0xf0;

templ=(cmd&0x0f)<<4;

Read_Busy();

//CS=1;

Send_Byte(0XF8);//

Send_Byte(temph);

Send_Byte(templ);

//CS=0;

}

//写数据

voidWrite_Dat(uchardat)

{

uchartemph=0;

uchartempl=0;//

temph=dat&0xf0;

templ=(dat&0x0f)<<4;

Read_Busy();

//CS=1;

Send_Byte(0XFA);//

Send_Byte(temph);//

Send_Byte(templ);

//CS=0;

}

voidpos(ucharx,uchary)

{

ucharaddr;

switch(y)

{

case0:

addr=0x80+x;break;

case1:

addr=0x90+x;break;

case2:

addr=0x88+x;break;

case3:

addr=0x98+x;break;

default:

break;

}

Write_Cmd(addr);

}

/****************液晶初始化*********/

voidLCD_Init(void)

{

AA=1;

BB=1;

CC=0;

Write_Cmd(0X30);

Write_Cmd(0X01);

Write_Cmd(0X02);

Write_Cmd(0X0C);

}

voidLcd_display(ucharkey)

{uchari;

AA=1;

BB=1;

CC=0;

pos(0,0);

i=0;

while(strint2[i]!

='\0')

{

Write_Dat(strint2[i]);

i++;

}

pos(0,1);

i=0;

while(strint4[i]!

='\0')

{

Write_Dat(strint4[i]);

i++;

}

pos(0,2);

i=0;

while(strint5[i]!

='\0')

{

Write_Dat(strint5[i]);

i++;

}

pos(5,3);

Write_Dat(strint3[key]);

 

}

voidAD_change()

{uinthigh1=0,high2=0,high3=0,high4=0;

uintad=0;

ad=TLC2543(0x01);

 

ad=(float)ad/4096*5000;

high1=ad/1000;

//if(high1sum3)

//{

high2=ad%1000/100;

high3=ad%100/10;

high4=ad%10;

pos(5,0);

Write_Dat(high1+0X30);

Write_Dat('.');

Write_Dat(high2+0X30);

Write_Dat(high3+0X30);

Write_Dat(high4+0X30);}

/**********矩阵按键*******************/

voidkeyscan()

{

uchartemp;

if(flag==0)

Send_Byte(0x0e);//11111110

flag=1;

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delayms(5);

temp=temp&0x0f;

if(temp!

=0x0f)

{

switch(temp)

{

case0x0e:

key=0;

break;

case0x0d:

key=1;

break;

case0x0b:

key=2;

break;

case0x07:

key=3;

break;

}

while(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

}

K_deal(key);

}

}

if(flag==1)

Send_Byte(0x0d);//11111101

flag=2;

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delayms(5);

temp=temp&0x0f;

if(temp!

=0x0f)

{

switch(temp)

{

case0x0e:

key=4;

break;

case0x0d:

key=5;

break;

case0x0b:

key=6;

break;

case0x07:

key=7;

break;

}

while(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

}

K_deal(key);

}

}

if(flag==2)

Send_Byte(0x0b);//11111011

flag=3;

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delayms(5);

temp=temp&0x0f;

if(temp!

=0x0f)

{

switch(temp)

{

case0x0e:

key=8;

break;

case0x0d:

key=9;

break;

case0x0b:

key=10;

break;

case0x07:

key=11;

break;

}

while(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

}

K_deal(key);

}

}

if(flag==3)

Send_Byte(0x07);//11110111

flag=4;

temp=P1;

temp=temp&0x0f;

if(temp!

=0x0f)

{

delayms(5);

temp=temp&0x0f;

if(temp!

=0x0f)

{

switch(temp)

{

case0x0e:

key=12;

break;

case0x0d:

key=13;

break;

case0x0b:

key=14;

break;

case0x07:

key=15;

break;

}

while(temp!

=0x0f)

{

temp=P1;

temp=temp&0x0f;

}

K_deal(key);

}

}

flag=0;

}

/*************按键处理*********/

voidK_deal(ucharkey)

{

ucharj,p=0,m,x;

uintl,i,k;

if(key==15)

{fz++;

l=0x30;

k=0;

dis[fz]=0;

}

if(key==14)

{fz++;

l=0x30;

k=1;

dis[fz]=1;

}

if(key==13)

{fz++;

l=0x30;

k=4;

dis[fz]=4;

}

if(key==12)

{fz++;

l=0x30;

k=7;

dis[fz]=k;

}

if(key==10)

{fz++;

l=0x30;

k=2;

dis[fz]=k;

}

if(key==9)

{fz++;

k=5;

l=0x30;

dis[fz]=k;

}

if(key==8)

{fz++;

k=8;

l=0x30;

dis[fz]=k;

}

if(key==6)

{fz++;

k=3;

l=0x30;

dis[fz]=k;

}

if(key==5)

{fz++;

k=6;

l=0x30;

dis[fz]=k;

}

if(key==4)

{fz++;

k=9;

l=0x30;

dis[fz]=k;

}

if(key==3)

{

uchari;

di=1;

if(di==1)

{yun=1;

m=1;

l=1;

j=fz;

for(;fz>0;fz--)

{

for(i=fz;i>1;i--)

m=m*10;

m=m*dis[l];

l++;

sum1=sum1+m;

m=1;

}

fz=0;

di=9;

}

//i=sum1;

}

if(key==1)

{

pos(7,1);

i=sum1;

//sum2=sum1;

for(x=0;x

{

sum1=sum1/10;

p++;

}

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

{dis3[j]=i%10;

i=i/10;

}

for(j=1;j<=p;j++)

{

Write_Dat(0x30+dis3[j]);

}

i=0;

}

if(key==2)

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

当前位置:首页 > 自然科学

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

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