频率计Word格式文档下载.docx
- 文档编号:15874176
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:12
- 大小:17.10KB
频率计Word格式文档下载.docx
《频率计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《频率计Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
voidWrite_Data(uchardat);
voidSet_Cursor(unsignedcharx,unsignedchary);
sbitxz_key=P0^6;
sbitsc_key=P0^7;
sbittd_a=P2^0;
sbittd_b=P2^1;
sbittd_c=P2^2;
sbitbuzz=P2^3;
//lcd显示定义
#defineLCD_DATAP1/*数据口*/
sbitRS=P0^0;
/*并行的指令/数据选择信号,H数据,L命令*/
sbitRW=P0^1;
/*并行读写选择信号,H读,L写*/
sbitE=P0^2;
/*并行使能端,H有效,L无效*/
//sbitPSB=P0^4;
/*串并行选择端,H选择并行,L选择串行*/
//sbitRST=P0^3;
//bitbusy=0;
/*忙碌标志*/
//*****lcd显示程序****//
voiddisplay(unsignedcharx,unsignedchary,unsignedchar*str)
{
unsignedchari=0;
Set_Cursor(x,y);
//设置显示的起始地址
while(str[i]!
='
\0'
)
Write_Data(str[i]);
//写入需要显示字符的显示码
i++;
}
voiddelay1(unsignedintk)
unsignedinti;
unsignedcharj;
for(i=0;
i<
k;
i++)
for(j=0;
j<
10;
j++);
/*bitCheckBusy()//读BF标志位,检查LCD是否就绪
{
RS=0;
delay
(1);
RW=1;
E=1;
if(LCD_DATA&
0x80)
return1;
else
return0;
}
voidWait()//等待LCD就绪
while(CheckBusy()==1)
busy=0;
//busy=1;
}*/
ucharRead_Data()//读数据
delay1
(1);
RS=1;
delay(5);
returnLCD_DATA;
voidWrite_Data(uchardat)//写一个字节数据
RW=0;
LCD_DATA=dat;
E=0;
voidWrite_Command(uchardat)//写命令
voidSet_Cursor(unsignedcharx,unsignedchary)
unsignedchari;
switch(x)//确定行号
case0x00:
i=0x80;
break;
//第一行
case0x01:
i=0x90;
//第二行
case0x02:
i=0x88;
//第三行
case0x03:
i=0x98;
//第四行
default:
i=y+i;
//确定列号
Write_Command(i);
//写地址
voidLCD_Init()/*LCD初始化*/
{delay(45);
//延时45ms
//PSB=1;
//8位并行口
//复位操作
//RST=1;
delay
(1);
//RST=0;
Write_Command(0x30);
//设置为8位并行口,基本指令集
delay(10);
//再次设置为8位并行口,基本指令集
delay(5);
Write_Command(0x38);
//设置液晶工作模式,意思:
16*2行显示,5*7点阵,8位数据
Write_Command(0x08);
Write_Command(0x01);
//清显示
Write_Command(0x06);
//整屏不移动,光标自动右移
Write_Command(0x0c);
//开显示不显示光标
//Write_Command(0x80);
//Write_Data(str1);
//Write_Command(0xc0);
//Write_Data(str2);
//****频率计算程序****//
//中断定时器*
voidt0()interrupt1
TH0=0xd8;
/*设置5m初值*/
TL0=0xf0;
timer_count1++;
if(timer_count1>
=100)/*0.5秒标志*/
{
s05_flag=1;
//timer_count1=0;
}
//外部中断计数
voidint0()interrupt0
n_f1++;
if(n_f1==1)/*第一个下降沿时开始计数*/
TH0=0xd8;
TL0=0xf0;
timer_count1=0;
TR0=1;
else
if(s05_flag==1)/*当5ms标志为一且下降沿时开始读数*/
{
cs_flag=1;
/*频率计算标志*/
TR0=0;
/*关掉T0*/
n_f2=n_f1-1;
th0=TH0-0xd8;
tl0=TL0-0xf0;
timer_count2=timer_count1;
n_f1=0;
/*初值清零*/
s05_flag=0;
timer_count1=0;
}
//频率测量
voidfre_text()
if(cs_flag==1)
cs_flag=0;
time1=(timer_count2*500.705+(tl0+th0*255)*0.05)*0.01;
ff=(n_f2)/time1;
//ff=ff-0.270;
switch_rang();
time1=(timer_count2*500.705+(tl0+th0*255)*0.05)*0.01;
ff=ff*100000;
if(ff>
500000)
if((ff>
500000)&
&
(ff<
600000))ff=ff-ff*0.00065;
600000)&
700000))ff=ff+ff*0.0025;
700000)&
800000))ff=ff+ff*0.0080;
800000)&
900000))ff=ff+ff*0.011;
900000)&
1000000))ff=ff+ff*0.0130;
else
{if(ff<
100)ff=ff-ff*0.00112;
ff=ff-ff*0.00228;
delay(50);
ff=ff/100;
switch(rang)
{case0:
ff=ff;
case1:
ff=ff*100;
case2:
ff=ff*10000;
break;
default:
}
//ff=ff-270;
rang=1;
//1ms延时子函数//
voiddelay(uintz)
uinti,j;
for(i=0;
=z;
for(j=0;
110;
//自动换挡程序//
voidswitch_rang()
if((ff<
=100)||(ff>
=1000000)==1)
if((ff<
=100)&
(ff>
=10)==1)
{rang--;
=10000)&
(ff<
{rang++;
switch(rang)
case0:
td_a=0;
td_b=0;
td_c=0;
/*1~100HZ*/
case1:
td_a=1;
/*100~10000HZ*/
case2:
td_b=1;
/*10000~1000000HZ*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 频率计