《智能仪器设计基础》实验指导书.docx

上传人:b****5 文档编号:6609666 上传时间:2023-01-08 格式:DOCX 页数:66 大小:792.93KB
下载 相关 举报
《智能仪器设计基础》实验指导书.docx_第1页
第1页 / 共66页
《智能仪器设计基础》实验指导书.docx_第2页
第2页 / 共66页
《智能仪器设计基础》实验指导书.docx_第3页
第3页 / 共66页
《智能仪器设计基础》实验指导书.docx_第4页
第4页 / 共66页
《智能仪器设计基础》实验指导书.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

《智能仪器设计基础》实验指导书.docx

《《智能仪器设计基础》实验指导书.docx》由会员分享,可在线阅读,更多相关《《智能仪器设计基础》实验指导书.docx(66页珍藏版)》请在冰豆网上搜索。

《智能仪器设计基础》实验指导书.docx

《智能仪器设计基础》实验指导书

 

《智能仪器设计基础》

实验指导书

 

成都理工大学

核技术与自动化工程学院

电气工程系

2012-9-10

实验1单片机8255并行I/O扩展

一、实验目的:

通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握Proteus7软件的使用、单片机的并行I/O扩展原理及8255芯片的工作原理。

二、实验环境:

计算机、Proteus7软件、KeilC

三、实验步骤:

1、电路原理图设计

参考原理图:

2、在KeilC软件平台下编写程序代码,参考如下:

#include

#include

#defineCOM8255XBYTE[0x007F]

#definePA8255XBYTE[0x007C]

#definePB8255XBYTE[0x007D]

#definePC8255XBYTE[0x007E]

#defineucharunsignedchar

voidmain()

{

COM8255=0x8E;

while

(1)

{

PA8255=0xFF;

}

}

3、Proteus7软件平台下实现软硬件仿真,效果如下:

实验2单片机的LCD驱动实验

一、实验目的:

通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握51内核单片机的LCD驱动接口设计及驱动程序的编写原则。

二、实验环境:

计算机、Proteus7软件、KeilC

三、实验步骤:

1、电路原理图设计

参考原理图:

2、在KeilC软件平台下编写程序代码,参考如下:

;LCDDisplayDriverDemo.

;Timingcodeassumes1.2MHzClock

;LCDRegistersaddresses

LCD_CMD_WRequ0

LCD_DATA_WRequ1

LCD_BUSY_RDequ2

LCD_DATA_RDequ3

;LCDCommands

LCD_CLSequ1

LCD_HOMEequ2

LCD_SETMODEequ4

LCD_SETVISIBLEequ8

LCD_SHIFTequ16

LCD_SETFUNCTIONequ32

LCD_SETCGADDRequ64

LCD_SETDDADDRequ128

;Resetvector

org0000h

jmpstart

 

;Startoftheprogram

org0100h

string1a:

db'!

!

AMAZING!

!

'

db0

string1b:

db'!

!

AMAZING!

!

'

db0

string2:

db'AvirtualLM032L...'

db0

string3:

db'drivenbyavirtual'

db0

string4:

db'8051processor!

'

db0

start:

movA,#038h

callwrcmd

loop:

movA,#LCD_SETVISIBLE+6;Makethedisplay&blinkvisible:

callwrcmd

movR7,#2

loop2:

movDPTR,#string1a

callwrstr

movDPTR,#200

callwtms

movA,#LCD_CLS;Clearscreen

callwrcmd

movDPTR,#string1b

callwrstr

movDPTR,#200

callwtms

movA,#LCD_CLS;Clearscreen

callwrcmd

djnzR7,loop2

movDPTR,#string1a

callwrstr

movDPTR,#400

callwtms

movA,#LCD_SETDDADDR+64

callwrcmd

movDPTR,#string2

callwrslow

movDPTR,#200

callwtms

movA,#LCD_CLS;Clearscreen

callwrcmd

movDPTR,#string3

callwrslow

movA,#LCD_SETDDADDR+64

callwrcmd

movDPTR,#string4

callwrslow

movA,#LCD_SETVISIBLE+7;Showtheblinkcursoraswell.

callwrcmd

movDPTR,#2000

callwtms

movA,#LCD_CLS;Clearscreen

callwrcmd

jmploop

 

;SubroutinetowritenullterminatedstringatDPTRinprogramram.

wrstr:

movR0,#LCD_DATA_WR

wrstr1:

clrA

movcA,@A+DPTR

jzwrstr2

movx@R0,A

callwtbusy

incDPTR

pushDPL

pushDPH

popDPH

popDPL

jmpwrstr1

wrstr2:

ret

;SubroutinetowritenullterminatedstringatDPTRinprogramram.Slowly

wrslow:

movR0,#LCD_DATA_WR

wrslw1:

clrA

movcA,@A+DPTR

jzwrslw2

movx@R0,A

callwtbusy

incDPTR

pushDPL

pushDPH

movDPTR,#100

callwtms

popDPH

popDPL

jmpwrslw1

wrslw2:

ret

 

;Subroutinetowritecommand:

wrcmd:

movR0,#LCD_CMD_WR

movx@R0,A

jmpwtbusy

 

;Subroutinetowritecharacter:

wrchar:

movR0,#LCD_DATA_WR

movx@R0,A

;Subroutinetowaitforbusyclear

wtbusy:

movR1,#LCD_BUSY_RD

movxA,@r1

jbACC.7,wtbusy

ret

;WaitfornumberofsecondsinA

wtsec:

pushACC

callwtms

popACC

decA

jnzwtsec

ret

;WaitfornumberofmillisecondsinDPTR

wtms:

xrlDPL,#0FFh;Can'tdoDECDPTR,sodotheloopbyforming2'scomplement

xrlDPH,#0FFh;andincrementinginstead.

incDPTR

wtms1:

movTL0,#09Ch;100ticksbeforeoverflow=1msat1.2MHzClock

movTH0,#0FFh

movTMOD,#1;Timer0mode1

setbTCON.4;Timer0runs

wtms2:

jnbTCON.5,wtms2

clrTCON.4;Timer0stops

clrTCON.5

incDPTR

movA,DPL

orlA,DPH

jnzwtms1

ret

END

3、Proteus7软件平台下实现软硬件仿真,效果如下:

实验3SPI接口实验——DS1302时钟

一、实验目的:

通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握SPI工作原理,并掌握DS1302时钟的软硬件实现方法。

二、实验环境:

计算机、Proteus7软件、KeilC

三、实验步骤:

1、电路原理图设计

参考原理图:

2、在KeilC软件平台下编写程序代码,参考如下:

#include

#include"LCD1602.h"

#include"DS1302.h"

voidDelay1ms(unsignedintcount)

{

unsignedinti,j;

for(i=0;i

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

}

main()

{

SYSTEMTIMECurrentTime;

LCD_Initial();

Initial_DS1302();

GotoXY(0,0);

Print("Date:

");

GotoXY(0,1);

Print("Time:

");

while

(1)

{

DS1302_GetTime(&CurrentTime);

DateToStr(&CurrentTime);

TimeToStr(&CurrentTime);

GotoXY(6,0);

Print(CurrentTime.DateString);

GotoXY(6,1);

Print(CurrentTime.TimeString);

Delay1ms(300);

}

}

3、Proteus7软件平台下实现软硬件仿真,效果如下:

实验41-Wire接口实验——DS18b20温度

一、实验目的:

通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握1-Wire工作原理,并掌握DS18b20温度的软硬件实现方法。

二、实验环境:

计算机、Proteus7软件、KeilC

三、实验步骤:

1、电路原理图设计

参考原理图:

2、在KeilC软件平台下编写程序代码,参考如下:

#include//用AT89C51时就用这个头文件

//#include//用华邦W78E58B时必须用这个头文件

#include

#include

#include

#include

#include

#include

#include"LCD1602.h"////液晶显示头文件

//sbitDQ=P3^4;//定义DQ引脚为P3.4

unsignedchart[2],*pt;//用来存放温度值,测温程序就是通过这个数组与主函数通信的

unsignedcharTempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};

//显示实时温度,上电时显示+125.00C

unsignedcharTempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,

0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};

//显示温度上下限,上电时显示TH:

+125TL:

+124C

unsignedcharcodedotcode[4]={0,25,50,75};

/***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******

再将表值分离出十位和个位后送到十分位和百分位********************/

 

voidcovert0(unsignedcharTH,unsignedcharTL)//将温度上下限转换为LCD显示的数据

{

if(TH>0x7F)//判断正负,如果为负温,将其转化为其绝对值

{

TempBuffer0[3]=0x2d;//0x2d为"-"的ASCII码

TH=~TH;

TH++;

}

elseTempBuffer0[3]=0x2b;//0x2B为"+"的ASCII码

if(TL>0x7f)

{

TempBuffer0[11]=0x2d;//0x2d为"-"的ASCII码

TL=~TL+1;

}

elseTempBuffer0[11]=0x2b;//0x2B为"+"的ASCII码

TempBuffer0[4]=TH/100+0x30;//分离出TH的百十个位

if(TempBuffer0[4]==0x30)TempBuffer0[4]=0xfe;//百位数消隐

TempBuffer0[5]=(TH%100)/10+0x30;//分离出十位

TempBuffer0[6]=(TH%100)%10+0x30;//分离出个位

TempBuffer0[12]=TL/100+0x30;//分离出TL的百十个位

if(TempBuffer0[12]==0x30)TempBuffer0[12]=0xfe;//百位数消隐

TempBuffer0[13]=(TL%100)/10+0x30;//分离出十位

TempBuffer0[14]=(TL%100)%10+0x30;//分离出个位

}

 

voidcovert1(void)//将温度转换为LCD显示的数据

{

unsignedcharx=0x00,y=0x00;

t[0]=*pt;

pt++;

t[1]=*pt;

if(t[1]>0x07)//判断正负温度

{

TempBuffer1[0]=0x2d;//0x2d为"-"的ASCII码

t[1]=~t[1];/*下面几句把负数的补码*/

t[0]=~t[0];/*换算成绝对值*********/

x=t[0]+1;/***********************/

t[0]=x;/***********************/

if(x>255)/**********************/

t[1]++;/*********************/

}

elseTempBuffer1[0]=0x2b;//0xfe为变"+"的ASCII码

t[1]<<=4;//将高字节左移4位

t[1]=t[1]&0x70;//取出高字节的3个有效数字位

x=t[0];//将t[0]暂存到X,因为取小数部分还要用到它

x>>=4;//右移4位

x=x&0x0f;//和前面两句就是取出t[0]的高四位

t[1]=t[1]|x;//将高低字节的有效值的整数部分拼成一个字节

TempBuffer1[1]=t[1]/100+0x30;//+0x30为变0~9ASCII码

if(TempBuffer1[1]==0x30)TempBuffer1[1]=0xfe;//百位数消隐

TempBuffer1[2]=(t[1]%100)/10+0x30;//分离出十位

TempBuffer1[3]=(t[1]%100)%10+0x30;//分离出个位

t[0]=t[0]&0x0c;//取有效的两位小数

t[0]>>=2;//左移两位,以便查表

x=t[0];

y=dotcode[x];//查表换算成实际的小数

TempBuffer1[5]=y/10+0x30;//分离出十分位

TempBuffer1[6]=y%10+0x30;//分离出百分位

}

voiddelay(unsignedchari)

{

while(i--);

}

main()

{

unsignedcharTH=110,TL=-20;//下一步扩展时可能通过这两个变量,调节上下限

//测温函数返回这个数组的头地址

while

(1)

{

pt=ReadTemperature(TH,TL,0x3f);//上限温度-22,下限-24,分辨率10位,也就是0.25C

//读取温度,温度值存放在一个两个字节的数组中,

delay(100);

covert1();

covert0(TH,TL);

LCD_Initial();//第一个参数列号,第二个为行号,为0表示第一行

//为1表示第二行,第三个参数为显示数据的首地址

LCD_Print(0,0,TempBuffer0);

LCD_Print(0,1,TempBuffer1);

}

}

3、Proteus7软件平台下实现软硬件仿真,效果如下:

实验5A/D转换实验

一、实验目的:

通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握A/D工作原理,并掌握AD0808的软硬件实现方法。

二、实验环境:

计算机、Proteus7软件、KeilC

三、实验步骤:

1、电路原理图设计

参考原理图:

2、在KeilC软件平台下编写程序代码,参考如下:

#include

#include"1602.h"

#defineucharunsignedchar

#defineuintunsignedint

uchar*p,a[3];

voiduchar2string(uchar);

voidLCD_disp_string(ucharx,uchary,uchar*Date);

sbitEOC=P3^0;

sbitST=P3^6;

sbitOE=P3^7;

voidmain()

{

ucharconvertnum;

uinttemp;

P2=0xff;

P3=0xff;

p=a;

LCD_init(0x38,0x0c,0x04,LCD_CLEAR_SCREEN);

delay_ms(10);

LCD_disp_string(0,0,"AD0808Show:

");

LCD_disp_string(0,1,"Value:

");

while

(1)

{

ST=0;

ST=1;

ST=0;

while(EOC==0)

OE=1;

convertnum=P2;

OE=0;

temp=convertnum*5;

temp=temp/256;

convertnum=temp;

uchar2string(convertnum);

LCD_disp_string(7,1,p);

delay_ms

(1);

}

}

/********************显示函数*******************/

voidLCD_disp_string(ucharx,uchary,uchar*Data)

{

if(y==LINE1)

{

LCD_send_command(LINE1_HEAD+x);

for(;x

='\0';x++)

{

LCD_send_data(*(Data++));

}

}

if(y==LINE2)

{

LCD_send_command(LINE2_HEAD+x);

for(;x

='\0';x++)

{

LCD_send_data(*(Data++));

}

}

}

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

voiduchar2string(ucharcons)

{unsignedintb;

a[2]=cons%10+'0';

b=cons/10;

a[1]=b%10+'0';

a[0]=b/10+'0';

}

3、Proteus7软件平台下实现软硬件仿真,效果如下:

实验6综合实验——基于51的电子计算器

一、实验目的:

通过本次实验,对学生的综合设计能力进行锻炼,掌握实际开发项目的设计开发流程。

二、实验环境:

计算机、Proteus7软件、KeilC

三、实验步骤:

1、电路原理图设计

参考原理图:

2、在KeilC软件平台下编写程序代码,参考如下:

;4FUNCTIONCALCULATORPROGRAM

;Assumes1.2MHzClockforscantiming.

;TODO:

CustomCharacterforthe'M'sign

;Checkinstancesofmultipledecimalpointpresses(allcovered?

;Resetvector

org0000h

jmpstart

;Startoftheprogram

org0100h

start:

movA,#030h;1line,8bits

callwrcmd

movA,#LCD_SETVISIBLE+4

callwrcmd

movA,#LCD_SETDDADDR+15;Startatrighthandsideofthedisplay

callwrcmd

movA,#LCD_SETMODE+3;AutomaticIncrement-Displayshiftleft.

callwrcmd

mov025h,#00h;Setoutputmode(floatingpoint).

callboundsbuffer;Initialisetheboundsbuffer-usedforerrorchecking.

movmode,#4;Initialisethe

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

当前位置:首页 > 医药卫生 > 基础医学

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

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