OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5394|回复: 2

求大神给看看。。。

[复制链接]

4

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-4-14
在线时间
0 小时
发表于 2014-5-21 16:13:40 | 显示全部楼层 |阅读模式
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--)
;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-21 22:29:53 | 显示全部楼层
回复

使用道具 举报

13

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2013-12-12
在线时间
13 小时
发表于 2014-5-22 08:44:33 | 显示全部楼层
不能正常显示,是什么意思?显示会错乱吧。。。看你是先开的位选,在开段选,是不是有一瞬高位刷到低位去了?你先开段选试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 22:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表