智能仪器原理及应用.docx
《智能仪器原理及应用.docx》由会员分享,可在线阅读,更多相关《智能仪器原理及应用.docx(18页珍藏版)》请在冰点文库上搜索。
![智能仪器原理及应用.docx](https://file1.bingdoc.com/fileroot1/2023-5/27/1570b2e4-8812-4a75-97de-af16bfaf724e/1570b2e4-8812-4a75-97de-af16bfaf724e1.gif)
智能仪器原理及应用
(2013—2014学年第一学期)实验报告
课程名称《智能仪器原理及应用》
专业班级
姓名学号姓名学号
指导教师
所在学院信息科技学院
2013年10月
目录
实验项目一智能仪器输入输出接口技术的设计与实现
实验项目二智能仪器人机接口技术的设计与实现
实验项目三智能仪器通讯接口技术的设计与实现
实验项目四简单智能仪器的设计与实现
实验项目一智能仪器输入输出接口技术的设计与实现
1.实验目的
⑴了解ADC0808基本工作原理与使用方法;
⑵掌握MCS-51单片机ADC程序的基本设计方法。
2.实验内容
基本部分:
利用AT89C51和ADC0808设计一个简单的数字电压表,测量范围0-4.99V,并将结果以二进制的方式在P1口上显示;
提高部分:
将数字电压表的测量范围改为0-9.99V;
将基本部分的单通道数字电压表设计成一个8通道的数字电压表。
3.实验电路框图
4.实验任务分析
⑴硬件电路说明
⑵软件设计说明
5.实验流程框图
6.实验过程记录
⑴实验过程
⑵问题及解决方法
7.实验总结
⑴
8.成绩评定
附录实验源程序
实验项目二智能仪器人机接口技术的设计与实现
1.实验目的
⑴了解LED数码管的基本工作原理与使用范围;
⑵掌握LED数码管静态显示程序的基本设计方法;
⑶掌握LED数码管动态显示程序的基本设计方法;
2.实验内容
基本部分:
用LED数码管设计一个0—99秒的计数器,LED的显示方式可以采用静态显示方式实现;
提高部分:
用LED数码管设计一个0—99.99秒的计数器,LED的显示方式采用动态显示方式实现。
3.实验电路框图
4.实验任务分析
⑴硬件电路说明
⑵软件设计说明
5.实验流程框图
6.实验过程记录
⑴实验过程
⑵问题及解决方法
7.实验总结
⑴
⑵
8.成绩评定
附录实验源程序
实验项目三智能仪器通讯接口技术的设计与实现
1.实验目的
⑴了解MCS-51单片机串口的基本工作原理与使用范围;
⑵掌握MCS-51单片机串口通讯程序的基本设计方法。
2.实验内容
基本部分:
在PROTEUS软件中采用串口虚拟终端,编写一个发送程序,将自己的学号发送到虚拟终端显示;
提高部分:
在单片机甲的P1口接8个开关,再单片机乙的P1口接8个LED,编写程序,将单片机甲的开关状态在单片机乙上显示出来。
3.实验电路框图
4.实验任务分析
⑴硬件电路说明
⑵软件设计说明
5.实验流程框图
6.实验过程记录
⑴实验过程
⑵问题及解决方法
7.实验总结
⑴
⑵
8.成绩评定
附录实验源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidTxData(ucharx)
{
SBUF=x;
while(TI==0);
TI=0;
}
voidsend(uchar*str,uintstrlen)
{
uintk=0;
do
{
TxData(*(str+k));
k++;
}while(k}
voidmain()
{
PCON=0x00;
SCON=0x40;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
while
(1)
{
send("201005014102",12);
}
}
实验项目四简单智能仪器的设计与实现
-----基于AT89C51的简单电子万年历
1.实验目的
⑴了解电子万年历的基本工作原理与使用方法;
⑵掌握AT89C51设计电子万年历的基本方法。
2.实验内容
基本部分:
利用AT89C51和7段LED数码管设计一个简单的电子万年历,能显示时间、星期、年、月、日,并能进行设置;
提高部分:
将电子万年历增加一个闹钟功能;
当设定的闹钟时间到时,让单片机演奏一段音乐。
3.实验电路框图
4.实验任务分析
⑴硬件电路说明
⑵软件设计说明
5.实验流程框图
6.实验过程记录
⑴实验过程
⑵问题及解决方法
7.实验总结
⑴
8.成绩评定
附录实验源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管是共ying
uchari,s=0,m=0,h=0,moshi,b=0;
uintyear=2013,month=10,day=22,a,qian,bia,shi;
sbitS1=P1^0;//时和年校准
sbitS2=P1^1;//分和月校准
sbitS3=P1^2;//模式切换
sbitS4=P1^3;//秒和天校准
sbitS5=P1^4;//复位
voidtimer()//=================初值
{
TMOD=0x01;ET0=1;EA=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
voiddelay_time()//延时函数
{
uchari;
for(i=0;i<200;i++);
}
voiddelay30ms(void)//去抖动
{
unsignedcharx,y;
for(x=0;x<200;x++)
for(y=0;y<200;y++);
}
voidkey_scan1(void)//==================按键子函数1
{
if(S1==0)//时校准
{
delay30ms();
if(S1==0)
h++;
if(h==24)
h=0;
while(S1==0);//键盘是否弹出
}
if(S2==0)//分校准
{
delay30ms();
if(S2==0)
m++;
if(m==60)
m=0;
while(S2==0);
}
if(S3==0)//切换万年历
{
delay30ms();
if(S3==0)
b++;
if(b==2)
b=0;
while(S3==0);
}
if(S4==0)//秒校准
{
delay30ms();
if(S4==0)
s++;
if(s==60)
s=0;
while(S4==0);
}
if(S5==0)//复位
{
delay30ms();
if(S5==0)
{
s=0;m=0;h=0;
}
while(S5==0);
}
}
voidkey_scan2(void)//==================按键子函数2
{
if(S1==0)//年校准
{
delay30ms();
if(S1==0)
year++;
while(S1==0);
}
if(S2==0)//月校准
{
delay30ms();
if(S2==0)
month++;
if(month==13)
month=1;
while(S2==0);
}
if(S3==0)//切换数字钟
{
delay30ms();
if(S3==0)
b++;
if(b==2)
b=0;
while(S3==0);
}
if(S4==0)//日校准
{
delay30ms();
if(S4==0)
day++;
if(day==a+1)
day=1;
}
while(S4==0);
}
voidhms(void)//===============数字钟子函数
{
P3=0xfe;//显示时的十位和个位
P0=Tab[h/10];
delay_time();
P3=0xfd;
P0=Tab[h%10];
delay_time();
P3=0xdf;//显示小数点
P0=0x40;
delay_time();
P3=0xf7;//显示分的十位和个位
P0=Tab[m/10];
delay_time();
P3=0xef;
P0=Tab[m%10];
delay_time();
P3=0xfb;//显示小数点
P0=0x40;
delay_time();
P3=0xbf;//显示秒的十位和个位
P0=Tab[s/10];
delay_time();
P3=0x7f;
P0=Tab[s%10];
delay_time();
}
voidwannianli(void)//===================万年历子函数
{
P3=0xff;//消影(清零)
P0=0x00;
P3=0xfe;
qian=year/1000;
P0=Tab[qian];//2
delay_time();
P3=0xff;//消影(清零)
P0=0x00;
P3=0xfd;
bia=year/100%10;
P0=Tab[bia];//0
delay_time();
P3=0xff;//消影(清零)
P0=0x00;
P3=0xfb;
shi=(year-qian*1000-bia*100)/10;
P0=Tab[shi];
delay_time();
//shiwei
P3=0xff;//消影(清零)
P0=0x00;
P3=0xf7;
P0=Tab[year%10];//2
delay_time();
P3=0xff;
P0=0x00;//消影(清零)
P3=0xef;
P0=Tab[month/10];
delay_time();
P3=0xff;//消影(清零)
P0=0x00;
P3=0xdf;
P0=Tab[month%10];
delay_time();
P3=0xff;//消影(清零)
P0=0x00;
P3=0xbf;
P0=Tab[day/10];
delay_time();
P3=0xff;//消影(清零)
P0=0x00;
P3=0x7f;
P0=Tab[day%10];
delay_time();
}
voidmain()//=====================主函数
{
timer();
while
(1)
{
switch(b)
{
case0:
hms();break;
case1:
wannianli();break;
default:
break;
}
if(b==0)//键扫描
{
key_scan1();
}
if(b==1)
key_scan2();
}
}
voidint_time1()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==10)//=============时分秒的进位设置
{
i=0;
s++;
if(s>=59)
{
s=0;
m++;
if(m>=59)
{
m=0;h++;
if(h>=23)
h=0;day++;
}
}
}//=================年月日的设置
if(month==4||month==6||month==9||month==11)
{
a=30;
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
a=31;
}
if(month==2)
{
if(year%100&&(year%4==0)||(year%100==0&&year%400==0))
{
a=29;
}
else
{
a=28;
}
}
if(month>=13)
{
month=1;year++;day=1;
}
if(day>=a+1)
{
month++;day=1;
}
}