无聊的51小坑

下午没事玩了玩吃灰已久的51(第一次碰还是大一的时候,花了俩小时鼓捣了个秒表,当时就看着郭天祥那本书,数电啥的也没学,就会c语言)。ps:说起来挺失望的,留下检查的三个人,两个是抄了某中的板子历程,结果我的因为看错了题目导致少了一位精度被老师无视了。

这里写的例子也来自于郭天祥的书上,写的时候遇到点问题:

首先是51里向量中断号的问题,
一、中断号

外部中断0 0

定时器T0 1

外部中断1 2

定时器T1 3

串口中断 4

一定要注意在写中断服务函数时候后面的interrupt x,这里的x标号一定要对,否则进不了中断:

下面是写好改过的,功能很简单,一边闪灯,数码管一边计数,用两个定时器就可以了;
#include<reg52.h>

unsigned char index=0;
unsigned char index1=0;
unsigned char gewei=0;
unsigned char shiwei=0;

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit led0=P1^1;

sbit control_0=P2^0;
sbit control_1=P2^1;

void interrupt_init()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

TH1=(65536-50000)/256;
TL1=(65536-50000)%256;

EA=1;
ET0=1;
TR0=1;	

ET1=1;
TR1=1;

}
void delay(unsigned char j)
{
unsigned char i=0,k=0;
for(i=0;i<j;i++)
{
for(k=0;k<110;k++);
}
}
void display()
{
control_0=0;
control_1=1;
P0=table[shiwei];
P0=0xff;
control_1=0;
control_0=1;
P0=table[gewei];
P0=0xff;

}
void main()
{
interrupt_init();
while(1)
{
display();
}

}

void T0_time()interrupt 1 //定时器0
{

TH0=(65536-50000)/256;
TL0=(65535-50000)%256;

index++;

if(index==4)
{
	led0=0;
	index=0;
}
else
{
	led0=1;
}

}
void T1_time() interrupt 3//定时器1
{

TH1=(65536-50000)/256;
TL1=(65535-50000)%256;

index1++;

if(index1==20)
{
	gewei++;//个位
	index1=0;

	if(gewei==10)
	{
		gewei=0;
		shiwei++;
		if(shiwei==6)
		{
			shiwei=0;
		}
	}	
}

}

猜你喜欢

转载自blog.csdn.net/c13323527140/article/details/88092605
今日推荐