《智能仪器设计基础》实验指导书文档格式.docx
- 文档编号:19623414
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:66
- 大小:792.93KB
《智能仪器设计基础》实验指导书文档格式.docx
《《智能仪器设计基础》实验指导书文档格式.docx》由会员分享,可在线阅读,更多相关《《智能仪器设计基础》实验指导书文档格式.docx(66页珍藏版)》请在冰豆网上搜索。
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:
string2:
AvirtualLM032L...'
string3:
drivenbyavirtual'
string4:
8051processor!
'
start:
movA,#038h
callwrcmd
loop:
movA,#LCD_SETVISIBLE+6;
Makethedisplay&
blinkvisible:
movR7,#2
loop2:
movDPTR,#string1a
callwrstr
movDPTR,#200
callwtms
movA,#LCD_CLS;
Clearscreen
movDPTR,#string1b
djnzR7,loop2
movDPTR,#400
movA,#LCD_SETDDADDR+64
movDPTR,#string2
callwrslow
movDPTR,#string3
movDPTR,#string4
movA,#LCD_SETVISIBLE+7;
Showtheblinkcursoraswell.
movDPTR,#2000
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:
wrslw1:
jzwrslw2
movDPTR,#100
callwtms
jmpwrslw1
wrslw2:
Subroutinetowritecommand:
wrcmd:
movR0,#LCD_CMD_WR
jmpwtbusy
Subroutinetowritecharacter:
wrchar:
Subroutinetowaitforbusyclear
wtbusy:
movR1,#LCD_BUSY_RD
movxA,@r1
jbACC.7,wtbusy
WaitfornumberofsecondsinA
wtsec:
pushACC
popACC
decA
jnzwtsec
WaitfornumberofmillisecondsinDPTR
wtms:
xrlDPL,#0FFh;
Can'
tdoDECDPTR,sodotheloopbyforming2'
scomplement
xrlDPH,#0FFh;
andincrementinginstead.
wtms1:
movTL0,#09Ch;
100ticksbeforeoverflow=1msat1.2MHzClock
movTH0,#0FFh
movTMOD,#1;
Timer0mode1
setbTCON.4;
Timer0runs
wtms2:
jnbTCON.5,wtms2
clrTCON.4;
Timer0stops
clrTCON.5
movA,DPL
orlA,DPH
jnzwtms1
END
实验3SPI接口实验——DS1302时钟
通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握SPI工作原理,并掌握DS1302时钟的软硬件实现方法。
#include<
REGX52.H>
#include"
LCD1602.h"
DS1302.h"
voidDelay1ms(unsignedintcount)
{
unsignedinti,j;
for(i=0;
i<
count;
i++)
for(j=0;
j<
120;
j++);
main()
SYSTEMTIMECurrentTime;
LCD_Initial();
Initial_DS1302();
GotoXY(0,0);
Print("
Date:
"
);
GotoXY(0,1);
Time:
DS1302_GetTime(&
CurrentTime);
DateToStr(&
TimeToStr(&
GotoXY(6,0);
Print(CurrentTime.DateString);
GotoXY(6,1);
Print(CurrentTime.TimeString);
Delay1ms(300);
实验41-Wire接口实验——DS18b20温度
通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握1-Wire工作原理,并掌握DS18b20温度的软硬件实现方法。
at89x51.h>
//用AT89C51时就用这个头文件
//#include<
reg52.h>
//用华邦W78E58B时必须用这个头文件
ctype.h>
math.h>
stdio.h>
string.h>
DS18B20.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,'
//显示温度上下限,上电时显示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为"
+"
if(TL>
0x7f)
TempBuffer0[11]=0x2d;
TL=~TL+1;
elseTempBuffer0[11]=0x2b;
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;
t[1]=~t[1];
/*下面几句把负数的补码*/
t[0]=~t[0];
/*换算成绝对值*********/
x=t[0]+1;
/***********************/
t[0]=x;
/***********************/
if(x>
255)/**********************/
t[1]++;
/*********************/
elseTempBuffer1[0]=0x2b;
//0xfe为变"
t[1]<
<
=4;
//将高字节左移4位
t[1]=t[1]&
0x70;
//取出高字节的3个有效数字位
x=t[0];
//将t[0]暂存到X,因为取小数部分还要用到它
x>
>
//右移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;
//左移两位,以便查表
y=dotcode[x];
//查表换算成实际的小数
TempBuffer1[5]=y/10+0x30;
//分离出十分位
TempBuffer1[6]=y%10+0x30;
//分离出百分位
}
voiddelay(unsignedchari)
while(i--);
unsignedcharTH=110,TL=-20;
//下一步扩展时可能通过这两个变量,调节上下限
//测温函数返回这个数组的头地址
{
pt=ReadTemperature(TH,TL,0x3f);
//上限温度-22,下限-24,分辨率10位,也就是0.25C
//读取温度,温度值存放在一个两个字节的数组中,
delay(100);
covert1();
covert0(TH,TL);
//第一个参数列号,第二个为行号,为0表示第一行
//为1表示第二行,第三个参数为显示数据的首地址
LCD_Print(0,0,TempBuffer0);
LCD_Print(0,1,TempBuffer1);
实验5A/D转换实验
通过学生在Proteus7软件平台实现电路图设计,使学生充分掌握A/D工作原理,并掌握AD0808的软硬件实现方法。
1602.h"
#defineuintunsignedint
uchar*p,a[3];
voiduchar2string(uchar);
voidLCD_disp_string(ucharx,uchary,uchar*Date);
sbitEOC=P3^0;
sbitST=P3^6;
sbitOE=P3^7;
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:
ST=0;
ST=1;
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<
LINE_LENGTH&
&
*Data!
='
x++)
{
LCD_send_data(*(Data++));
}
if(y==LINE2)
LCD_send_command(LINE2_HEAD+x);
/********************转化函数*******************/
voiduchar2string(ucharcons)
{unsignedintb;
a[2]=cons%10+'
0'
b=cons/10;
a[1]=b%10+'
a[0]=b/10+'
实验6综合实验——基于51的电子计算器
通过本次实验,对学生的综合设计能力进行锻炼,掌握实际开发项目的设计开发流程。
4FUNCTIONCALCULATORPROGRAM
Assumes1.2MHzClockforscantiming.
TODO:
CustomCharacterforthe'
M'
sign
Checkinstancesofmultipledecimalpointpresses(allcovered?
)
org0000h
jmpstart
org0100h
movA,#030h;
1line,8bits
callwrcmd
movA,#LCD_SETVISIBLE+4
movA,#LCD_SETDDADDR+15;
Startatrighthandsideofthedisplay
movA,#LCD_SETMODE+3;
AutomaticIncrement-Displayshiftleft.
mov025h,#00h;
Setoutputmode(floatingpoint).
callboundsbuffer;
Initialisetheboundsbuffer-usedforerrorchecking.
movmode,#4;
Initialisethe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能仪器设计基础 智能 仪器 设计 基础 实验 指导书