全国大学生电子设计大赛获奖论文_第1页
全国大学生电子设计大赛获奖论文_第2页
全国大学生电子设计大赛获奖论文_第3页
全国大学生电子设计大赛获奖论文_第4页
全国大学生电子设计大赛获奖论文_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

计算出振荡周期,即可得出电容2.6三极管放大倍数β测量电路如图7所示,是三极管放大倍数β测量电路原理图。“Test1”为测试NPN型三极管,通过测量电压Ue,根据公式Ie=UeR1,Ie=Ie-Ib,β=IcIb,,由单片机处理后,计算出β值,由LCD1602输出测量结果。“2.7正弦波信号源电路如图8所示,是正弦波信号源电路原理图。正弦信号由专用芯片AD9850设计制作,可由单片机控制输出频率连续可调的正弦波及方波,后接集成运放芯片,降低输出电阻,提高带负载能力,并控制输出峰峰值调节范围。AD9850内含可编程DDS系统和高速比较器。系统核心是相位累加器,它由一个加法器和一个N位寄存器组成。每来一个外部参考时钟,相位寄存器便以步长M增加。相位寄存器没过2N/M个外部参考时钟后,返回到初始状态一次,从而是整个DDS系统输出一个正弦波。输出正弦波周期T0=Tc2N/M,频率fout=Mfc/2N。图8正弦波信号源电路原理图图9AD采样模块电路图2.8AD采样模块如图9所示,是AD采样模块电路图。为了进一步减小测量误差,采用16位AD7705转换器,实现了高精度测量。3系统软件设计3.1主程序流程图系统软件采用C语言编程。如图10所示,是主程序流程图。图10主程序流程框图图11系统自动休眠框图3.2系统自动休眠设计如图11所示,是系统自动休眠框图。定时由单片机定时器完成,当1分钟没有按键按下时,则自动进入休眠,此时按任意键则有单片机中断唤醒,进入休眠期前状态。4.测试方案和测试结果分析4.1直流电压测量方法和测试结果1.测量仪器:(1)直流稳压电源:型号为MPS-3003L-3;(2)4位半数字万用表:型号为MS80502.测量方法:用直流稳压电源输入直流电压,用4位半数字万用表测量输出电压。二者比较,求出误差。3.测试结果:测量数据如表1所示。表1直流电压测量数据标准电压Ui(V)0.0500.1000.1500.3001.0001.5003.000实测电压Uo(V)0.0500.1000.1490.2091.0041.5063.00误差δ(%)000.60.30.40.404.2交流电压测量方法和测试结果1.测量仪器:(1)函数信号发生器:型号为F20;(2)数字示波器:型号为DS5152CA。2.测量方法:用函数信号发生器输入交流电压,用数字示波器测量输出电压,观察波形,并读取数值。二者比较,求出误差。3.测试结果:测量数据如表2所示。表2交流电压测试数据标准电压ui(V)0.0500.1000.1500.3001.0001.5003.000标准频率fi(Hz)501503005015030050实测电压uo(V)0.0500.1000.1510.2081.0071.5093.01误差δ(%)000.60.70.70.60.34.3电阻测量方法和测试结果1.测量仪器:RLC数字电桥:型号为YD2817B.2.测量方法:将电阻插到对应测量插孔,读取数值。再用RLC数字电桥的电阻档,测量电阻,并记录数值。二者比较,求出误差。3.测试结果:测量数据如表3所示。表3电阻测量数据标准R10Ω100Ω150Ω0.51kΩ1kΩ1.5kΩ5.1kΩ实测R10.03Ω100.2Ω149.7Ω0.512kΩ1.003kΩ1.505kΩ5.10kΩ误差δ(%)0.30.20.20.40.30.404.4电容测量方法和测试结果1.测量仪器:RLC数字电桥:型号为YD2817B。2.测量方法:将电容插到对应测量插孔,读取数值。再用RLC数字电桥的电容档,测量电容,并记录数值。二者比较,求出误差。3.测试结果:测量数据如表4所示。表4电容测量数据标准C10nF33nF100nF0.1uF10uF47uF实测C10.21nF33.5nF100.2nF0.102uF10.03uF47.5uF误差δ(%)2.11.52.02.03.01.04.5三极管放大倍数β测量方法和测试结果1.测量仪器:数字万用表:型号为VC9808+。2.测量方法:分别将NPN型或PNP型三极管,插入E、B、C对应的插孔,读取β值。再用数字万用表的hFE档,分别将NPN型或PNP型三极管,插入数字万用表E、B、C对应的插孔,读取数值。二者比较,求出误差。3.测试结果:测量数据如表5所示。表5三极管放大倍数β测量数据三极管型号9013(NPN)8050(NPN)9012(PNP)8550(PNP)标准β(倍数)380.2230.1140.1330.1实测β(倍数)383228141333误差δ(%)0.40.90.60.94.6正弦波信号源测量方法和测试结果1.测量仪器:数字示波器:型号为DS5152CA。2.测量方法:用数字示波器测量输出电压,观察波形,并读取数值。3.测试结果:测量数据如表6所示。表6正弦波信号源测试数据输出电压uo100.0mv300.0mv800.0mv1.500v3.000v4.500v5.300v频率fi100kHz50kHz10kHz2kHz500Hz100Hz10Hz实测电压uo99.0mv298mv796mv1.49v2.96v4.48v5.26v实测频率fo100kHz50kHz10kHz2kHz500Hz100Hz10Hz误差δ(%)1.000.670.500.671.330.440.754.7晶体管PN结电压测量方法和测试结果1.测量仪器:数字万用表:型号为VC9808+。2.测量方法:将二极管(或三极管),插入PN结测试插孔,读取PN结电压数值。再用数字万用表的二极管档,测量晶体管的PN结电压,红表笔接晶体管的P,黑表笔接晶体管的N。二极管、三极管都可以测PN结电压。3.测试结果:测量数据如表7所示。表7晶体管的PN结电压测量数据Ube(三极管、二极管型号)Ube(9014)Ube(8050)Ube(9013)Ueb(8550)1N4001LED高亮LED标准PN结电压(v)0.6710.6720.6690.6710.5721.842.32实测PN结电压(v)0.6780.6780.6640.6750.5681.832.32误差δ(%)1.040.890.740.590.700.5405自由发挥部分自由发挥增加了2个测量功能,分别是:测晶体管PN结电压和环境温度。5.1测晶体管PN结电压电路如图12所示,测晶体管PN结电压电路。图12测PN结电压原理图图13测温度原理图5.2温度测量电路图13是测温度原理图。因晶体管的PN结电压随温度变化,温度每升高1°C,PN结的结压降下降2mV。这样测量PN结的结压更精确。如图12所示,是温度温度测量电路原理图。采用DS18B20实现,测量范围-25℃~125℃,将测量结果通过LCD1602显示。用温度计测量环境温度,并读取数值。6结论本设计按照题目要求完成了基本部分和发挥部分的全部功能,并自由发挥增加了晶体管PN结电压测量和温度测量的功能。本多功能表具有较高的测量精度,再加后期研发完善,可推广作为数字万用表使用。参考文献[1]谭博学,苗汇静.集成电路原理及应用(第2版)[M].北京:电子工业出版社,2008.[2]姜志海,赵艳蕾.单片机C语言程序设计[M].北京:电子工业出版社,2008.[3]段尚枢.运算放大器应用基础[M].哈尔滨:哈尔滨工业大学出版社,1992.[4]黄智伟.全国电子设计竞赛电路设计[M].北京:北京航空航天大学出版社,2006.[5]黄智伟.全国大学生电子设计竞赛制作实训[M].北京:北京航空航天大学出版社,2007.[6]AD736.pdf[7]STC15F2k60S2.pdf[8]李朝青.单片机原理及接口技术.北京航空航天大学出版社,2005.[9]谢自美,电子线路设计.华中科技大学出版社,2006.附录1:系统电路原理总图附录2:部分程序清单Main.c:#include<STC12C5A#include<math.H>#include<setjmp.h>#include"mytypedef.h"#include"delay.h"#include"LCD1602.h"#include"keyscan.h"//#include"sleep.h"#include"ads1232.h"//#include"dds9850.h"#include"ad7705.h"//常量定义#defineADDR_ADD6#defineMAIN_SLEEP_OPEN 0#defineCAP_SLEEP_OPEN 0#defineVOL_SLEEP_OPEN 0#defineMAIN_SLEEP 500000#defineCAP_SLEEP 200000#defineVOL_SLEEP 200000#defineln2(0.693147)#defineR1A(0)#defineR2A(198.33)#defineERROR1(22E-9)#defineR1B(0.936E6)#defineR2B(0.981E6)#defineERROR2(12E-12)//测量三级管常量定义#defineTRI_SLEEP_OPEN 0//自动休眠开关#defineTRI_SLEEP 200000//自动休眠计数#define Ib_NPN (10E-6)#define Re_NPN (10)#define Ib_PNP (10E-6)#define Rc_PNP (10)sbitLED0=P1^0;sbitsb_power=P3^2;sbitsb_CapFn=P0^4;//字符ASC定义u8codeChooseFnAsc[] ="ChooseFn:";u8codeCapFunctionAsc[] ="CapFn:";u8codeCap100uFAsc[] ="100uF";u8codeCap100nFAsc[] ="100nF";u8codeCapnFAsc[] ="nF";u8codeCappFAsc[] ="pF";u8codeCapuFAsc[] ="uF";u8codeVolFunctionAsc[] ="VolFn:";u8codeVol0_2Asc[] ="0.2V";u8codeVol2Asc[] ="2V";u8codeVol20Asc[] ="20V";u8codeVolmVAsc[] ="mV";u8codeVolVAsc[] ="V";u8codeTriFunctionAsc[] ="TriFn:";u8codeSleepNowAsc[] ="Sleeping";//全局变量定义u16g_uiTimer0;u32 g_u32Sleep=0;bitg_bCountOver;jmp_buf buf;u8 TH1Val=255,TL1Val=245;bitgb_sleepFlag=0;voidSleepNow();voidInitInterrupt(void){ g_uiTimer0=0; g_bCountOver=0;// PCON=0x30; TMOD=0x51; //0定时模式,工作方式1(16位定时),1计数模式,方式1(16位) ET0=1; //定时器0允许 TH0=0; TL0=0; ET1=1; //定时器1允许 TH1=255; TL1=255;// PT1=1; //定时器1高优先级 TR1=1; //开定时器1// EA=1; //开总中断}voidDisCapVal(u8addr,floatval){ if(val<1E-12)// <1pF { val*=1E12; Dis1602float1_3(addr,val); Dis1602Str(addr+ADDR_ADD,CappFAsc); } elseif((val>=1E-12)&&(val<1E-9))// 1pF--1nF { val*=1E12; if((val>=1)&&(val<10)) { Dis1602float1_3(addr,val); Dis1602Str(addr+ADDR_ADD,CappFAsc); } elseif((val>=10)&&(val<100)) { Dis1602float2_2(addr,val); Dis1602Str(addr+ADDR_ADD,CappFAsc); } elseif((val>=100)&&(val<1000)) { Dis1602float3_1(addr,val); Dis1602Str(addr+ADDR_ADD,CappFAsc); } else{} } elseif((val>=1E-9)&&(val<1E-6))// 1nF--1uF { val*=1E9; if((val>=1)&&(val<10)) { Dis1602float1_3(addr,val); Dis1602Str(addr+ADDR_ADD,CapnFAsc); } elseif((val>=10)&&(val<100)) { Dis1602float2_2(addr,val); Dis1602Str(addr+ADDR_ADD,CapnFAsc); } elseif((val>=100)&&(val<1000)) { Dis1602float3_1(addr,val); Dis1602Str(addr+ADDR_ADD,CapnFAsc); } else{} } elseif((val>=1E-6)&&(val<500E-6)) // 1uF--500uF { val*=1E6; if((val>=1)&&(val<10)) { Dis1602float1_3(addr,val); Dis1602Str(addr+ADDR_ADD,CapuFAsc); } elseif((val>=10)&&(val<100)) { Dis1602float2_2(addr,val); Dis1602Str(addr+ADDR_ADD,CapuFAsc); } elseif((val>=100)&&(val<500)) { Dis1602float3_1(addr,val); Dis1602Str(addr+ADDR_ADD,CapuFAsc); } else{} } else { Dis1602float1_3(addr,val);// Dis1602Str(addr+ADDR_ADD,CapuFAsc); } }voidCapFunction(void){ u8keyVal,range=1; floatfCapValue; floatfT;capBegin: Cle1602DDRAM(); Dis1602Str(LCD00,CapFunctionAsc); Dis1602Str(LCD0b,Cap100nFAsc); InitInterrupt(); sb_CapFn=0; while(1) { //休眠计数,适当修改常量CAP_SLEEP //g_u32只在键盘扫描函数中修改 g_u32Sleep++; if(g_u32Sleep>CAP_SLEEP) { g_u32Sleep=0; if(CAP_SLEEP_OPEN) { SleepNow(); } } //判断休眠标志位,若曾经休眠过,则进行想关初始化 if(gb_sleepFlag==1) { gb_sleepFlag=0; LED0=~LED0; gotocapBegin; } //主要功能进行区 keyVal=AloneKeyScan(); if(keyVal==1) { sb_CapFn=1; longjmp(buf,1); } elseif(keyVal==2) { SleepNow(); if(range==0) { range=1; Dis1602Str(LCD0b,Cap100nFAsc); } elseif(range==1) { range=0; Dis1602Str(LCD0b,Cap100uFAsc); } } if((g_bCountOver==1)&&(range==0)) { fT=(g_uiTimer0*65536+TH0*256+TL0+9)*1E-6; fCapValue= ( fT/(11*ln2*(R1A+2*R2A)) );//计算得出的电容值,单位f fCapValue-=ERROR1; if(fCapValue<0) { fCapValue*=(-1); } Dis1602float3_3(LCD19,fT); DisCapVal(LCD10,fCapValue); if((fT<100)&&(fT>=1)) { DelayXMs(200); } elseif(fT<1) { DelayXMs(300); } g_uiTimer0=0; TH0=0; TL0=0; TH1=255; TL1=255; g_bCountOver=0; TR1=1; } elseif((g_bCountOver==1)&&(range==1)) { fT=(g_uiTimer0*65536+TH0*256+TL0+9)*1E-6; fCapValue= ( fT/(11*ln2*(R1B+2*R2B)) );//计算得出的电容值,单位f fCapValue-=ERROR2; if(fCapValue<0) { fCapValue*=(-1); } DisCapVal(LCD10,fCapValue);// Dis1602float4_3(LCD10,fCapValue*1E12); if((fT<100)&&(fT>=1)) { DelayXMs(200); } elseif(fT<1) { DelayXMs(300); } g_uiTimer0=0; TH0=0; TL0=0; TH1=255; TL1=255; g_bCountOver=0; TR1=1; } }}voidDisVolVal(u8addr,floatval){ Dis1602float2_3(addr,val); Dis1602Str(addr+ADDR_ADD,VolVAsc); }voidVolFunction(void){ u8keyVal,range=0;//0:0.21:22:20 u16u16_ad1;volBegin: Cle1602DDRAM(); Dis1602Str(LCD00,VolFunctionAsc); Dis1602Str(LCD0b,Vol0_2Asc); while(1) { //休眠计数,适当修改常量VOL_SLEEP //g_u32只在键盘扫描函数中修改 g_u32Sleep++; if(g_u32Sleep>VOL_SLEEP) { g_u32Sleep=0; if(VOL_SLEEP_OPEN) { SleepNow(); } } //判断休眠标志位,若曾经休眠过,则进行想关初始化 if(gb_sleepFlag==1) { gb_sleepFlag=0; gotovolBegin; } //主要功能进行区 keyVal=AloneKeyScan(); if(keyVal==1) { longjmp(buf,1); } //切换量程 elseif(keyVal==2) { range++; if(range>2) { range=0; } if(range==0) { Dis1602Str(LCD0b,Vol0_2Asc); } elseif(range==1) { Dis1602Str(LCD0b,Vol2Asc); } elseif(range==2) { Dis1602Str(LCD0b,Vol20Asc); } } u16_ad1=ReADS1232(); DisVolVal(LCD10,u16_ad1/65535.0*2.5); }}voidTriFunction(void){ u8keyVal; bitmode=0; u16u16_ad1; float f_uTest; u16b;triBegin: Cle1602DDRAM(); Dis1602Str(LCD00,TriFunctionAsc); while(1) { //主要功能进行区 keyVal=AloneKeyScan(); if(keyVal==1) { longjmp(buf,1); } elseif(keyVal==2) { mode=~mode; if(mode) { } else { } } if(mode) { u16_ad1=ReADS1232(); Dis1602int5(LCD19,u16_ad1); f_uTest=u16_ad1/65535.0*2.5; DisVolVal(LCD09,f_uTest); b=(f_uTest/Re_NPN-Ib_NPN)/Ib_NPN; Dis1602int3(LCD10,b); } else { u16_ad1=ReADS1232(); Dis1602int5(LCD19,u16_ad1); f_uTest=u16_ad1/65535.0*2.5; DisVolVal(LCD09,f_uTest); b=(f_uTest/Re_NPN-Ib_NPN)/Ib_NPN; Dis1602int3(LCD10,b); } //休眠计数,适当修改常量VOL_SLEEP //g_u32只在键盘扫描函数中修改 g_u32Sleep++; if(g_u32Sleep>TRI_SLEEP) { g_u32Sleep=0; if(TRI_SLEEP_OPEN) { SleepNow(); } } //判断休眠标志位,若曾经休眠过,则进行相关初始化 if(gb_sleepFlag==1) { gb_sleepFlag=0; gototriBegin; } }}voidSleepNow(){ Cle1602DDRAM(); Dis1602Str(LCD00,SleepNowAsc); DelayXMs(500); Cle1602DDRAM(); IT0=0;//启动唤醒功能 EX0=1; EA=1; gb_sleepFlag=1; PCON|=0x02;//休眠 }voidmain(void){ u8keyVal; u16ad; floatads; Init1602(); setjmp(buf);//全局跳转函数进入点 InitInterrupt(); Cle1602DDRAM(); Dis1602Str(LCD00,ChooseFnAsc); while(1) { g_u32Sleep++; if(g_u32Sleep>MAIN_SLEEP&&MAIN_SLEEP_OPEN) { g_u32Sleep=0; SleepNow(); } if(gb_sleepFlag==1) { gb_sleepFlag=0; LED0=~LED0; longjmp(buf,1); } keyVal=AloneKeyScan(); if(keyVal==1) { TriFunction(); } elseif(keyVal==2) { SleepNow(); } elseif(keyVal==22) { zero(); VolFunction(); CapFunction(); ad=ReADS1232(); Dis1602int5(LCD0b,ad); ads=ad/65535.0*2.5; Dis1602float3_3(LCD10,ads); Dis1602float3_3(LCD18,10*ads/(2.5-ads)); DelayXMs(500); } } }voidINT0_Routine(void)interrupt0{// while(sb_power==0);// {// LED0=~LED0;// DelayXMs(1000);InitInterrupt();// longjmp(buf,1); // }}voidtimer0(void)interrupt1{ g_uiTimer0++;}voidcounter1(void)interrupt3{ if(TR0==0) { TR1=0; TH1=TH1Val; TL1=TL1Val; TR0=1; TR1=1; } elseif(TR0==1) { TR0=0; TR1=0; //关定时器0、1 g_bCountOver=1; //计数标志置位 }}LCD1602.c:#include"lcd1602.h"u8codenumAsc[]="0123456789.:";voidBuzy1602(void){ sb_e1602=1; sb_rs1602=0; sb_rw1602=1; LCD1602IO=0xff; while(LCD1602IO&0x80) { _nop_(); }}voidWr1602Com(u8com){ Buzy1602();// DelayXMs(20); sb_rs1602=0; sb_rw1602=0; LCD1602IO=com; sb_e1602=1; _nop_(); sb_e1602=0;}voidWr1602Dat(u8dat){ Buzy1602();// DelayXMs(20); sb_rs1602=1; sb_rw1602=0; LCD1602IO=dat; sb_e1602=1; _nop_(); sb_e1602=0;}voidCle1602DDRAM(void){ Wr1602Com(0x01);//数据指针清零,所有显示清零 }voidInit1602(void){ Wr1602Com(0x38);//设置2行显示,5*7点阵,8位数据口 Wr1602Com(0x0c);//开显示,显示光标,光标不闪烁 Wr1602Com(0x01);//数据指针清零,所有显示清零 Wr1602Com(0x06);//当读或写一个字符后指针加一,光标加一 }voidDis1602Str(u8addr,u8*str){ Wr1602Com(addr); while(*str!='\0') { Wr1602Dat(*str++); }}voidDis1602int2(u8addr,u8int2){ Wr1602Com(addr); if(int2<100) { addr=int2/10; Wr1602Dat(numAsc[addr]); addr=int2%10; Wr1602Dat(numAsc[addr]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); } }voidDis1602int3(u8addr,u16int3){ if(int3<1000) { Dis1602int2(addr,int3/10); Wr1602Dat(numAsc[int3%10]); } else { Dis1602Str(addr,"Err"); } }voidDis1602int4(u8addr,u16int4){ if(int4<10000) { Wr1602Com(addr); Wr1602Dat(numAsc[int4/1000]); Wr1602Dat(numAsc[int4/100%10]); Wr1602Dat(numAsc[int4/10%10]); Wr1602Dat(numAsc[int4%10]); } else { Dis1602Str(addr,"Err!"); } }voidDis1602int5(u8addr,u32int5){ if(int5<100000) { Dis1602int4(addr,int5/10); Wr1602Dat(numAsc[int5%10]); } else { Dis1602Str(addr,"Error"); } }voidDis1602int6(u8addr,u32int6){ if(int6<1000000) { Dis1602int5(addr,int6/10); Wr1602Dat(numAsc[int6%10]); } else { Dis1602Str(addr,"Error!"); } }voidDis1602float1_1(u8addr,floatf_dat){ u8dat; Wr1602Com(addr); if(f_dat<10) { dat=f_dat*10; Wr1602Dat(numAsc[dat/10]); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(numAsc[dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); } }voidDis1602float1_2(u8addr,floatf_dat){ u8dat; Wr1602Com(addr); if(f_dat<10) { dat=f_dat; Wr1602Dat(numAsc[dat]); Wr1602Dat(46);//小数点ASCII码 dat=f_dat*10; dat%=10; Wr1602Dat(numAsc[dat]); dat=((u16)(f_dat*100))%10; Wr1602Dat(numAsc[dat]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); }}voidDis1602float1_3(u8addr,floatf_dat){ u8dat; Wr1602Com(addr); if(f_dat<10) { dat=f_dat; Wr1602Dat(numAsc[dat]); Wr1602Dat(46);//小数点ASCII码 dat=f_dat*10; dat%=10; Wr1602Dat(numAsc[dat]); dat=((u16)(f_dat*100))%10; Wr1602Dat(numAsc[dat]); dat=((u16)(f_dat*1000))%10; Wr1602Dat(numAsc[dat]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); } }voidDis1602float2_1(u8addr,floatf_dat){ u8dat; Wr1602Com(addr); if(f_dat<100) { dat=f_dat; Wr1602Dat(numAsc[dat/10]); Wr1602Dat(numAsc[dat%10]); Wr1602Dat(46);//小数点ASCII码 dat=((u16)(f_dat*10))%10; Wr1602Dat(numAsc[dat]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); }}voidDis1602float2_2(u8addr,floatf_dat){ u16u16_dat; Wr1602Com(addr); if(f_dat<100) { u16_dat=f_dat; Wr1602Dat(numAsc[u16_dat/10]); Wr1602Dat(numAsc[u16_dat%10]); Wr1602Dat(46);//小数点ASCII码 u16_dat=f_dat*100; Wr1602Dat(numAsc[u16_dat/10%10]); Wr1602Dat(numAsc[u16_dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); } }voidDis1602float2_3(u8addr,floatf_dat){ u32u32_dat; Wr1602Com(addr); if(f_dat<100) { u32_dat=f_dat; Wr1602Dat(numAsc[u32_dat/10]); Wr1602Dat(numAsc[u32_dat%10]); Wr1602Dat(46);//小数点ASCII码 u32_dat=f_dat*1000; Wr1602Dat(numAsc[u32_dat/100%10]); Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); }}voidDis1602float3_1(u8addr,floatf_dat){ u16u16_dat; Wr1602Com(addr); if(f_dat<1000) { u16_dat=f_dat; Wr1602Dat(numAsc[u16_dat/100]); Wr1602Dat(numAsc[u16_dat/10%10]); Wr1602Dat(numAsc[u16_dat%10]); Wr1602Dat(46);//小数点ASCII码 u16_dat=f_dat*10; Wr1602Dat(numAsc[u16_dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); } }voidDis1602float3_2(u8addr,floatf_dat){ u32u32_dat; Wr1602Com(addr); if(f_dat<1000) { u32_dat=f_dat; Wr1602Dat(numAsc[u32_dat/100]); Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); Wr1602Dat(46);//小数点ASCII码 u32_dat=f_dat*100; Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); }}voidDis1602float3_3(u8addr,floatf_dat){ u32u32_dat; Wr1602Com(addr); if(f_dat<1000) { u32_dat=f_dat; Wr1602Dat(numAsc[u32_dat/100]); Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); Wr1602Dat(46);//小数点ASCII码 u32_dat=f_dat*1000; Wr1602Dat(numAsc[u32_dat/100%10]); Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); } }voidDis1602float4_1(u8addr,floatf_dat){ u32u32_dat; Wr1602Com(addr); if(f_dat<10000) { u32_dat=f_dat; Wr1602Dat(numAsc[u32_dat/1000%10]); Wr1602Dat(numAsc[u32_dat/100%10]); Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); Wr1602Dat(46);//小数点ASCII码 u32_dat=f_dat*10; Wr1602Dat(numAsc[u32_dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(46);//小数点ASCII码 Wr1602Dat(LCD_ERROR_ASC); }}voidDis1602float4_2(u8addr,floatf_dat){ u32u32_dat; Wr1602Com(addr); if(f_dat<10000) { u32_dat=f_dat; Wr1602Dat(numAsc[u32_dat/1000%10]); Wr1602Dat(numAsc[u32_dat/100%10]); Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); Wr1602Dat(46);//小数点ASCII码 u32_dat=f_dat*100; Wr1602Dat(numAsc[u32_dat/10%10]); Wr1602Dat(numAsc[u32_dat%10]); } else { Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat(LCD_ERROR_ASC); Wr1602Dat

温馨提示

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

评论

0/150

提交评论