永发信息网

这个C语言程序中定时器0怎么不自启?求助谢谢

答案:2  悬赏:70  手机版
解决时间 2021-03-02 20:33
  • 提问者网友:溺爱和你
  • 2021-03-02 09:27
#include //定义所有需要使用的引脚
sbit m0=P3^0;
sbit m1=P3^1;
sbit m2=P3^3;
sbit m3=P3^4;
sbit m4=P3^2;
sbit m5=P3^5;
sbit n0=P1^0;
sbit n1=P1^1;
sbit n2=P1^2;
sbit n3=P1^3;
sbit PWM=P1^4;
unsigned char tp=0;
unsigned int count=0;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf}; //段码0~f
char data xxx[4]={0x80,0x40,0x20,0x10}; //位码
void led(unsigned int);
void delay(unsigned int);
void main() //主程序
{while(1)
{
EA=1; //开总中断
EX0=1; //开外部中断0
TMOD=0x02;
TH0=0x06;
TL0=0x06;
ET0=1;
TR0=1;
if(m3==0) //停止
{n0=n1=0;
led(3);
}
else if(m0==0) //正转
{n0=1;
n1=0;
led(0);
}
else if(m1==0) // 反转
{n0=0;
n1=1;
led(1);
}
else if(m2==0) //加速
{delay(100);
if(m2==0)
{n0=1;
n1=0;
if(tp>99)
tp=100;
else
tp=tp+10;
}}
else if(m5==0) //减速
{delay(100);
if(m5==0)
{
if(tp<1)
tp=0;
else tp=tp-10;
}
}
P0=0xff;
}
}
void led(unsigned int j) //数码管显示程序
{
if(j==0)
{
P2=xxx[0];
P0=tab[0];
delay(1);
P2=xxx[1];
P0=tab[6];
delay(1);
P2=xxx[2];
P0=tab[4];
delay(1);
P2=xxx[3];
P0=tab[0];
delay(1);
}
else if(j==1)
{P2=xxx[0];
P0=tab[0];
delay(1);
P2=xxx[1];
P0=tab[6];
delay(1);
P2=xxx[2];
P0=tab[4];
delay(1);
P2=xxx[3];
P0=tab[16];
delay(1);
}
else if(j==2)
{P2=xxx[0];
P0=tab[1];
delay(1);
P2=xxx[1];
P0=tab[0];
delay(1);
P2=xxx[2];
P0=tab[0];
delay(1);
P2=xxx[3];
P0=tab[1];
delay(1);
}
else if(j==3)
{
P2=xxx[0];
P0=tab[0];
delay(1);
P2=xxx[1];
P0=tab[0];
delay(1);
P2=xxx[2];
P0=tab[0];
delay(1);
P2=xxx[3];
P0=tab[0];
delay(1);
}
else if(j==4)
{
P2=xxx[0];
P0=tab[1];
delay(1);
P2=xxx[1];
P0=tab[1];
delay(1);
P2=xxx[2];
P0=tab[1];
delay(1);
P2=xxx[3];
P0=tab[1];
delay(1);
}
}
void INT0_time() interrupt 0 //外部中断0程序
{
unsigned int h;
for(h=9;h>0;h--)
{P2=xxx[0];
P0=tab[h];
delay(1000);
P0=0x00;
}
P0=0x00;
n0=n1=n2=n3=0;
EX0=0;}
void t0(void) interrupt 1
{
if(count>100)
count=0;
if(count>tp)
PWM=0;
else
PWM=1;
count++;
}
void delay(unsigned int k) //延时程序
{
unsigned int i,y;
for(i=k;i>0;i--)
{for(y=100;y>0;y--);
}
}
最佳答案
  • 五星知识达人网友:青灯有味
  • 2021-03-02 09:59
端口不用初始化,控制寄存器不用配置?而且定时器的赋值应该在中断里做,怎么可以在whie 1里面?将之移到while 1外面,main里面。
全部回答
  • 1楼网友:轻熟杀无赦
  • 2021-03-02 11:09
这个和代码顺序有关系: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 while (1) { if (flag1s == 1) //判断1秒定时标志 { flag1s = 0; //1秒定时标志清零 sec--; //秒计数自减1【这里是先减一,后面再送显示】 //将sec按十进制位从低到高依次提取到buf数组中 buf[0] = sec%10; buf[1] = sec/10%10; buf[2] = sec/100%10; buf[3] = sec/1000%10; buf[4] = sec/10000%10; buf[5] = sec/100000%10; //从最高为开始,遇到0不显示,遇到非0退出循环 } } 如果初值要改为999999,代码可以改成如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 while (1) { if (flag1s == 1) //判断1秒定时标志 { flag1s = 0; //1秒定时标志清零 // sec--; //秒计数自减1【屏蔽】 //将sec按十进制位从低到高依次提取到buf数组中 buf[0] = sec%10; buf[1] = sec/10%10; buf[2] = sec/100%10; buf[3] = sec/1000%10; buf[4] = sec/10000%10; buf[5] = sec/100000%10; sec--; //秒计数自减1【这里是先送显示,后面再减一】 //从最高为开始,遇到0不显示,遇到非0退出循环 } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯