#include"stdio.h"
sbit led=P1^0//LED灯接P1.0口,低电平有效。
sbit key=P1^1//按键接P1.1口,低电平有效。
bit key_flag=0//给你定义一个按键标志,为后面点亮LED保持使用
void main(void)//进入主程序
{
led=1开机的时候保持LED不亮
while(1)//进入主程序循环状态,一直在这个while循环里检测
{
if(key==0)//如果有按键被按下
{
key_flag = ~key_flag//将这个标志取反,如果在按下前,他是1,则变为0,如果是0,则变为1.
while(!key)//按键是否松开,如果松开,上面的取反有效,否则一直不变LED的状态。
}
if(key_flag)//如果这个标志为1,则LED=0,就是点亮了。
{led=0}//点亮
else{led=1}//否则就是熄灭LED指示灯。
}
}
}
如果原来的程序还能运行,那么,最大的可能是烧写端口的某一个管脚被静电烧坏了。程序调试过程中,因为需要经常接触电路和芯片,很容易出现这样的状况。
注意防静电。
以下程序仿真成功,你试试看。#include
<reg52.h>
#define
uchar
unsigned
char
#define
TL_0SET
(256
-
25)
sbit
P1_0=P1^0
sbit
P1_1=P1^1
sbit
P1_2=P1^2
sbit
P1_3=P1^3
sbit
P1_6=P1^6
sbit
P1_7=P1^7
bdata
uchar
x=0
sbit
p16=x^0
sbit
p17=x^1
sbit
flag=x^2
uchar
i,
j
void
e0int()
interrupt
0
//用外部中断0作控制开关,控制四选一数据选择器的输出
{
x++
if(x
==
4)
x
=
0
P1_7
=
p16
P1_6
=
p17
}
void
time0()
interrupt
1
{
//T0定时25us,T0的中断服务程序
TL0
=
TL_0SET
+
8//加8,是对程序做一个误差补偿,因为从进入定时中断,到执行中断里的第一句程序,是有时间间隔的,在此做一个误差补偿
i++
P1
=
i
P1_7
=
p16
P1_6
=
p17
}
void
main()
{
TR0
=
0
TMOD
=
0x02
TL0
=
TL_0SET
TR0
=
1
//T0定时器开始工作
ET0
=
1
EX0
=
1//外部中断0允许
IT0
=
1//外部中断0由下降沿触发
EA
=
1
P1_0
=
0
P1_1
=
0
P1_2
=
0
P1_3
=
0
flag
=
0
while(1)
{}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)