单片机控制LED灯闪烁原理.doc
文本预览下载声明
一、电路图
二、原理
对于较长时间的定时,应采用复合定时的方法。这里使T/C0工作在定时器方式1,定时100ms,定时时间到后P1.0反相,即P1.0端输出周期200ms的方波脉冲。另设T/C1共作的计数器方式2,对T1输出的脉冲计数,当计数满5次时,定时1时间到,将P1.7端反相,改变灯的状态!
三、源程序
#include reg51.h /*头文件的定义*/
sbit P1_0=P1^0; /* 定义p1.0端口*/
sbit P1_7=P1^7;
timer0() interrupt 1 using 1 { /* 定时器0的中断服务程序 */
P1_0=!P1_0; /* P1.0取反 */
TH0=(65536-50000)/256; /* 赋高八位初值*/
TL0=(65536-50000)%256; /* 赋低八位初值*/
}
timer1() interrupt 3 using 2 { /*定时器1中断服务程序 */
P1_7=!P1_7; /*p1.7取反 */
}
main() { /*主函数*/
P1_7=0; /* 置灯初始灭 */
P1_0=1; /* 保证第一次反相便开始计数 */
TMOD=0x61; /* 定时器定时和计数 */
TH0=(65536-50000)/256; /* 赋初值*/
TL0=(65536-50000)%256; /* */
TH1=256-5;
TL1=256-5;
IP=0x08; /* 设置寄存器优先级 */
EA=1; /* CPU开中断 */
ET0=1; /* 开T/C0中断 */
ET1=1; /* 开T/C1中断 */
TR0=1; /* 启动T/C0 */
TR1=1; /* 启动T/C1 */
for(;;)/* */
{
}
}
四、Keil调试程序过程与结果:
1.新建一个项目
2.将led程序添加进去
3.调试程序
显示全部