当前位置: 代码迷 >> 单片机 >> 过年了,小弟我也来发年终奖,大家快来抢,哈哈!顺便把小弟我的一点小小的成果也和大家分享
  详细解决方案

过年了,小弟我也来发年终奖,大家快来抢,哈哈!顺便把小弟我的一点小小的成果也和大家分享

热度:116   发布时间:2016-04-28 16:14:48.0
过年了,我也来发年终奖,大家快来抢,哈哈!顺便把我的一点小小的成果也和大家分享。
可惜总共就只有100分,本来想把全部都给大家的。感觉在csdn上还是学到了不少东西,虽然我还很菜,可是潜力很大,呵呵。
我写的程序,大家别笑话我哈,程序的用途:测量脉冲宽度,即高电平持续的时间,用的是定时器t0,选取P3^2为输入i/o口,用数码管显示,能测量的脉冲宽度为999.9ms
借此机会积攒点人品,来年大爆发!我的股票天天涨停,哈哈。也祝csdn的同仁们发财,发财,发大财!yeah,over!发完了就睡觉
#include <AT89X52.H>
#define uchar unsigned char
#define uint unsigned int
void led_display(void);
void delay(uint tc);
void init_at89c52(void);
void time_count(void);
sbit number0=P1^0;
sbit number1=P1^1;
sbit number2=P1^2;
sbit number3=P1^3;
unsigned long int count;
uint overflow_count=0;
uint time;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,};

void main(void)
{
  init_at89c52();
  while(1)
  { time_count();
  led_display(); 
  }
}

void init_at89c52()
{
  TMOD=0x10; //定时器T0,允许使用,定时方式,模式1
  TH0=0;TL0=0; //计数器初值为0
  TR0=0;
  ET0=1;EA=1;
 }



void led_display(void)
{
  //count=12300;
  time=(count&0xfffff)/100;
  number3=0;number2=1; number1=1; number0=1;
  P0=table[time/1000];
  delay(5);
  number3=1;number2=0; number1=1; number0=1;
  P0=table[(time-1000*(time/1000))/100];
  delay(5);
  number3=1;number2=1; number1=0; number0=1;
  P0=table[(time-100*(time/100))/10]|0x80;;
  delay(5);
  number3=1;number2=1; number1=1; number0=0;
  P0=table[time%10];
  delay(5);
  number3=1;number2=1; number1=1; number0=1;
  }

void time_count()
 {
  
 
  while(P3_2)
  {
TR0=1; //开计数器
  }
  TR0=0;
  count=65536*overflow_count+TH0*256+TL0;
   
  }
void t0_response(void) interrupt 1
{
  ++overflow_count;
  }
 
void delay(uint tc) //延时程序
{
  while( tc != 0 )
  {
  unsigned int i;
  for(i=0; i<100; i++);
  tc--;
  }
}

------解决方案--------------------
这种接分的活我最喜欢

呵呵。。。


------解决方案--------------------
还有这么好的事情,我顶上!顶!顶!顶!!!!!!!!!!!嘻嘻
------解决方案--------------------
ding
------解决方案--------------------
领红包来了

呵呵


------解决方案--------------------
领奖金罗
呵呵
------解决方案--------------------
我也要
------解决方案--------------------
谢谢,谢谢,不过建议用上OS,可好玩了
------解决方案--------------------
恭喜发财
------解决方案--------------------
顶哦
------解决方案--------------------
来奔小康了,不知道楼主是做的什么项目,单片机控制的么
------解决方案--------------------
jf
------解决方案--------------------
谢谢楼主对本版的支持
OS估计就是实时操作系统UCOSII
------解决方案--------------------
接分先。

用来学习定时器挺好。建议后续的深入学习,不要使用while()循环,除了main()最后的死循环。

如果想继续优化,那就如下:

既然有高电平,那必然有上下沿。
  相关解决方案