专业综合实验实验报告.docx
- 文档编号:18167440
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:13
- 大小:38.54KB
专业综合实验实验报告.docx
《专业综合实验实验报告.docx》由会员分享,可在线阅读,更多相关《专业综合实验实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
专业综合实验实验报告
实验报告
课程名称:
专业综合实验
实验名称:
温度电压检测器
专业:
机械电子工程
班级:
机电10-1班
姓名:
宋凯
学号:
17
指导教师:
闵振辉
一、实验目的
通过综合实验使学生掌握单片机的基本原理、指令系统、以及与其它外围硬件的连接,使学生掌握单片机的基本方法、锻炼学生单片机的编程以及开发能力。
通过本次实验使学生掌握以下几方面内容:
1.掌握单片机的基本原理与指令;
2.熟悉单片机常用检测系统的设计;
3.熟练掌握相关绘图软件的使用。
二、综合实验的主要内容
1.选择一个实验,画出硬件电路原理图;
2.编写单片机控制程序,并逐条解释;
3.利用开发板,验证程序正确性;
4.完成综合实验报告(附程序)。
5.将全部内容上交电子版
三、成员与分工
姓名
分工
于飞飞
选题、
郝亮
程序编辑与调试、画电路图
彭玮
程序调试
宋凯
开发板的调试
吴卓远
报告总结
附录1:
附录2:
程序
*************************************************************************/
#include
#include
#include
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
sbitSda=P2^0;//定义总线连接端口
sbitScl=P2^1;
sbitwei=P2^7;//定义总线连接端口
sbitduan=P2^6;
bitADFlag;//定义AD采样标志位
/**************************************************************************
延时程序
**************************************************************************/
voidmDelay(unsignedcharj)
{
unsignedinti;
for(;j>0;j--)
{
for(i=0;i<125;i++)
{;}
}
}
/**************************************************************************
初始化定时器1
*************************************************************************/
voidInit_Timer1(void)
{
TMOD|=0x10;
TH1=0xff;/*Initvalue*/
TL1=0x00;
//PT1=1;/*优先级*/
EA=1;/*interuptenable*/
ET1=1;/*enabletimer1interrupt*/
TR1=1;
}
/**************************************************************************
启动IIC总线
**************************************************************************/
voidStart(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Sda=0;
_nop_();
Scl=0;
}
/**************************************************************************
停止IIC总线
**************************************************************************/
voidStop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Sda=1;
_nop_();
Scl=0;
}
/**************************************************************************
应答IIC总线
**************************************************************************/
voidAck(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/**************************************************************************
非应答IIC总线
**************************************************************************/
voidNoAck(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/**************************************************************************
发送一个字节
**************************************************************************/
voidSend(unsignedcharData)
{
unsignedcharBitCounter=8;
unsignedchartemp;
do
{
temp=Data;
Scl=0;
_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/**************************************************************************
读入一个字节并返回
**************************************************************************/
unsignedcharRead(void)
{
unsignedchartemp=0;
unsignedchartemp1=0;
unsignedcharBitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();
Scl=1;
_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
/**************************************************************************
写入DA数模转换值
**************************************************************************/
voidDAC(unsignedcharData)
{
Start();
Send(AddWr);//写入芯片地址
Ack();
Send(0x40);//写入控制位,使能DAC输出
Ack();
Send(Data);//写数据
Ack();
Stop();
}
/**************************************************************************
读取AD模数转换的值,有返回值
**************************************************************************/
unsignedintReadADC(unsignedcharChl)
{
unsignedintData;
Start();//写入芯片地址
Send(AddWr);
Ack();
Send(0x40|Chl);//写入选择的通道,本程序只用单端输入,差分部分需要自行添加
//Chl的值分别为0、1、2、3,分别代表1-4通道
Ack();
Start();
Send(AddRd);//读入地址
Ack();
Data=Read();//读数据
Data=Data*196;//还原电压值近似
Data=Data/100;
Scl=0;
NoAck();
Stop();
returnData;//返回值
}
/**************************************************************************
主程序
**************************************************************************/
voidmain()
{
unsignedcharnum;//DA数模输出变量
unsignedcharADtemp;//定义中间变量
wei=1;
P0=0Xff;
wei=0;
duan=1;
P0=0X00;
duan=0;
LCD_Init();
LCD_Clear();//清屏
mDelay(20);
Init_Timer1();
while
(1)
{
DAC(num);//DA输出,可以用LED模拟电压变化
num++;//累加,到256后溢出变为0,往复循环。
显示在LED上亮度逐渐变化
mDelay(20);//延时用于清晰看出变化
if(ADFlag)//定时采集输入模拟量
{
ADFlag=0;
ADtemp=ReadADC(0);
TempData[0]=(ReadADC(0))/100;//处理0通道电压显示
TempData[1]=((ReadADC(0))%100)/10;
ADtemp=ReadADC
(1);
TempData[2]=(ReadADC
(1))/100;//处理1通道电压显示此通道暂时屏蔽,可以自行添加
TempData[3]=((ReadADC
(1))%100)/10;
ADtemp=ReadADC
(2);
TempData[4]=(ReadADC
(2))/100;//处理2通道电压显示此通道暂时屏蔽,可以自行添加
TempData[5]=((ReadADC
(2))%100)/10;
ADtemp=ReadADC(3);
TempData[6]=(ReadADC(3))/100;//处理3通道电压显示此通道暂时屏蔽,可以自行添加
TempData[7]=((ReadADC(3))%100)/10;
disp();
}
}
}
/**************************************************************************
定时器中断程序
**************************************************************************/
voidTimer1_isr(void)interrupt3using1//定时器1执行数码管动态扫描
{
staticunsignedintj;
TH1=0xfb;//重新赋值
TL1=0x00;
j++;
if(j==200)
{j=0;ADFlag=1;}//定时置位AD采样标志位
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专业 综合 实验 报告