标题: 我这单片机程序应该怎么改?读入一个频率,判断频率范围 [打印本页]
作者: 皮皮虾跟我走 时间: 2019-8-10 18:23
标题: 我这单片机程序应该怎么改?读入一个频率,判断频率范围
读入一个频率,判断频率范围,在数码管上显示相应频率对应的数码,现在能判断一次,然后数码管显示会卡在第一次频率对应的数值,读入不了新的对应数码
#include <reg52.h>
sbit beep=P1^5; //定义蜂鸣器接口
sbitk1 = P3^0; //定义测量启动按键
sfr16DPTR = 0x80; //定义DPTR
unsignedchar code LEDcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Count,f;
inta,b;
void delay(unsigned char m) //延时函数
{
while(m--);
}
void init() //定时计数器初始化
{
f=0;
a=0;
b=0;
TMOD = 0X15;
TH0 = 0x00; //计数器0初始化,计数初值为0000H
TL0 = 0x00;
TR0 = 0;
TH1 = 0xd8; // 定时器1初始化,定时时间0.01秒
TL1 = 0xf0;
TR1 = 0;
IE=0X8A;
}
void int0()interrupt 1 //计数器T0计数
{
a++;
// TH0=0X00;
// TL0=0X00;
TR0=1;
}
voidint1()interrupt 3 //定时器T1
{b++;
// if(b==100)
// {TR1=0;}
// else
TH1=0xd8;
TL1=0Xf0;
TR1=1;
}
voidduanlu() //
{
if(f<0)
{
beep=1;
delay(500);
beep=0;
}
}
voidmain() //主函数
{
init();
while(1)
{
// Count=0;
// P0=LEDcode[Count/10]; //十位送数码管十位显示
// P2=LEDcode[Count%10]; //个位送数码管个位显示
if(k1==0)
{
f=0;
TR0 = 1;
TR1 = 1;
if(b==100)
{
while(1)
{
TR0=0;
TR1=0;
DPH=TH0;
DPL=TL0;
f=(a*65535+DPTR);
// P0=LEDcode[f%10000];
/* switch(f/1000)
{
case(5):P0=0x06;break;
case(6):P0=0x5b;break;
case(7):P0=0x4f;break;
default:P0=0x66;break;
} *****/
if(4.6<=f<5.0 ) {P0=0x06;}
else if( 5.8<=f<6.0 ) {P0=0x5b;}
else if( 6.7<=f<7.0 ) {P0=0x4f;}
elseif( 7.5<=f<7.8 ) {P0=0x66;}
elseif( 8.0<=f<8.6 ) {P0=0x6d;}
elseif( 9.0<=f<9.4 ) {P0=0x7d;}
elseif( 9.7<=f<10.0 ) {P0=0x07;}
elseif( 10.2<=f<11.0 ) {P0=0x7f;}
elseif( 11.3<=f<11.6 ) {P0=0x6f;}
// if(9.8<=f<10.0 ) {P0=0x66;}
// if(8.65<=f<8.67 ) {P0=0x6d;}
// if(11.5<=f<12.0 ) {P0=0x7d;}
// if(12<=f<12.5) {P0=0x07;}
// if(8<=f<9 ) {P0=0x7f;}
// if(9<=f<10 ) {P0=0x6f;}
beep=1;
delay(500);
beep=0;
}
}
}
}
}
作者: xianfajushi 时间: 2019-8-11 06:38
if(4.6<=f&&f<5.0 )
作者: wulin 时间: 2019-8-11 11:19
《sfr16DPTR = 0x80; //定义DPTR 》 这是什么鬼,难道要另外定义P0地址?
作者: 1105730718 时间: 2019-8-12 00:09
if判断写错啦 C 不能这么写
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |