单片机c语言编程问题,功能是用定时器T0使发光管间隔200ms闪烁,定时器T1使数码管循环显示0-59.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机c语言编程问题,功能是用定时器T0使发光管间隔200ms闪烁,定时器T1使数码管循环显示0-59.相关的知识,希望对你有一定的参考价值。

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit led1=P1^0;
uchar num,num1,num2,shi,ge;
uchar code tabledula[]=

0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
;

void delayxms(uint xms);
void desplay(uchar shi,uchar ge);

void main()

TMOD=0x11;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)

desplay(shi,ge);



void delayxms(uint xms)

uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);



void desplay(uchar shi,uchar ge)

dula=1;
P0=tabledula[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayxms(5);

dula=1;
P0=tabledula[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayxms(5);

void T0_time() interrupt 1

TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==4)

num1=0;
led1=~led1;




void T1_time() interrupt 3

TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num2++;
if(num2==20)

num2=0;
num++;
if(num==60)
num=0;
shi=num/10;
ge=num%10;



如上程序所示,在最后的中断函数void T1_time() interrupt 3
中的"num2=0;"这句如果少了的话,竟然也会实现数码管0-59循环显示,只不过时间不是一秒间隔,而是好几秒,谁能告诉我这是为什么?因为少了这句的话从程序上看应该只会显示0然后1,然后就不变了。

……
num2++;
if(num2==20)

num2=0;//少了这句,num2会持续增长,长到255后,才变成0。
……

num2:0~255,只有在=20时,数字才加一。
那么,就是约12.5秒,数字才加一。
参考技术A 溢出了

然后就从0开始累加 然后你懂得的
参考技术B 有点晕

51单片机:定时器/计数器TMOD设定

51单片机:定时器/计数器TMOD设定

上图为TMOD格式,8位分为两组,高四位控制T1,低四位控制T0
GATE :为门控位,GATE=0时,只要在编写程序时,使TCON中的TRO或TR1为1,就可以启动定时器/计数器工作。
GATE=1时,不仅要在编写程序时,使TCON中的TRO或TR1为1,且需要外部引脚也为高电平,才能工作。
C/T :定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。
M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。

几种TMOD设置:
定时器工作模式下,GATE = 0:

  • TMOD = 0X01 (T0工作在方式1)
  • TMOD = 0X02 (T0工作在方式2)
  • TMOD = 0X10 (T1工作在方式1)
  • TMOD = 0X20 (T1工作在方式2)

1.方式0时,N=13(此为TH为8位,TL为5位)
2.方式1时,N=16(此为TH为8位,TL为8位

以上是关于单片机c语言编程问题,功能是用定时器T0使发光管间隔200ms闪烁,定时器T1使数码管循环显示0-59.的主要内容,如果未能解决你的问题,请参考以下文章

51单片机C语言秒表程序报错误和警告(程序如下)

求51单片机中,用C语言写的五个中断源的中断函数的书写规则,就是进入中断函数时的那个函数名,并说明...

求解单片机编程:利用定时器/计数器T0的方式2,采用中断方式,在PL0引脚输出10KHZ方波。时钟频率12MHZ

4.10 51单片机-使用计数器测量NE555脉冲频率

4.10 51单片机-使用计数器测量NE555脉冲频率

51单片机中断程序大全