我是为了用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;
}
#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;
}
主函数写错了.但是就算这个问题解决后编译通过了,其实还是有地方应该可以优化的.首先我不知道你的单片机是什么公司的,但如果是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语句就解决问题了.
AT89c2051的P1口接LED时,P1.0和P1.1应该接多大的电阻?
p1
MOV P1,#5DH CPL P1.1 CPL P1.2 CLR P1.6 SETB P1.7 求高手p1等于多少啊?
用三极管点亮LED灯的电路图
MOV P1,#5DH CPL P1.0 CPL P1.1 CLR P1.5 SETB P1.6 求高手p1等于多少啊?
51单片机控制12个led灯,分别接8个灯P0口,4个灯P1的前4个口,程序怎么写能实现从P0口到P1口的流水灯?
单片机中断程序P1=P1 | 0x80;
p1口接有8个发光二极管,编程使8个管轮流点亮,每个管亮100ms,采用定时器T0方式1,设晶振频率6MHz.用C语言
指针的逻辑运算例题 inta[5]={1,3,5,7,9},*p1=a,*p2=0;那么 p1,p2,为真,p2,p1&
在线段AB上有两点P1、P2,其中P1分AB为AP1、P1B两部分,且AP1:P1B=5:7求P1、P2的距离
单片机程序sbit didi=P1^5;是什么意思
我想用一个5V的直流电源点亮30个串联在一起的LED灯