《项目7任务6:汽车电量表设计与制作ppt课件.pptx》由会员分享,可在线阅读,更多相关《项目7任务6:汽车电量表设计与制作ppt课件.pptx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、玩转项目开发 任务六汽车电量表设计与制作一、目的与要求一、目的与要求通过单片机控制,在LCD1602液晶屏上显示电池前当电量,以此来模拟电动汽车上的电量显示及控制系统。设计要求:第一行显示“Battery Level:”,第二行显示电池前当电量。玩转项目开发 任务六汽车电量表设计与制作二二.电路设计电路设计玩转项目开发 任务六汽车电量表设计与制作三三.程序设计程序设计1.源程序源程序#include STC15F2K60S2.h#include sbit lcden=P52;/LCD1602使能端sbit lcdrs=P53;/LCD1602寄存器选择unsigned char table11
2、6=Battery Level:;/第一行显示数据unsigned char table216=;/第二行显示数据unsigned int AD_D;/AD转换值unsigned int V_T;/电池电量/void InitADC();/内部AD初始化程序unsigned char GetADCResult(unsigned char ch);/取内部10位AD数据unsigned int get_adc(unsigned char ch);/读第几通道AD数据值/玩转项目开发 任务六汽车电量表设计与制作void delay(unsigned int x)/延时程序unsigned int
3、i,j;for(i=x;i0;i-)for(j=240;j0;j-);void lcd_write_com(unsigned char com)/LCD1602写指令lcdrs=0;P0=com;lcden=1;delay(10);lcden=0;void lcd_write_data(unsigned char dat)/LCD1602写数据lcdrs=1;P0=dat;lcden=1;delay(10);lcden=0;void display()/显示程序unsigned char num;lcd_write_com(0 x80);/显示第一行for(num=0;num16;num+)l
4、cd_write_data(table1num);delay(10);玩转项目开发 任务六汽车电量表设计与制作lcd_write_com(0 xC0);/显示第二行for(num=0;num16;num+)lcd_write_data(table2num);delay(10);void init()/LCD1602初始化 delay(1000);lcd_write_com(0 x38);delay(100);/显示模式设置 lcd_write_com(0 x08);delay(100);/显示关闭lcd_write_com(0 x01);delay(100);/显示清屏lcd_write_co
5、m(0 x06);delay(100);/显示光标移动设置lcd_write_com(0 x0C);delay(100);/显示开及光标设置void main()unsigned char i;P0M0=0 xFF;/设置P0口为准双向IO(传统51模式)P0M1=0 x00;/设置P0口为准双向IO(传统51模式)P2M0=0 xFF;/设置P2口为准双向IO(传统51模式)P2M1=0 x00;/设置P2口为准双向IO(传统51模式)delay(100);/延时init();/LCD1602初始化while(1)AD_D=get_adc(6);/取第3路AD转换数据V_T=AD_D*55;
6、/数据转换V_T/=10;/应为除1024,现除10,即可显示两位小数。if(V_T/1000=0)table21=;/千位若为零,则不显示else table21=V_T/1000+0 x30;/取电量千位,转换成ASCII码 玩转项目开发 任务六汽车电量表设计与制作三三.程序设计程序设计ble22=(V_T%1000)/100+0 x30;/取电量百位,转换成ASCII码 table23=.;/显示小数点table24=(V_T%100)/10+0 x30;/取电量十位,转换成ASCII码 table25=(V_T%10)+0 x30;/取电量个位,转换成ASCII码 table26=V;
7、/显示电压字符for(i=0;i10;i+)display();/降低AD读取频率。unsigned int get_adc(unsigned char ch)unsigned int adc_r;adc_r=GetADCResult(ch)*4+ADC_RESL;/将AD转换结果高位数据和低位数据组合return(adc_r);/返回AD转换结果unsigned char GetADCResult(unsigned char ch)ADC_CONTR=0 x88|ch;/打开电源开关、通道为CH、启动转换 while(!(ADC_CONTR&0 x10);/等待AD转换结束 ADC_CONT
8、R&=0 x10;/关闭AD转换,对转换结束标志清0 return ADC_RES;/返回AD转换结果高位寄存器数据void InitADC()P1ASF=0 x07;/设置P1口的相应引应为模拟输入(AD功能)ADC_RES=0;/AD转换结果高位寄存器清零 ADC_CONTR=0 x80;/打开AD转换器电源开关 delay(100);/ADC 延时玩转项目开发 任务六汽车电量表设计与制作四、相关知识四、相关知识1.取样电压与取样电压与AD转换值计算转换值计算如图所示,可得如图所示,可得U1=(R5/(R4+R5)VSS=(1/11)VSS。单单片片机机通通过过AD转转换换可可检检测测到到
9、U1的的转转换换值值,为为数数字字信信号号。若若想想取取得得数数字字信信号号所所描描述述的的模模拟拟电电压压值值,需需要要将将数数字字值值5/1024,得得到到的的数数据据为为此此时时检检测测到到的的模模拟拟电压数值。列方程为电压数值。列方程为U1=(数字值数字值5)/1024。由上述分析可得:由上述分析可得:(数字值数字值5)/1024=(1/11)VSS转换可得:转换可得:VSS=(数字值数字值5)/102411化简为:化简为:VSS=(数字值数字值55)/1024玩转项目开发 任务六汽车电量表设计与制作电电池池电电量量检检测测精精确确到到个个位位数数方方法法:将单片机取得的AD转换值乘以
10、55,再除以1024,即可得出当前电池电量的模拟值。电电池池电电量量检检测测精精确确到到1位位小小数数方方法法:将单片机取得的AD转换值乘以550,再除以1024,即可得出当前电池电量的10倍模拟值。在显示时人为在个位和十位之间加入小数点,此时显示出来的数据和直实数据一致。因单片机对小数的处理比较复杂,故采用此方法可到得一个具有小数显示的电池电量表。注注:上述分析是以单片机供电电压为5V为例进行,若元器件参数有改变,则需要进行相应改变。计算过程中数据的存放变量需要考虑数据类型,例如定义变量时是int型,计算数据存放最大值为65535,若超过65535则无法存放或造成数据错误。若需要检测电压超过时需要定义变量为long型或更大数据类型,也可通过方程化简的方法使乘数和被除数减少。例如在精确到1位小数时除1024,我们可以把1024近似成1020所得到的结果误差为0.1V,此时1020就可以与55进行约分处理来减小乘数和被除数,使计算结果在数据类型的范围内。玩转项目开发 任务六汽车电量表设计与制作2.程序编程思路程序编程思路玩转项目开发 任务六汽车电量表设计与制作3.功能测试功能测试(1)检查电路连接是否正确:是 否(2)检查程序下载器是否连接正常:是 否(3)下载程序到目标板是否完成:是 否(4)显示不同电池电压数值:是 否THE END