我自己编程的程序在法编译通过,我反复查找,找不到原因,请帮忙检查一下到底在那个地方有错误,是什么原因?麻烦你告诉我出错误的地方,是什么原因发生这样的错误。
下面是我编程的程序:
//频率程序//
#include<intrins.h>
#include <reg52.h>
#define SEG P2 //7段数码管接P2
#define SCANP P1 //数码管扫描线接P1
sbit PB0=P3^2; //PBO安纽接P3.2
char TAB[3]={0xc0,0xf9,0xa4};
char disp[4]={0xc0,0xc0,0xc0,0xc0}; //显示区数组初始显示0000;
//=======声明T0定时函数=====
#define count_M1 5000 //(T0(MODE1)的计数值0.05S
#define H_0 (65636-count_M1)/256 //(T0(MODE1)的计算高8位
#define L_0 (65636-count_M1)%256 //(T0(MODE1)的计算低8位
char
times=0; // 计算中断次数
//=====声明基本变量=======
bit status_F=1; //状态标志位
char scan=1; // 扫描信号
unsigned int fred=0; // 频率变量
void delay1m(int); // 声明延迟函数
void measure(void); // 声明测量函数
void display(void); // 声明显示函数
sfr16 DPTR=0x82; //声明DPTR
//=========主程序============
main() //主程序开始
{ while(1) //无穷循环,程序一直运行
{if(PB0==0) //如果安下PB0
{ status_F=0; //则进入测量阶段
measure(); //调测量函数
while(status_F=0); //等待0;测量完毕
}
else display(); // 显示阶段
} // while 循环结束
} //主程序结束
//======= 测量函数========
void measure() //测量函数开始
{ SCANP=0xff; //关闭显示器
IE=0X8a; //启用T0,T1中断
TMOD=0X51; //T1为计算器, T0定时器
TH0=H_0; //设置T0高位
TL0=L_0; //设置T0低位
TH1=0; //TH1归0
TL1=0; //TL1归0
TR0=1; //启动TR0
TR1=1; //启动TR1
{ //测量函数结束
//==========T0_1S============= //T0_1S中断开始
void To_1s()interrupt 1
{ TH0=H_0; //设置T0计算器的高位
TL0=L_0; //设置T0计算器的低位
if(++times==20) //如果达到1S
{ times=0; //重新计次
status_F=1; //完成测量
TR0=0; //关闭TR0
TR1=0; //关闭TR1
DPL=TL1; //计算量的低8位
DPH=TH1; //计算量的高8位
fred=DPTR;
if(fred>=10000) //超过10KZ
{ disp[3]=TAB[10]; //负号填入千位数显示区
disp[2]=TAB[10]; //负号填入百位数显示区
disp[1]=TAB[fred/10000]; //填入十位数显示区
disp[0]=TAB[(fred/100)%10]; } //填入个位数显示区
else //低于10KZ
{
disp[3]=TAB[(fred/1000)%10]; //填入千位数显示区
disp[2]=TAB[(fred/100)%10]; //填入百位数显示区
disp[1]=TAB[(fred/10)%10]; //填入十位数显示区
disp[0]=TAB[fred%10];} //填入个位数显示区
} //结束if判断(达到1S)
} //T0_1S中断程序结束
//===============显示程序=============
void display(void) //显示程序开始
{ char i; //声明变量
while(PB0==1) //如果按下PB0
{ scan=0x01; //初始扫描信号
for(i=0;i<4;i++) //扫描4次
{ SEG=0xff; //关闭7段LED数码管
SCANP=~scan; //输出扫描信号
SEG=disp[i]; //输出显示信号
delay1m(4); //延迟4hm
scan<<=1; //下一个扫描信号
} //for结束扫描4次
} //结束while按下PB0
} //显示函数结束
//======延迟扫描===============
void delay1m(int x) //延迟函数开始
{ int i,j; //声明变量
for(i=0;i<x;i++) //数X次,约Xms
for(j=0;j<120;j++); //数120次结束;约1ms
} //延迟函数结束
char disp[4]={0xc0,0xc0,0xc0,0xc0};
char的范围是-128~127,数组里明显有好多数超过了char的范围,换成unsigned char
另外SCANP是什么?没定义
一周热门 更多>