1、3.熟练掌握相关绘图软件的使用。二、 综合实验的主要内容1.选择一个实验,画出硬件电路原理图;2.编写单片机控制程序,并逐条解释;3.利用开发板,验证程序正确性; 4.完成综合实验报告(附程序)。5.将全部内容上交电子版三、成员与分工姓名分工于飞飞选题、郝亮程序编辑与调试、画电路图彭玮程序调试宋凯开发板的调试吴卓远报告总结附录1:附录2:程序*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include /包含NOP空指令函数_nop_();LCD1602.h#define AddWr 0x90 /写数据地址 #define AddRd 0x91 /读数
2、据地址sbit Sda=P20; /定义总线连接端口sbit Scl=P21;sbit wei=P27;sbit duan=P26;bit ADFlag; /定义AD采样标志位/* 延时程序*/ void mDelay(unsigned char j) unsigned int i; for(;j0;j-) for(i=0;i125;i+) ; 初始化定时器1void Init_Timer1(void) TMOD |= 0x10; TH1=0xff; /* Init value */ TL1=0x00; /PT1=1; /* 优先级 */ EA=1; /* interupt enable */
3、 ET1=1; /* enable timer1 interrupt */ TR1=1; 启动IIC总线 void Start(void) Sda=1; _nop_(); Scl=1; Sda=0; Scl=0; 停止IIC总线 void Stop(void) 应答IIC总线 void Ack(void) 非应答IIC总线 void NoAck(void) 发送一个字节 void Send(unsigned char Data) unsigned char BitCounter=8; unsigned char temp; do temp=Data; Scl=0; _nop_(); if(te
4、mp&0x80)=0x80) Sda=1; else Sda=0; Scl=1; temp=Data1; Data=temp; BitCounter-; while(BitCounter); 读入一个字节并返回 unsigned char Read(void) unsigned char temp=0; unsigned char temp1=0; Scl=1; if(Sda) temp=temp|0x01; temp=temp&0xfe; if(BitCounter-1) temp1=temp temp=temp1; while(BitCounter); return(temp); 写入DA
5、数模转换值 void DAC(unsigned char Data) Start(); Send(AddWr); /写入芯片地址 Ack(); Send(0x40); /写入控制位,使能DAC输出 Send(Data); /写数据 Stop(); 读取AD模数转换的值,有返回值 unsigned int ReadADC(unsigned char Chl) unsigned int Data; Send(0x40|Chl);/写入选择的通道,本程序只用单端输入,差分部分需要自行添加 /Chl的值分别为0、1、2、3,分别代表1-4通道 Send(AddRd); /读入地址 Data=Read(
6、); /读数据 Data=Data*196;/还原电压值近似 Data=Data/100; NoAck(); return Data; /返回值 主程序 void main() unsigned char num; /DA数模输出变量 unsigned char ADtemp; /定义中间变量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后溢出变
7、为0,往复循环。显示在LED上亮度逐渐变化 mDelay(20); /延时用于清晰看出变化 if(ADFlag) /定时采集输入模拟量 ADFlag=0; ADtemp=ReadADC(0); TempData0=(ReadADC(0)/100;/处理0通道电压显示 TempData1=(ReadADC(0)%100)/10; ADtemp=ReadADC(1); TempData2=(ReadADC(1)/100;/处理1通道电压显示 此通道暂时屏蔽,可以自行添加 TempData3=(ReadADC(1)%100)/10; ADtemp=ReadADC(2); TempData4=(Rea
8、dADC(2)/100;/处理2通道电压显示 此通道暂时屏蔽,可以自行添加 TempData5=(ReadADC(2)%100)/10; ADtemp=ReadADC(3); TempData6=(ReadADC(3)/100;/处理3通道电压显示 此通道暂时屏蔽,可以自行添加 TempData7=(ReadADC(3)%100)/10; disp(); 定时器中断程序void Timer1_isr(void) interrupt 3 using 1/定时器1执行数码管动态扫描 static unsigned int j; TH1=0xfb; /重新赋值 j+; if(j=200) j=0;ADFlag=1; /定时置位AD采样标志位
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2