《单片机应用技术》项目化课件 项目7两个单片机间进行通信_第1页
《单片机应用技术》项目化课件 项目7两个单片机间进行通信_第2页
《单片机应用技术》项目化课件 项目7两个单片机间进行通信_第3页
《单片机应用技术》项目化课件 项目7两个单片机间进行通信_第4页
《单片机应用技术》项目化课件 项目7两个单片机间进行通信_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务7-1简易数字电压表设计《单片机应用技术(C语言版)》一、任务导入任务:简易数字电压表设计采用STC12C5A60S2单片机内部A/D转换器采集0~5V连续可变的模拟电压信号。转变为8位二进制数字信号(0x00~0xFF)。送单片机处理,并在四位数码管上显示出0.000~5.000V(小数点不用显示)。0~5V的模拟电压信号通过调节电位器来获得。任务:简易数字电压表设计STC12C5A60S20-5V模拟电压信号0.000-5.000数字值二、数字电压表硬件电路设计硬件电路图硬件电路图模拟信号输入数字信号显示三极管8050起到开关作用,并为每个数码管提供必要的驱动电流。三、数字电压表控制程序设计主函数流程图sfrP1_ASF=0x9D;

//A/D转换模拟功能控制寄存器sfrADC_CONTR=0xBC;//A/D转换控制寄存器sfrADC_RES=0xBD;//A/D转换结果寄存器sfrADC_RESL=0xBE;//A/D转换结果寄存器,8位转换没有用到该寄存器//声明与ADC有关的特殊功能寄存器主函数流程图#defineADC_POWER

0x80//ADC电源控制#defineADC_FLAG0x10//模数转换完成标志#defineADC_START0x08//模数转换器转换启动控制#defineADC_SPEED0x00//模数转换速度控制//定义与ADC有关的操作命令//函数名称:ADC_initiate//函数功能:初始化ADC转换//形式参数:无//返回值:无voidADC_initiate(){P1_ASF=0XFF;//设置P1端口8位均为A/D模拟输入通道

ADC_RES=0;//A/D转换结果寄存器清零ADC_CONTR=ADC_POWER|ADC_SPEED;

//打开模数转换器电源delay_ms(1);//延时1毫秒使ADC电源稳定}//函数名:ADC_STC12C5//函数功能:取AD结果函数//形式参数:第ch路通路//返回值:A/D转换结果0~255unsignedcharADC_STC12C5(unsignedcharch){ ADC_RES=0;//A/D转换结果寄存器清零 ADC_CONTR|=ch;//选择A/D当前通道 delay_ms(1);

//使输入电压达到稳定 ADC_CONTR|=ADC_START;

//令ADC_START=1,启动A/D转换 while(!(ADC_CONTR&ADC_FLAG));//等待A/D转换结束 ADC_CONTR&=(~ADC_START);

//令ADC_START=0,关闭A/D转换 return(ADC_RES);

//返回A/D转换结果}//函数名:data_process//函数功能:把ADC转换的8位数据转换为实际的电压值//形式参数:输入数据//返回值:无,实际电压值分离后存放在全局数组disp[]中voiddata_process(unsignedcharvalue){unsignedinttemp;temp=value*196;

//0~255转换为0~50000disp[3]=temp/10000;

//得到万位disp[2]=(temp/1000)%10;

//得到千位disp[1]=(temp/100)%10;//得到百位disp[0]=(temp/10)%10;//得到十位,个位不需要,只显示高4位}为什么?/函数名:seg_display//函数功能:将全局数组变量的值动态显示在四个数码管上//形式参数:引用全局数组变量disp//返回值:无voidseg_display(void){unsignedchari,scan;scan=1;for(i=0;i<4;i++)

//控制4位数码管显示

{SEGDATA=0xFF;SEGSELT=~scan;//送位选码SEGDATA=SEGTAB[disp[i]];

//送段选码delay_ms(5);scan<<=1;

//位选码左移1位

}}四、举一反三采用低成本的温度传感器——NTC器件实现环境温度的采集与显示感谢您的观看Thanks

for

your

attention.

任务7-2基于AD和DA转换芯片的可调光台灯设计《单片机应用技术(C语言版)》一、任务导入任务:可调光台灯设计任务:可调光台灯设计要求利用A/D和D/A转换芯片PCF8591,产生一个模拟电压值Vo,点亮与该引脚相连的LED发光二极管。通过控制程序调整模拟输出电压,观察发光二极管的亮度变化。二、可调光台灯硬件电路设计硬件电路图硬件电路图控制输出电压的增大与减小输出电压值Vout的范围为0~+5V,通过1KΩ限流电阻控制发光二极管的亮度。单片机与PCF8591芯片的I2C总线连接三、可调光台灯控制程序设计控制程序流程图voidmain()//主函数{unsignedcharvoltage;

//输出电压寄存器,0对应0.0V,255对应+5.0V

//每次按键按下加减5,则对应0.1V电压变化voltage=125;

while(1){

DAC_PCF8591(0x40,voltage);//控制字为01000000,允许模拟量输出if(S1==0)//按键S1按下{if(voltage==255)voltage=125;elsevoltage=voltage+5;}if(S2==0)//按键S2按下{if(voltage==0)voltage=125;elsevoltage=voltage-5;}

delay_ms(1);}}I2C时序//启动I2C总线voidIIC_Start(){SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;}//停止I2C总线voidIIC_Stop(){SDA=0;SCL=1;Delay4us();SDA=1;Delay4us();SCL=0;}//发送一字节voidIIC_SendByte(ucharwd){ uchari; for(i=0;i<8;i++)//循环移入8位

{SDA=(bit)(wd&0x80);_nop_();_nop_(); SCL=1;Delay4us();SCL=0;wd<<=1;} Delay4us(); SDA=1;//释放总线并准备读取应答

SCL=1; Delay4us(); IIC_ERROR=SDA;//IIC_ERROR=1表示无应答

SCL=0; Delay4us();}I2C代码实例//发送一个8位数并DA转换成模拟量输出voidDAC_PCF8591(ucharCtrlByte,ucharwdata){ IIC_Start(); IIC_SendByte(0x90);//发送写地址

if(IIC_ERROR==1)return; IIC_SendByte(CtrlByte);//发送控制字节

if(IIC_ERROR==1)return;IIC_SendByte(wdata);//发送需要转换的数字 if(IIC_ERROR==1)return; IIC_Stop();//收到一个字节后发送一个非应答位}//向PCF8591发送若干字节进行DA转换并输出锯齿波//主程序voidmain(){uchari; while(1) {for(i=0;i<255;i++) DAC_PCF8591(0x40,i); for(i=255;i>0;i--) DAC_PCF8591(0x40,i);}}四、举一反三采用PCF8591产生正弦波可从网络上下载采用

PCF8591完成数字万用表设计主要程序讲解//从机发送应答位voidSlave_ACK(){SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;}//从机发送非应答位voidSlave_NOACK(){SDA=1;SCL=1;Delay4us();SCL=0;SDA=0;}//接收一字节ucharIIC_ReceiveByte(){ uchari,rd=0x00; for(i=0;i<8;i++) { SCL=1;rd<<=1;rd|=SDA;Delay4us();SCL=0;Delay4us(); } SCL=0;Delay4us(); returnrd;}主要程序讲解//读入0路通道的A/D转换结果并保存到Recv_BuffervoidADC_PCF8591(ucharCtrlByte){ IIC_Start(); IIC_SendByte(0x90);//发送写地址

if(IIC_ERROR==1)return; IIC_SendByte(CtrlByte);//发送控制字节

if(IIC_ERROR==1)return; IIC_Start();//重新发送开始命令

IIC_SendByte(0x91);//发送读地址

if(IIC_ERROR==1)return; IIC_ReceiveByte();//空读一次,调整读顺序

Slave_ACK();//收到一字节后发送一个应答位

Recv_Buffer=IIC_ReceiveByte(); Slave_NOACK(); IIC_Sto

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论