可惜总共就只有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()最后的死循环。
如果想继续优化,那就如下:
既然有高电平,那必然有上下沿。