专业综合实验实验报告Word格式文档下载.docx
《专业综合实验实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《专业综合实验实验报告Word格式文档下载.docx(13页珍藏版)》请在冰点文库上搜索。
![专业综合实验实验报告Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/bca80700-2d86-4b9c-be18-4a966cf06cb1/bca80700-2d86-4b9c-be18-4a966cf06cb11.gif)
3.熟练掌握相关绘图软件的使用。
二、综合实验的主要内容
1.选择一个实验,画出硬件电路原理图;
2.编写单片机控制程序,并逐条解释;
3.利用开发板,验证程序正确性;
4.完成综合实验报告(附程序)。
5.将全部内容上交电子版
三、成员与分工
姓名
分工
于飞飞
选题、
郝亮
程序编辑与调试、画电路图
彭玮
程序调试
宋凯
开发板的调试
吴卓远
报告总结
附录1:
附录2:
程序
*************************************************************************/
#include<
reg52.h>
//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<
intrins.h>
//包含NOP空指令函数_nop_();
LCD1602.h>
#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;
Sda=0;
Scl=0;
停止IIC总线
voidStop(void)
应答IIC总线
voidAck(void)
非应答IIC总线
voidNoAck(void)
发送一个字节
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);
读入一个字节并返回
unsignedcharRead(void)
unsignedchartemp=0;
unsignedchartemp1=0;
Scl=1;
if(Sda)
temp=temp|0x01;
temp=temp&
0xfe;
if(BitCounter-1)
{
temp1=temp<
temp=temp1;
}
while(BitCounter);
return(temp);
写入DA数模转换值
voidDAC(unsignedcharData)
Start();
Send(AddWr);
//写入芯片地址
Ack();
Send(0x40);
//写入控制位,使能DAC输出
Send(Data);
//写数据
Stop();
读取AD模数转换的值,有返回值
unsignedintReadADC(unsignedcharChl)
unsignedintData;
Send(0x40|Chl);
//写入选择的通道,本程序只用单端输入,差分部分需要自行添加
//Chl的值分别为0、1、2、3,分别代表1-4通道
Send(AddRd);
//读入地址
Data=Read();
//读数据
Data=Data*196;
//还原电压值近似
Data=Data/100;
NoAck();
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;
//重新赋值
j++;
if(j==200)
{j=0;
ADFlag=1;
}//定时置位AD采样标志位