我才用的是用T0端的计数模式,计数方式为2自动再装计数,从255开始计数,来一个脉冲对变量进行加一,然后输出变量的值,我这个脉冲计数是没有时间的限制的计数。但是每次输入是个脉冲,变量才会加一,希望大神求解
#include<reg51.h>
unsigned int cnt_t0,cnt_t1,qian,bai,shi,ge,bb,wan,shiwan;
unsigned long num;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管断码表
void delay1ms(unsigned int z) //延时1ms程序
{
unsigned char i,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
void init() //T0初始化
{
num=0;
TMOD=0x06;
TH0=255;
TL0=255;
ET0=1;
EA=1;
TR0=1;
}
void display(unsigned long num_num) //驱动数码管显示
{
shiwan=num_num%1000000/100000;
wan=num_num%100000/10000;
qian=num_num%10000/1000;
bai=num_num%1000/100;
ge=num_num%100/10;
P0=0xdf; //P0是位选
P2=table[shiwan];
delay1ms(1);
P0=0xef;
P2=table[wan];
delay1ms(1);
P0=0xf7;
P2=table[qian];
delay1ms(1);
P0=0xfb;
P2=table[bai];
delay1ms(1);
P0=0xfd;
P2=table[shi];
delay1ms(1);
P0=0xfe;
P2=table[ge];
delay1ms(1);
}
void main() //主函数
{
P0=0xff;
init();
while(1)
{
display(num);
}
}
void
timert0() interrupt 1
{
num++;
}
一周热门 更多>