频率计程序(单片机部分).doc

上传人:小** 文档编号:4517037 上传时间:2021-09-25 格式:DOC 页数:17 大小:101.50KB
返回 下载 相关 举报
频率计程序(单片机部分).doc_第1页
第1页 / 共17页
频率计程序(单片机部分).doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《频率计程序(单片机部分).doc》由会员分享,可在线阅读,更多相关《频率计程序(单片机部分).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、,/=/ 工程名称:MzLH04_DirectNumber/ 作 者: xinqiang Zhang(小丑) (email: xinqiangM) / 联系方式:QQ 644272644/版权所有:北京铭正同创科技有限公司 / 适应芯片: MCS51 (本例选择AT89S52)/ 编程环境: Keil C51/ 实现功能: MzLH04模块的直接数字显示功能演示/ 系统要求: PC with CPU 233MHz,128MB RAM,/ Keil uVision3(or later)/ 组成文件:/ main.c-主程序文件/LCD_Dis.c/ LCD_Dis.h/-MzLH04模块的基本驱

2、动程序/硬件连接:/LCD CS -P1.0/LCD SCK-P1.2/LCD SDA-P1.1/LCD RST-P1.3/ 端口定义请参考LCD_Config.h文件中的定义/CPU运行频率11.0592MHz(每个指令为12周期)/LCD 供电请参考具体的模块是3.3V的还是5V模块/ 当前版本: V1.00/ 日期: 2009-02-10/ / 参考文件: / 维护记录:/-/ Version 2009-02-10-V10 Modified By Xinqiang Zhang(小丑)/=#include LCD_Dis.h#include stc12c5a.h#include #defi

3、ne uint unshigned int#define uchar unsigned charunsigned char key;unsigned char adckey;unsigned char flag1=1;/手动自动档切换标志unsigned char flag2=1;/手动档切换量程unsigned char getad(void);unsigned char getkey(void);/unsigned short bcdzs(void);/unsigned short bcdxs(void);unsigned short idata Temp7=0x00,0x00,0x00,

4、0x00,0x00,0x00,0x00;unsigned short f1;unsigned short f2;unsigned short f3;unsigned short f4;unsigned short f5;unsigned short f6;unsigned short f7;static unsigned short fre;/4字节变量static unsigned short gw;static unsigned short sw;static unsigned short bw;static unsigned short sfw;static unsigned short

5、 bfw;static unsigned short qfw;unsigned short zkb;float jsf;int num=0;unsigned short cs=1;unsigned short cs1;void delay(unsigned int ms)/延时函数 unsigned char i; while(ms-) for(i=0;i250;i+) _nop_();_nop_();_nop_();_nop_(); unsigned char getad() unsigned char channel; unsigned char AD_finished=0; ADC_RE

6、S = 0; channel &= 0x01; /AD通道选择 2 ADC_CONTR |=0x40; /转换速度选择sppd1=1 ADC_CONTR &=0xDF; /转换速度选择sppd0=0 _nop_(); ADC_CONTR |= channel; /AD通道选择赋值 _nop_(); ADC_CONTR |= 0x80; /开AD转换电源 delay(1); ADC_CONTR |= 0x08; /启动AD转换 AD_finished = 0; while (AD_finished =0 ) /转换是否结束判断 AD_finished = (ADC_CONTR & 0x10);

7、ADC_CONTR &= 0xE7; /转换标志位清0 ,关闭AD转换电源 return (ADC_RES); unsigned char getkey()unsigned char jp,temp;char column=0xEF,0xDF,0xBF,0x7F;char keycode=0xEE,0xED,0xEB,0xE7,0xDE,0xDD,0xDB,0xD7,0xBE,0xBD,0xBB,0xB7,0x7E,0x7D,0x7B,0x77; /0 1 2 3 4 5 6 7 8 9 10.dofor(jp=0;jp4;jp+)P2=columnjp;if(P2!=columnjp) Ti

8、meDelay(20);if(P2!=columnjp) /按键在此列temp=P2; for(jp=0;jp16;jp+) if(temp=keycodejp)return jp; /退出getkey()函数 while(1);void main(void)/串口中断通信设置SCON=0x50;TMOD=0x20;TH1=0xfd;TL1=0xfd;REN=1;TR1 =1; /启动定时器T1ET1 =1;ES=1; /允许串行口中断PS=1; /设计串行口中断优先级EA =1; /单片机中断允许/unsigned char ucTemp=9;/*unsigned short pinli=2

9、0; unsigned short zhankongbi=12; */ LCD_Init();SetBackLight(0);/设置背光的亮度等级为0 SetBackLight(unsigned char Grade) Grade 0127的等级ClrScreen();FontSet(0,1); /ASCII字符字体设置 FontSet_cn(0,1); /汉字库字符字体设置FontMode(1,0); SetBackLight(100);/设置背光打开 /* if(flag1=1) PutString_cn(0,39,自动量程);else if(flag1=2)PutString_cn(60

10、,39,手动量程); */ while(1) / delay(150); PutString_cn(0,0,电子设计大赛培训任务); /ShowShort(0,15,cs,1); PutString_cn(36,13,频率);/PutString_cn(0,13,周期); / PutString(90,15,Hz);PutString(90,15,KHz);PutString(90,15,MHz); switch(flag2) case 1: ShowShort(66,15,bw,1); ShowShort(72,15,sw,1); ShowShort(78,15,gw,1); PutChar

11、(84,15,.); ShowShort(90,15,sfw,1); ShowShort(96,15,bfw,1); ShowShort(102,15,qfw,1); PutString(108,15,Hz); break; case 2: ShowShort(66,15,bw,1); ShowShort(72,15,sw,1); ShowShort(78,15,gw,1); PutChar(84,15,.); ShowShort(90,15,sfw,1); ShowShort(96,15,bfw,1); ShowShort(102,15,qfw,1); PutString(108,15,KH

12、z); break; case 3: ShowShort(66,15,bw,1); ShowShort(72,15,sw,1); ShowShort(78,15,gw,1); PutChar(84,15,.); ShowShort(90,15,sfw,1); ShowShort(96,15,bfw,1); ShowShort(102,15,qfw,1); PutString(108,15,MHz); break; / default:break; /ShowShort(0,26,cs1,1);PutString_cn(36,26,占空比);ShowShort(78,28,zkb,1);PutC

13、har(100,28,%); if(flag1=1) PutString_cn(36,39,自动量程);else if(flag1=2) PutString_cn(36,39,手动量程); PutString_cn(0,52,史玉龙-王琪-徐国金);SetBackLight(100);/设置背光打开 /delay(100);/加延时防止屏幕抖动 delay(150); adckey=getad();/AD键盘switch(adckey)case 0:/键1 PutChar(10,28,1);break;case 135:/键2/shizhong11=1; PutChar(10,28,2);br

14、eak;case 178: /键3/shizhong12=2;/delay(30); flag1+=1; if(flag1=3) flag1=1; break;case 199: /键4/shizhong13=3;/delay(30); if(flag1=2) flag2+=1; if(flag2=4) flag2=1; break;case 211:/键5 /delay(30); /不加延时防止屏幕抖动 PutChar(10,28,5);break;case 218:/键6 /delay(30); PutChar(10,28,6);break;case 224:/键7 /delay(30);

15、 PutChar(10,28,7);break;case 228:/键8 / delay(30); PutChar(10,28,8);break;default:break; /* key=getkey();/矩阵键盘switch(key)case 0:/C键 PutChar(2,28,C);break;case 1:/D键 PutChar(2,28,D);break;case 2: /E键 PutChar(2,28,E);break;case 3: /F键 PutChar(2,28,F);break;case 4:/9键 PutChar(2,28,9);break;case 5:/0键 Pu

16、tChar(2,28,0);break;case 6:/A键 PutChar(2,28,A);break;case 7:/B键 PutChar(2,28,B);break;case 8:/5键 PutChar(2,28,5);break;case 9:/6键 PutChar(2,28,6);break;case 10:/7键 PutChar(2,28,7);break;case 11:/8键 PutChar(2,28,8);break;case 12:/1键 PutChar(2,28,1);break;case 13:/2键 PutChar(2,28,2);break;case 14:/3键

17、/delay(30); flag1+=1; if(flag1=3) flag1=1; break;case 15:/4键 delay(10); if(flag1=2) flag2+=1; if(flag2=4) flag2=1; break;default:break; */ /*void bcdzs(float jsf1)unsiged char bw,sw,gw;bw=jsf1void bcdxs(float jsf2)unsiged char sfw,bfw,qfw;*/串口中断服务程序void UART_SER() interrupt 4 using 3if(RI)RI=0;switc

18、h(num)case 0:f1=SBUF;num+;break;case 1:f2=SBUF;num+;break;case 2:f3=SBUF;num+;break;case 3:f4=SBUF;num+;break;case 4:f5=SBUF;num+;break;case 5:f6=SBUF;num+;break;case 6:f7=SBUF;num+;break;case 7:/jsf=(float)128+255;/cs=65535;jsf=(float)f1*65536+f2*256+f3;if(f7=0xF0)jsf=(float)jsf*(f4*65536+f5*256+f6

19、)/80000;zkb=jsf;else if(f7=0x0F)jsf=8000000/jsf;jsf=(float)jsf*(f4*65536+f5*256+f6)/80000;zkb=jsf;num=0;jsf=(float)f1*65536+f2*256+f3;if(f7=0xF0)/测频,2KHZ-8M(分母为1)if(jsf=0x3E8)&(jsf0xFFFF)&(jsf=0xF4240)/1MHZ及以上fre=jsf/1000000;gw=fre%10;sw=fre/10%10;bw=fre/100;jsf=(int)jsf/1000;qfw=(int)jsf%10;bfw=(in

20、t)jsf/10%10;sfw=(int)jsf/100%10;flag2=3;/MHZif(f7=0x0F) /测周,1-2Khzjsf=8000000/jsf;if(jsf=0x3E8)&(jsf0xFFFF)&(jsf=0xF4240)/1MHZ及以上fre=jsf/1000000;gw=fre%10;sw=fre/10%10;bw=fre/100;jsf=jsf/1000;qfw=(int)jsf%10;bfw=(int)jsf/10%10;sfw=(int)jsf/100%10;flag2=3;/MHZbreak;default:break;/*Tempnum+=SBUF;cs=Te

21、mpnum;/if(num=7)num=0;jsf=(float)(Temp0*32765+Temp1*128+Temp2);if(jsf=2000)&(jsf=4000)/测频,频率范围2KHZ-4KHZjsf=8000/jsf;fre=jsf;flag2=2;/KHZelse if(jsf2000)/有可能测周,有可能测频if(Temp6=0xF0)/测周,1-2Khzfre=jsf;flag2=1;/HZelse /测频,4KHZ-8M(分母为1)jsf=8000000/jsf;if(jsf0xFFFF)&(jsf=0xF4240)/1MHZ及以上jsf=jsf/1000000;fre=

22、jsf;flag2=3;/MHZjsf=(float)fre*(Temp3*32768+Temp4*128+Temp5)/80000;zkb=jsf;/num*/RI/fre=Temp0;/fre=Temp0*32768+Temp1*128+Temp2;/*if (num=7) num=0;/数据处理if(Temp6=0x0f)/测频/fre=Temp0*32768+Temp1*128+Temp2;fre=Temp2;/fre=8000000/fre;else if(Temp6=0xf0)/测周fre=Temp0*32768+Temp1*128+Temp2;zkb=(int)fre*(Temp3*32768+Temp4*128+Temp5)/80000;*/if(TI)TI=0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁