作业帮 > 综合 > 作业

我是为了用P1^5,P1^6,P1^7点亮LED灯的,可是无法点亮!程序应该没错吧,

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/19 09:01:27
我是为了用P1^5,P1^6,P1^7点亮LED灯的,可是无法点亮!程序应该没错吧,
#include
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
unsigned int num;
void mian(void)
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
TR0=1;
while(1)
{
switch(num)
{
case 50:
{
P1_5=0;
P1_6=0;
P1_7=0;
break;
}
case 100:
{
P1_5=1;
P1_6=1;
P1_7=1;
num=0;
break;
}
default:
break;
}
}
}
void timer0() interrupt 1
{
TF0=0;
num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
我是为了用P1^5,P1^6,P1^7点亮LED灯的,可是无法点亮!程序应该没错吧,
主函数写错了.但是就算这个问题解决后编译通过了,其实还是有地方应该可以优化的.首先我不知道你的单片机是什么公司的,但如果是STC的或者是AT的,那你可以将头文件改成“at89x52.h”,这样的话,就不必定义sbit P1_5这些变量了,可以直接用P1_5.再者,每当Timer0中断一次时,变量num自动加1,但是你想过这个变量溢出后会怎么样没有?必须得防止num变量溢出,可以写成这样:if(num==10000) num=0; 这样就不会溢出了.而且你在中断程序中还软件清零了TF0,没必要,每次响应中断后会硬件自动清零的.你的switch语句也有问题,当num变量为50的时候,三个LED会一起变亮还是熄灭,你又不说明LED是高电平点亮还是低电平点亮,然后当num大于50而又小于100的时候保持这个状态,达到100后会状态改变一次,然后就是无底深渊了,没有给出限制条件.如果单纯想要LED点亮一段时间,用个if语句就解决问题了.