新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2014-4-14
- 在线时间
- 0 小时
|
5金钱
做的是单片机对外部脉冲的计数,老是不能正常显示,不知道程序哪出问题了,求指导!
#include <reg51.h>
sbit P2_0=P2^0; //数码管选定位
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned int motorspeed;
unsigned char GE,SHI,BAI,QIAN;
unsigned int counter=0; //脉冲数
unsigned int calsp; //设定多长时间计算一次
void display(); //数码管显示
void delay(); //延迟函数
void calspeed();
void main()
{
EA=1; //开启总中断
EX0=1; //开启外部中断0
IT0=1; //设置成下降沿触发方式
TMOD=0x01; //设置定时器0为模式1,即16位计数模式
TH0=(65536-10000)/256; //计数时间为10ms
TL0=(65536-10000)%256;
ET0=1; //开启定时器0中断
TR0=1; //启动定时器0
P2=P2&0xf0;
while(1)
{
display();
calspeed();
}
}
void calspeed()
{
if(calsp>=100) //100*10ms=1s计算一次
{
motorspeed=counter;
counter=0; //清零脉冲数
calsp=0; //清零标志
}
}
void _TIMER0() interrupt 1
{
TH0=(65536-10000)/256; //重新装入初值,计数时间为10ms
TL0=(65536-10000)%256;
calsp++;
}
void _IN0() interrupt 0
{
counter++;
}
void display() //数码管显示函数
{
GE=motorspeed%10;
SHI=motorspeed/10%10;
BAI=motorspeed/100%10;
QIAN=motorspeed/1000%10;
P2_0=1;
P0=table[QIAN];
delay();
P2_0=0;
P2_1=1;
P0=table[BAI];
delay();
P2_1=0;
P2_2=1;
P0=table[SHI];
delay();
P2_2=0;
P2_3=1;
P0=table[GE];
delay();
P2_3=0;
}
void delay() //延迟函数
{
unsigned char i=10;
while(i--)
;
}
|
|